สมมติฐานปกติคือเซสชันเดสก์ท็อประยะไกลย้ายสภาพแวดล้อมการพัฒนาทั้งหมดไปยังแล็ปท็อปของคุณ มันย้ายหน้าจอ คีย์บอร์ด และเมาส์ และไม่มีอะไรอื่น 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 เข้าถึงที่อยู่ที่โทรศัพท์ประกาศได้ และจำไว้ว่าที่อยู่ link-local IPv6 จำกัดอยู่ที่ลิงก์เดียวและไม่ถูกกำหนดเส้นทางผ่านอุโมงค์ นั่นคือเหตุผลที่ VPN เพียงอย่างเดียวมักไม่ทำให้โทรศัพท์ระยะไกลปรากฏ: ที่อยู่ที่อุปกรณ์โฆษณามีความหมายเฉพาะในเซกเมนต์ของตัวเอง

บันทึกทางเทคนิค TN3158 ของ Apple ระบุว่าตั้งแต่เวอร์ชัน 15 เป็นต้นไป Xcode สื่อสารกับอุปกรณ์ที่ต่อสายผ่านอินเทอร์เฟซเครือข่ายที่สร้างบน link-local IPv6 ดังนั้นการกรองในเครื่องอาจรบกวนแม้กับโทรศัพท์ที่เสียบอยู่จริง ส่งต่อกรณีนั้นให้เจ้าของนโยบายการกรองแทนที่จะปิดมันเอง

พิสูจน์ด้วยการบิลด์ ไม่ใช่ด้วยไอคอนอุปกรณ์

รายการอุปกรณ์ในลิสต์ ไฟสีเขียวบนทูลบาร์ หรือพรอมป์การจับคู่ที่สำเร็จเป็นเพียงการสังเกตระหว่างทาง เวิร์กโฟลว์ได้รับการพิสูจน์เมื่อ Xcode ติดตั้งบิลด์ที่ได้รับอนุญาตและดีบักเกอร์เชื่อมต่อกับโปรเซสที่รันอยู่บนอุปกรณ์

เรียกใช้ลำดับทั้งหมดจาก Mac xcrun devicectl device install app --device DEVICE_UDID build/MyApp.app ติดตั้งโดยไม่ต้องใช้ IDE ซึ่งแยกปัญหาอินเทอร์เฟซของ Xcode ออกจากปัญหเส้นทางของอุปกรณ์ จากนั้นเปิดแอปและเชื่อมคอนโซลเข้ากับมัน ถ้าการติดตั้งจากบรรทัดคำสั่งทำงานแต่ IDE ไม่ทำงาน ข้อบกพร่องที่เหลืออยู่ในสคีมาหรือการกำหนดค่าการลงนาม ไม่ใช่ในเครือข่าย

ทำให้การจัดวางแคบ: นักพัฒนาที่ได้รับอนุญาตหนึ่งคน Mac ที่ลงทะเบียนหนึ่งเครื่อง อุปกรณ์หนึ่งเครื่อง และการเข้าถึงที่สิ้นสุดเมื่อเซสชันสิ้นสุด เพิกถอนข้อมูลรับรองเมื่อการจัดวางสิ้นสุดลง ถ้าโทรศัพท์อยู่ข้าง ๆ Mac ได้ก็เลือกอย่างนั้น เพราะเส้นทางที่รองรับที่ง่ายที่สุดคือเส้นทางที่เหลือชั้นให้ดีบักน้อยที่สุด

บทความที่เกี่ยวข้อง