সাধারণ ধারণা হলো, একটি রিমোট ডেস্কটপ সেশন পুরো ডেভেলপমেন্ট সেটআপ আপনার ল্যাপটপে নিয়ে আসে। এটি স্ক্রিন, কিবোর্ড ও মাউস নিয়ে আসে, আর কিছুই নয়। iPhone-কে Xcode চালানো Mac-এ পৌঁছাতে হবে, এবং সেটি একটি আলাদা সংযোগ যার নিজস্ব ট্রাস্ট, ট্রান্সপোর্ট ও অনুমতির প্রয়োজনীয়তা আছে। নিচের সবকিছু এই বিভাজন থেকেই আসে, এবং বেশিরভাগ ব্যর্থ সেটআপ ঠিক এখানেই একটি দুপুর হারায়।

মিথ: রিমোট কন্ট্রোল ডিভাইসও সরিয়ে নেয়

রিমোট ডেস্কটপ সফটওয়্যার একটি ডিসপ্লে ও একটি ইনপুট স্ট্রিম পাঠায়, এবং ভালো সংযোগে মনে হয় Mac বুঝি আপনার সামনে বসে আছে। যা এটি পাঠায় না তা হলো USB, আর এটি ফোনটিকে Mac-এর নেটওয়ার্কেও বসায় না। সেশনটি Mac-এর ডেস্কটপে শেষ হয়, যেখানে Xcode-কে নিজের নিয়মে একটি ডিভাইস খুঁজে বের করতে হয়। ফোনটি পিক্সেলের সাথে ভ্রমণ করে এই ধারণাই এই ব্যবস্থায় সবচেয়ে সাধারণ ভুল।

দুটি সংযোগ স্বাধীন, এবং একটি নিখুঁত হতে পারে যখন অন্যটির অস্তিত্বই নেই। ডেস্কটপ সেশন মেরামত করলে ডিভাইসের পথ সম্পর্কে আপনি কিছুই জানতে পারেন না।

কিছু কনফিগার করার আগে ঠিক করুন ফোনটি শারীরিকভাবে কোথায় আছে

যদি ফোনটি Mac-এর পাশেই থাকে, তবে সেখানেই সাধারণ লোকাল সেটআপ করুন: কম্পিউটারকে ট্রাস্ট করুন, ডিভাইসে ডেভেলপার মোড চালু করুন, এবং মেশিনের সামনে বসে নিশ্চিত করুন যে Xcode সেখানে বিল্ড ও রান করছে। তখন রিমোট ডেস্কটপ এমন একটি ওয়ার্কফ্লো নিয়ন্ত্রণ করে যা আগে থেকেই কাজ করে। এটি সবচেয়ে সস্তা ব্যবস্থা এবং হার্ডওয়্যার অনুমতি দিলে এটিই বেছে নেওয়া উচিত।

যদি ফোনটি আপনার সাথে ভ্রমণ করে আর Mac অফিসে থাকে, তবে Mac-এর সেই ডিভাইসে পৌঁছানোর একটি সমর্থিত পথ দরকার। একটি VPN দুই প্রান্তের মধ্যে নেটওয়ার্ক রুট দেয় এবং আর কিছুই দেয় না: পেয়ারিং, ডেভেলপার মোড, সাইনিং আইডেন্টিটি ও ডিভাইস নিবন্ধন সবই আলাদা প্রয়োজনীয়তা হিসেবে থাকে। টানেলটিকে সংযোগের নিজের অংশ নয়, বরং স্তূপের একটি স্তর হিসেবে দেখুন।

এই দুটি ব্যবস্থার মধ্যে আপনি কোনটিতে আছেন তা লিখে রাখুন। পরের প্রতিটি পরীক্ষা এর উপর নির্ভর করে, আর দুটিকে মিশিয়ে ফেললে এমন সমাধান আসে যা কাজ করতে পারে না।

ডিসকভারি ও ট্রান্সপোর্টকে দুটি ভিন্ন সমস্যা হিসেবে দেখুন

Xcode লোকাল নেটওয়ার্কে Bonjour-এর মাধ্যমে পেয়ার করা ওয়্যারলেস ডিভাইস খুঁজে পায়, এবং Connect via IP Address-এর মাধ্যমে পরিচিত ঠিকানার ডিভাইসেও পৌঁছাতে পারে। এরা দুটি ভিন্ন ব্যর্থতার ধরনযুক্ত দুটি ব্যবস্থা। যে ডিভাইস তালিকায় কখনো দেখা যায় না আর যে ডিভাইস দেখা যায় কিন্তু যুক্ত হতে অস্বীকার করে, তারা একই লক্ষণ নয়, যদিও দুটিই ফোন হারানোর মতো পড়া যায়।

কিছু বদলানোর আগে বিজ্ঞাপনটি খুঁজুন: dns-sd -B _apple-mobdev2._tcp সেই সার্ভিসটি তালিকাভুক্ত করে যা একটি পেয়ার করা ফোন লোকাল লিংকে প্রকাশ করে। কিছু না দেখালে ডিসকভারি স্তরটিই নষ্ট, আর ঠিকানা-ভিত্তিক সংযোগই একমাত্র পথ। সার্ভিস দেখা গেলেও Xcode যুক্ত হতে না পারলে ডিসকভারি কাজ করছে, আর ব্যর্থ হচ্ছে ট্রান্সপোর্ট বা ট্রাস্ট সম্পর্ক।

