نمیتوانید فقط iPhone را برای Xcode به یک Mac راه دور وصل کنید
دسکتاپ راه دور به شما Xcode را نشان میدهد، نه iPhoneای که روی میزتان است. دستگاه را با Macی که میسازد جفت کنید و کشف را جدا از انتقال در نظر بگیرید.
فرض معمول این است که یک نشست دسکتاپ راه دور کل محیط توسعه را به لپتاپ شما منتقل میکند. این نشست صفحهنمایش، صفحهکلید و ماوس را منتقل میکند و چیز دیگری نه. iPhone باید به Macی برسد که Xcode را اجرا میکند و آن یک اتصال جداگانه با الزامات خودش برای اعتماد، انتقال و مجوز است. همه چیز در ادامه از این تفکیک ناشی میشود و بیشتر تنظیمات ناموفق دقیقاً همانجا یک بعدازظهر را از دست میدهند.
افسانه: کنترل از راه دور دستگاه را هم جابهجا میکند
نرمافزار دسکتاپ راه دور یک نمایشگر و یک جریان ورودی را ارسال میکند و در اتصال خوب به نظر میرسد که 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 میگوید که Xcode از نسخه 15 به بعد با دستگاه کابلی از طریق رابط شبکهای مبتنی بر IPv6 محلی برای پیوند صحبت میکند، بنابراین فیلترکردن محلی میتواند حتی تلفنی را که فیزیکاً وصل است مختل کند. آن مورد را به صاحب سیاست فیلترکردن ارجاع دهید، نه اینکه خودتان آن را خاموش کنید.
با یک بیلد اثباتش کنید، نه با نماد دستگاه
یک ورودی دستگاه در فهرست، نشانگر سبز در نوار ابزار یا درخواست جفتسازی موفق، مشاهدات میانی هستند. جریان کار زمانی اثبات میشود که Xcode بیلد مجاز را نصب کند و اشکالزدا به فرآیندی که روی دستگاه اجرا میشود متصل شود.
کل توالی را از Mac اجرا کنید. xcrun devicectl device install app --device DEVICE_UDID build/MyApp.app بدون IDE نصب میکند و این مشکل رابط Xcode را از مشکل مسیر دستگاه جدا میکند. سپس برنامه را اجرا کنید و یک کنسول به آن متصل کنید. اگر نصب از خط فرمان کار کند و IDE نکند، نقص باقیمانده در طرح یا پیکربندی امضا است نه در شبکه.
چیدمان را باریک نگه دارید: یک توسعهدهنده مجاز، یک Mac ثبتشده، یک دستگاه و دسترسیای که با پایان نشست پایان مییابد. وقتی چیدمان متوقف شد اعتبارنامهها را لغو کنید. اگر تلفن میتواند بهسادگی کنار Mac بماند، همان را انتخاب کنید، چون سادهترین مسیر پشتیبانیشده همان است که کمترین لایه برای اشکالزدایی باقی میماند.