다음을 통해 공유


Xamarin.Mac 문제 해결 팁

개요

때때로 우리 모두는 프로젝트에서 작업하는 동안 API를 원하는 방식으로 작동할 수 없거나 버그를 해결하려고 할 때 중단됩니다. Xamarin의 목표는 모바일 및 데스크톱 애플리케이션을 성공적으로 작성하는 데 도움이 되는 몇 가지 리소스를 제공하는 것입니다.

이러한 리소스를 사용하면 문제를 신속하게 해결할 수 있도록 몇 가지 준비 단계를 수행할 수 있습니다.

  • 충돌을 보고하기 위해 가능한 한 문제의 근본 원인을 확인합니다.

    • "내 애플리케이션 충돌"은 진단하기 어렵습니다. "이 호출에 빈 배열을 반환할 때 애플리케이션이 충돌합니다." 수정 작업을 훨씬 쉽게 수행할 수 있습니다.

    • "NSTable을 사용할 수 없습니다."는 "이 경우 NSTableDelegate의 메서드 중 어느 것도 호출되지 않는 것 같습니다."

  • 가능한 경우 문제를 보여 주는 작은 예제 프로그램을 제공합니다. 문제를 찾는 소스 코드의 페이지를 탐색하는 데는 더 많은 시간과 노력이 필요합니다.

  • 문제가 표시되도록 애플리케이션을 변경한 내용을 알면 문제의 원인을 빠르게 좁힐 수 있습니다. 최근에 Xamarin.Mac 버전을 업그레이드했는지, 문제를 일으키는 부분을 찾기 위해 애플리케이션의 섹션을 트리밍하거나, 이전 빌드를 테스트하여 문제가 발생한 변경 내용을 찾는 것이 매우 유용할 수 있습니다.

출력 없이 앱이 충돌할 때 수행할 작업

대부분의 경우 Mac용 Visual Studio 디버거는 애플리케이션에서 예외 및 충돌을 catch하고 근본 원인을 추적하는 데 도움이 됩니다. 그러나 애플리케이션이 도크에서 반송된 다음 출력이 거의 또는 전혀 없이 종료되는 경우가 있습니다. 여기에는 다음이 포함될 수 있습니다.

  • 코드 서명 문제.
  • 특정 모노 런타임이 충돌합니다.
  • 일부 Objective-c 예외 및 크래시.
  • 일부는 프로세스 수명 초기에 충돌합니다.
  • 일부 스택 오버플로.
  • Info.plist나열된 macOS 버전이 현재 설치된 macOS 버전보다 최신 버전이거나 유효하지 않습니다.

