[ios] NSLog로 iOS 8 확장을 디버깅하는 방법은 무엇입니까?

- (void)viewDidLoad
{
    NSLog(@"%s", __func__);
    // ...
}

에서 viewDidLoad아이폰 OS 8의 확장 . NSLog엑스 코드에 아무것도 출력한다. NSLog하지만 컨테이너 앱에서는 평소처럼 작동합니다.

확장에서 디버그 메시지의 출력을 얻으려면 어떻게해야합니까?



답변

  1. 디버깅은 앱 확장에 대해 작동합니다.
  2. 시뮬레이터에서도 작동합니다.
  3. 앱 확장이 시뮬레이터에서 충돌하는 경우 앱 확장을 다시 시작하는 것이 쉽지 않을 수 있습니다. 시뮬레이터를 다시 시작하는 것이 빠른 해결책입니다.
  4. 앱 확장을 디버깅하는 단계 :

    1. 컨테이너 앱을 실행합니다. 이 단계에서 Xcode는 컨테이너 앱과 앱 확장을 디바이스 또는 시뮬레이터에 업로드합니다.

    2. 컨테이너 앱을 중지합니다. 이 단계는 시뮬레이터에서 디버그 할 때 중요합니다. 그렇게하지 않으면 Xcode는 시뮬레이터가 사용 중이라고 알려줍니다.

    3. Xcode에서 Debug-> Attach to Process-> By Process Identifer (PID) 또는 Name … 메뉴를 누르고, com.abc.ContainerApp.MyExtension과 같은 앱 확장 식별자를 입력하여 디버깅을 시작합니다. 중단 점을 설정하는 것을 잊지 마십시오. (2014 년 8 월 25 일 업데이트 : MyExtension (확장자 이름)을 직접 입력 할 수 있습니다.)

    4. 기기 또는 시뮬레이터에서 앱 확장을 엽니 다.


2014 년 8 월 23 일 업데이트 :

위의 디버깅 단계가 시뮬레이터의 iOS 8 SDK 베타 5가있는 Xcode 6 베타 6에서 제대로 작동하지 않음을 발견했습니다.

해결책:

  1. 시뮬레이터에서 확장을 실행하십시오.
  2. Xcode 메뉴 디버그-> 프로세스에 연결-> 메뉴의 시스템 섹션에서 “MyExtension (확장자 이름)”을 선택합니다.

중단 점이 작동합니다. 그러나 로그가 출력 창에 표시되지 않는 이유를 모르겠습니다.


답변

나도이 문제가 있습니다. Debug-> Open System Log … 메뉴에서 시뮬레이터로 이동하면 저에게 효과적입니다.

여기에서 iPhone Simulator의 모든 로그 (확장 프로그램의 로그 포함)를 볼 수 있습니다.

여기에 이미지 설명 입력


답변

NSLog완벽하게 작동하고 있습니다 .

Xcode 디버거가 확장에 연결되어 있지 않기 때문에 Xcode의 디버그 영역에 무엇이 기록되고 있는지 볼 수 없습니다. 확장은 거의 포함 된 앱 완전히 독립적입니다. 예를 들어, 별도의 번들 식별자가 있으며 OS에서 별도의 프로세스이기도합니다.

Xcode를 확장에 연결하는 데 다양한 성공을 거두었습니다. 자동으로 연결되는 것처럼 보이며 디버그 탐색기에 “Waiting to attach”로 표시되지만 연결되지는 않습니다.

때로는 Xcode에서 확장 대상을 실행할 수 있습니다.

여기에 이미지 설명 입력

그런 다음 내 확장 프로그램을 실행할 응용 프로그램을 선택할 수 있습니다.이 경우에는 알림 센터 인 “오늘”권장 사항을 선택합니다.

여기에 이미지 설명 입력

그리고 때때로 디버거를 내 확장에 연결합니다. 이 방법은 물리적 장치에서만 작동합니다.

첨부되지 않으면 @VinceYaun의 답변에서 수동 첨부 방법을 사용할 수 있습니다.

나는 또한 다른 부착 방법을 사용하여 다양한 성공을 거두었습니다. 대부분은 실패했으며 나중에 수정 될 버그 일뿐입니다.

로그 메시지를 보려면 상단 표시 줄의 Window-> 로 이동 Devices하여 장치를 선택하십시오. 해당 창 하단에서 장치 로그를 불러올 수 있습니다. 시뮬레이터에서 테스트하는 경우 @BalestraPatrick의 답변을 사용할 수 있습니다. .

일부 버그는 베타 2에서 수정되었으며, 내 생각에는 결국 확장 프로그램을 시작할 때 디버거가 자동으로 연결될 것입니다.

업데이트 : iOS 8 베타 4 릴리스 노트 :

확장

베타 4에서 수정 됨

  • Xcode에서 디버깅 할 때 확장이 실행되지 않는 경우가 있습니다.
  • UI가있는 확장이 종료되면 다시 시작되고 닫히지 않습니다.
  • 때때로 공유 또는 작업 확장 프로그램이 중단 될 수 있습니다.
  • 확장을 재배포하면 알림 센터에서 확장이 비활성화 될 수 있습니다.


답변

나도이 문제가 있습니다. Xcode는 내 디버거를 확장에 연결하거나 NSLog 메시지를 표시하지 않습니다. Xcode 디버거를 확장 프로세스에 수동으로 연결하면 최소한 중단 점이 매력처럼 작동합니다.

Debug->Attach to process->Your extension name (mine was "com.example.MyExtensionApp.MyExtension")


답변

  1. 확장에 대한 구성표 만들기
  2. 계획 실행
  3. 대화 상자에서 컨테이너 앱 선택
  4. 즐겨

그것은 나를 위해 작동합니다 🙂


답변

Xcode 8은 확장 기능을 디버깅 할 수 있습니다.

  1. 중지 버튼 옆의 콤보에서 확장 체계를 선택하고 실행하십시오.
  2. 나타나는 대화 상자에서 상위 응용 프로그램을 선택합니다.

결과 : 중단 점과 로그는 평소와 같이 작동합니다.


답변

Michael의 제안Apple의 문서를 기반으로 마침내 디버깅 영역에서 로그를 볼 수 있었던 이유 같습니다.

시뮬레이터에서 앱 확장을 빌드 및 실행하고 호스트 앱을 묻는 메시지가 표시되면 확장을 호출 할 특정 앱을 선택합니다 . 제 경우에는 PDF에서 공유 시트를 가져와 Safari에서 Action 확장 프로그램을 시작했습니다.

이전에는 작동하지 않았던 것은 Today를 호스트로 사용하라는 다른 사람들의 제안을 따르고 그 앱을 종료하고 Safari로 이동하여 내 확장 번호를 호출하는 것입니다. 더 이상 확장 프로그램을 실행하기 전에 포함 된 앱을 먼저 실행할 필요도 없습니다.

Apple의 문서에서 :

확장 체계의 실행 단계에서 호스트 앱을 실행 파일로 지정합니다. 지정된 호스트의 UI를 통해 확장에 액세스하면 Xcode 디버거가 확장에 연결됩니다.