Apple-এর ওয়্যারলেস-ডিভাইস সহায়িকা একই নেটওয়ার্কের শর্ত ও ঠিকানার ওয়ার্কফ্লো দুটোই কভার করে, তাই পুরোনো সংস্করণ থেকে মনে থাকা মেনু-পথ অনুসরণ না করে আপনার ইনস্টল করা সংস্করণের সাথে মিলিয়ে পড়ুন। ভেতরের ব্যবস্থা না বদলালেও Xcode-এর সংস্করণে সংস্করণে মেনুর লেবেল বদলায়।

Mac তার জায়গা থেকে কী দেখতে পায় তা যাচাই করুন

গণনাটি আপনার ল্যাপটপে নয়, Mac-এ চালান, কারণ Mac-ই সেই মেশিন যার ডিভাইসটি দরকার। xcrun devicectl list devices সেই ডিভাইসগুলো ছাপে যেগুলোতে Xcode পৌঁছাতে পারে, আর system_profiler SPUSBDataType দেখায় কী শারীরিকভাবে যুক্ত আছে। যে ফোন দ্বিতীয় তালিকায় আছে কিন্তু প্রথমটিতে নেই, সেটি যুক্ত কিন্তু পেয়ার করা নয়, এটি নেটওয়ার্কের নয়, ট্রাস্টের সমস্যা।

xcrun devicectl list devices
system_profiler SPUSBDataType | grep -i iphone
xcrun devicectl device info DEVICE_UDID

ডিভাইসটি অন্য সাবনেটে থাকলে নিশ্চিত করুন Mac ফোনের প্রকাশ করা ঠিকানায় পৌঁছাতে পারে, এবং মনে রাখুন লিংক-লোকাল IPv6 ঠিকানা এক লিংকে সীমাবদ্ধ এবং টানেলের ওপারে রাউট হয় না। এজন্য শুধু একটি VPN দূরবর্তী ফোনকে বিরলভাবেই দেখায়: ডিভাইস যে ঠিকানা ঘোষণা করে তা কেবল তার নিজের সেগমেন্টেই অর্থবহ।

Apple-এর কারিগরি নোট TN3158 বলে, সংস্করণ 15 থেকে Xcode একটি কেবলযুক্ত ডিভাইসের সাথে লিংক-লোকাল IPv6-এর উপর গড়া নেটওয়ার্ক ইন্টারফেস দিয়ে কথা বলে, তাই লোকাল ফিল্টারিং শারীরিকভাবে প্লাগ করা ফোনের ক্ষেত্রেও বাধা দিতে পারে। সেই ক্ষেত্রে ফিল্টারিং নীতি যার অধীনে সে ব্যক্তির কাছে বিষয়টি তুলে দিন, নিজে তা বন্ধ করবেন না।

ডিভাইস আইকন নয়, একটি বিল্ড দিয়ে প্রমাণ করুন

তালিকায় ডিভাইসের এন্ট্রি, টুলবারে সবুজ সূচক বা সফল পেয়ারিং প্রম্পট, এগুলো মধ্যবর্তী পর্যবেক্ষণ। ওয়ার্কফ্লো প্রমাণিত হয় যখন Xcode একটি অনুমোদিত বিল্ড ইনস্টল করে এবং ডিবাগার ডিভাইসে চলা কোনো প্রক্রিয়ার সাথে যুক্ত হয়।

পুরো ক্রমটি Mac থেকে চালান। xcrun devicectl device install app --device DEVICE_UDID build/MyApp.app IDE ছাড়াই ইনস্টল করে, যা Xcode-এর ইন্টারফেস সমস্যাকে ডিভাইস-পথের সমস্যা থেকে আলাদা করে। তারপর অ্যাপটি চালু করুন এবং সেখানে একটি কনসোল যুক্ত করুন। কমান্ড লাইন থেকে ইনস্টল কাজ করলে কিন্তু IDE না করলে, বাকি ত্রুটি নেটওয়ার্কে নয়, স্কিম বা সাইনিং কনফিগারেশনে।

ব্যবস্থাটি সংকীর্ণ রাখুন: একজন অনুমোদিত ডেভেলপার, একটি নিবন্ধিত Mac, একটি ডিভাইস, এবং এমন অ্যাক্সেস যা সেশন শেষ হলে শেষ হয়। ব্যবস্থাটি বন্ধ হলে ক্রেডেনশিয়াল প্রত্যাহার করুন। ফোনটি যদি সহজভাবে Mac-এর পাশে থাকতে পারে, তবে সেটিই বেছে নিন, কারণ সবচেয়ে সরল সমর্থিত পথটিতেই ডিবাগ করার স্তর সবচেয়ে কম থাকে।

সম্পর্কিত নিবন্ধ