흔한 오해는 원격 데스크톱 세션이 개발 환경 전체를 노트북으로 옮긴다는 것입니다. 그것이 옮기는 것은 화면과 키보드, 마우스뿐이며 그 밖의 것은 아무것도 아닙니다. iPhone은 Xcode가 실행되는 Mac에 도달해야 하고, 그것은 자체적인 신뢰, 전송, 권한 요구 사항을 가진 별개의 연결입니다. 아래의 모든 내용은 이 분리에서 나오며, 대부분의 실패한 설정이 오후 한나절을 날리는 지점도 바로 여기입니다.

신화: 원격 제어가 기기까지 옮긴다는 생각

원격 데스크톱 소프트웨어는 디스플레이와 입력 스트림을 전달하며, 연결이 좋으면 Mac이 바로 앞에 앉아 있는 것처럼 느껴집니다. 그러나 USB는 전달하지 않고, 휴대폰을 Mac 네트워크에 올려놓지도 않습니다. 세션은 Mac 데스크톱에서 끝나고, 그곳에서 Xcode가 자체 규칙으로 기기를 찾아야 합니다. 휴대폰이 픽셀과 함께 따라온다고 가정하는 것이 이 구성에서 가장 흔한 실수입니다.

두 연결은 독립적이어서 하나는 완벽한데 다른 하나는 전혀 없을 수 있습니다. 데스크톱 세션을 고치는 것으로는 기기 경로에 대해 아무것도 알 수 없습니다.

무엇이든 구성하기 전에 휴대폰이 물리적으로 어디에 있는지 정하세요

휴대폰이 Mac 옆에 머문다면 그곳에서 평범한 로컬 설정을 하세요. 컴퓨터를 신뢰하고, 기기에서 개발자 모드를 켜고, 기계 앞에 앉은 상태에서 Xcode가 빌드하고 실행하는지 확인합니다. 그다음 원격 데스크톱은 이미 동작하는 작업 흐름을 제어합니다. 가장 저렴한 구성이며 하드웨어가 허락할 때마다 선호해야 할 방식입니다.

휴대폰이 당신과 함께 이동하고 Mac이 사무실에 남는다면, Mac에는 그 기기로 가는 지원되는 경로가 필요합니다. VPN은 양쪽 끝 사이에 네트워크 경로를 제공할 뿐 그 밖의 것은 제공하지 않습니다. 페어링, 개발자 모드, 서명 ID, 기기 등록은 모두 별개의 요구 사항으로 남습니다. 터널을 연결 자체가 아니라 스택의 한 계층으로 다루세요.

두 구성 중 어디에 속하는지 적어 두세요. 이후의 모든 점검이 그것에 달려 있고, 둘을 뒤섞으면 동작할 수 없는 해결책이 나옵니다.

검색과 전송을 서로 다른 두 문제로 다루세요

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 옆에 있을 수 있다면 그쪽을 택하세요. 가장 단순한 지원 경로가 디버깅할 계층이 가장 적기 때문입니다.

관련 글