필요한 정보를 찾기가 어려울 수 있으므로 이러한 프로그램을 디버깅하는 것은 어려울 수 있습니다. 도움이 될 수 있는 몇 가지 방법은 다음과 같습니다.

  • Info.plist나열된 macOS 버전이 현재 컴퓨터에 설치된 macOS 버전과 동일한지 확인합니다.

  • 출력을 설명할 수 있는 스택 추적 또는 Cocoa의 빨간색 출력에 대한 Mac용 Visual Studio 애플리케이션 출력( ->Pads ->Application Output)을 확인합니다.

  • 명령줄에서 애플리케이션을 실행하고 다음을 사용하여 출력( 터미널 앱에서)을 확인합니다.

    MyApp.app/Contents/MacOS/MyApp (애플리케이션의 이름은 어디에 MyApp 있나요?

  • 명령줄의 명령에 "MONO_LOG_LEVEL"를 추가하여 출력을 늘릴 수 있습니다. 예를 들면 다음과 같습니다.

    MONO_LOG_LEVEL=debug MyApp.app/Contents/MacOS/MyApp

  • 프로세스에 네이티브 디버거(lldb)를 연결하여 더 많은 정보를 제공하는지 확인할 수 있습니다(유료 라이선스 필요). 예를 들어 다음을 수행합니다.

    1. 터미널에 입력 lldb MyApp.app/Contents/MacOS/MyApp 합니다.
    2. 터미널에 입력 run 합니다.
    3. 터미널에 입력 c 합니다.
    4. 디버깅을 마치면 종료합니다.
  • 마지막 수단으로, 메서드(또는 필요에 따라 다른 위치)에서 Main 호출 NSApplication.Init 하기 전에 알려진 위치에 있는 파일에 텍스트를 작성하여 문제가 발생한 실행 단계를 추적할 수 있습니다.

알려진 문제

다음 섹션에서는 알려진 문제 및 해당 솔루션에 대해 설명합니다.

샌드박스 앱에서 디버거에 연결할 수 없음

디버거는 TCP를 통해 Xamarin.Mac 앱에 연결합니다. 즉, 기본적으로 샌드박싱을 사용하도록 설정하면 앱에 연결할 수 없으므로 적절한 사용 권한 없이 앱을 실행하려고 하면 "디버거에 연결할 수 없음" 오류가 발생합니다.

Editing the entitlements in the App sandbox.

나가는 네트워크 커넥트(클라이언트) 사용 권한은 디버거에 필요한 권한이므로 이 권한을 사용하면 디버깅이 정상적으로 허용됩니다. 디버그 없이는 디버그할 수 없으므로 디버그 빌드에 msbuild 대해서만 샌드박스가 적용된 모든 앱의 권한에 해당 권한을 자동으로 추가하도록 대상을 업데이트 CompileEntitlements 했습니다. 릴리스 빌드는 수정되지 않은 권한 파일에 지정된 자격을 사용해야 합니다.

System.NotSupportedException: 437 인코딩에 사용할 수 있는 데이터가 없습니다.

Xamarin.Mac 앱에 타사 라이브러리를 포함하는 경우 앱을 컴파일하고 실행하려고 할 때 "System.NotSupportedException: 437 인코딩에 사용할 수 있는 데이터가 없습니다"라는 형식의 오류가 발생할 수 있습니다. 예를 들어 같은 라이브러리 Ionic.Zip.ZipFile는 작업 중에 이 예외를 throw할 수 있습니다.

Xamarin.Mac 프로젝트에 대한 옵션을 열고, Mac 빌드>국제화로 이동하고, 서방 국제화를 검사 이 문제를 해결할 수 있습니다.

Editing the build options

컴파일 실패(mm5103)

이 오류는 일반적으로 Xcode의 새 버전이 릴리스되고 새 버전을 설치했지만 아직 실행하지 않은 경우에 발생합니다. 새 버전의 Xcode로 컴파일하기 전에 먼저 해당 버전을 한 번 이상 실행해야 합니다.

새 버전의 Xcode를 처음 실행할 때 Xamarin.Mac에 필요한 여러 명령줄 도구를 설치합니다. 또한 Xcode 또는 Xamarin.Mac 버전을 업데이트한 후 클린 빌드를 수행해야 합니다.

이 문제를 해결할 수 없는 경우 버그를 제출하세요.

entitlements.plist 누락

최신 버전의 Mac용 Visual Studio Info.plist 편집기에서 권한 섹션을 제거하고 별도의 Entitlements.plist 편집기(Xamarin.iOS를 통한 플랫폼 간 지원을 향상하기 위해)에 배치했습니다.

새 Mac용 Visual Studio 설치되면 새 Xamarin.Mac 앱 프로젝트를 만들 때 Entitlements.plist 파일이 프로젝트 트리에 자동으로 추가됩니다.

Selecting entitlements

Entitlements.plist 파일을 두 번 클릭하면 권한 편집기가 표시됩니다.

Editing the entitlements

기존 Xamarin.Mac 프로젝트의 경우 Solution Pad에서 프로젝트를 마우스 오른쪽 단추로 클릭하고 새 파일 추가> 선택하여 Entitlements.plist 파일을 수동으로 만들어야 합니다. 다음으로 Xamarin.Mac>빈 속성 목록을 선택합니다.

Adding a new property list

이름을 입력 Entitlements 하고 새로 만들기 단추를 클릭합니다. 프로젝트에 이전에 Entitlements 파일이 포함된 경우 새 파일을 만드는 대신 프로젝트에 추가하라는 메시지가 표시됩니다.

Verifying the overwrite of a file

포럼의 커뮤니티 지원

Xamarin 제품을 사용하는 개발자 커뮤니티는 놀랍고 많은 사람들이 Xamarin.Mac 포럼을 방문하여 경험과 전문 지식을 공유합니다. 또한 Xamarin 엔지니어는 정기적으로 포럼을 방문하여 도움을 주세요.

버그 제출

Microsoft는 사용자의 의견을 소중하게 생각합니다. Xamarin.Mac에 문제가 있는 경우:

GitHub 문제는 모두 공용입니다. 설명 또는 첨부 파일을 숨길 수 없습니다.

다음 정보를 가능한 많이 포함하세요.

  • 문제를 재현하는 간단한 예제. 문제를 재현할 수 있다면 매우 유용합니다.
  • 크래시의 전체 스택 추적.
  • 크래시 주변의 C# 코드.