אי אפשר סתם לחבר iPhone ל-Mac מרוחק בשביל Xcode
שולחן עבודה מרוחק מראה לכם את 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 לבדו רק לעיתים נדירות גורם לטלפון מרוחק להופיע: הכתובת שהמכשיר מכריז עליה משמעותית רק במקטע שלו.
ההערה הטכנית TN3158 של Apple קובעת שמ-Xcode גרסה 15 ואילך הוא מדבר עם מכשיר בכבל דרך ממשק רשת הבנוי על IPv6 מקומי לקישור, ולכן סינון מקומי יכול להפריע אפילו לטלפון שמחובר פיזית. העבירו את המקרה למי שאחראי על מדיניות הסינון במקום לכבות אותה בעצמכם.
הוכיחו את זה בבנייה, לא בסמל מכשיר
רשומת מכשיר ברשימה, מחוון ירוק בסרגל הכלים או בקשת צימוד מוצלחת הם תצפיות ביניים. תהליך העבודה מוכח כאשר Xcode מתקין בנייה מורשית והמנפה מתחבר לתהליך שרץ במכשיר.
הריצו את הרצף המלא מה-Mac. xcrun devicectl device install app --device DEVICE_UDID build/MyApp.app מתקין בלי ה-IDE, וזה מפריד בין בעיית ממשק של Xcode לבעיית נתיב אל המכשיר. אחר כך הפעילו את האפליקציה וחברו אליה קונסולה. אם ההתקנה משורת הפקודה עובדת וה-IDE לא, התקלה שנותרה היא בסכימה או בתצורת החתימה ולא ברשת.
שמרו על סידור צר: מפתח מורשה אחד, Mac רשום אחד, מכשיר אחד, וגישה שמסתיימת כשהסשן מסתיים. בטלו אישורים כשהסידור מפסיק. אם הטלפון יכול פשוט להישאר ליד ה-Mac, בחרו בזה, כי הנתיב הנתמך הפשוט ביותר הוא זה שנשארו בו הכי מעט שכבות לניפוי.