다음을 통해 공유


MAUI 및 Xamarin SDK 문제 해결

중요

Visual Studio App Center는 2025년 3월 31일에 사용 중지될 예정입니다. Visual Studio App Center가 완전히 사용 중지될 때까지 계속 사용할 수 있지만 마이그레이션을 고려할 수 있는 몇 가지 권장 대안이 있습니다.

지원 타임라인 및 대안에 대해 자세히 알아보세요.

자세한 정보 표시 로그 수집

로그 수준을 VERBOSE로 조정하는 방법에 대한 지침은 기타 API 섹션을 참조하세요.
자세한 로그는 디버그>Windows>출력 창에서 찾을 수 있습니다.

설치 중 문제

  1. Xamarin.Forms 앱의 경우 모든 라이브러리를 참조하는 모든 프로젝트에 패키지가 설치되어 있는지 확인합니다. 그렇지 않으면 오류가 표시됩니다.
  2. Xamarin.iOS용으로 빌드할 때 이 오류가 표시되는 경우 Xamarin.iOS MTOUCH: Error MT3001: Could not AOT the assembly 'obj/**/Build/Microsoft.AppCenter.**.iOS.Bindings.dll' (MT3001) 구성 요소를 버전 10.4.0.128 이상으로 업데이트해야 합니다.
  3. Xamarin.iOS MTOUCH: Error MT5210: Native linking failed, undefined symbol: _OBJC_METACLASS_$_MS{SomeSdkClassName}. Please verify that all the necessary frameworks have been referenced and native libraries are properly linked in. (MT5210) 를 빌드할 때 이 오류가 표시되거나 유사한 오류(MT5211 App Center를 언급하는 유사한 메시지가 포함된 코드)가 표시되는 경우 특정 서비스의 API를 사용하기 전에 를 호출 AppCenter.Start 해야 합니다. 호출 Start 중이지만 이 문제가 있는 경우 Xamarin.iOS 구성 요소를 버전 10.4.0.128 이상으로 업데이트해야 합니다.
  4. 콘솔에서 "App Center SDK가 성공적으로 구성됨"이라는 메시지가 포함된 Assert 로그를 찾습니다. 이렇게 하면 SDK가 성공적으로 구성되었는지 확인합니다.

분석 데이터가 포털에 표시되지 않음

  1. SDK 모듈을 올바르게 통합했는지 확인합니다.

  2. 올바른 앱 비밀이 메서드 호출과 함께 Start() 포함되어 있는지 확인합니다. 포털에서 앱을 열고 시작 페이지로 이동하여 정확한 Start() 코드를 복사할 수 있습니다.

  3. 백 엔드로 전송되는 로그를 보려면 애플리케이션에서 로그 수준을 자세한 정보 표시로 변경하면 SDK가 콘솔에 로그를 인쇄합니다. SDK를 시작하기 전에 아래 API를 호출합니다.

    AppCenter.LogLevel = LogLevel.Verbose;
    

    로그에 "App Center SDK가 성공적으로 구성됨"(정보 로그 수준)을 확인한 다음 HTTPS 요청 로그가 표시되는지 검사.

  4. 디바이스가 온라인 상태인지 확인합니다.

  5. 경우에 따라 로그가 포털에 표시되는 데 몇 분 정도 걸릴 수 있습니다. 그런 경우 잠시 기다립니다.

  6. App Center 백 엔드가 데이터를 수신했는지 검사 분석 서비스의 로그 흐름 섹션으로 이동합니다. 이벤트가 전송되면 표시됩니다.

포털에 크래시가 표시되지 않음

  1. SDK 모듈을 올바르게 통합했는지 확인합니다.

  2. 올바른 앱 비밀이 메서드 호출과 함께 Start() 포함되어 있는지 확인합니다. 포털에서 앱을 열고 시작 페이지로 이동하여 정확한 Start() 코드를 복사할 수 있습니다.

  3. 충돌 후 앱을 다시 시작합니다. App Center 충돌은 다시 시작한 후에만 크래시 로그를 전달합니다. 또한 디버거를 연결한 경우 Xamarin.iOS 및 Xamarin.Mac에서 SDK는 크래시 로그를 저장하지 않습니다. iOS 앱을 크래시할 때 디버거가 연결되지 않았는지 확인합니다. Xamarin.Android에서는 디버거를 연결한 상태에서 크래시가 발생할 수 있지만 처리되지 않은 예외로 침입한 후 실행을 계속해야 합니다.

  4. 백 엔드로 전송되는 로그를 보려면 애플리케이션에서 로그 수준을 자세한 정보 표시로 변경하면 SDK가 콘솔에 로그를 인쇄합니다. SDK를 시작하기 전에 아래 API를 호출합니다.

    AppCenter.LogLevel = LogLevel.Verbose;
    

    로그에 "App Center SDK가 성공적으로 구성됨"(정보 로그 수준)을 확인한 다음 HTTPS 요청 로그가 표시되는지 검사.

  5. Xamarin Insights 또는 HockeyApp과 같은 크래시 보고 기능을 제공하는 다른 라이브러리는 사용하지 마세요. 하나의 크래시 보고 SDK만 통합할 수 있습니다.

  6. 디바이스가 온라인 상태인지 확인합니다.

  7. 경우에 따라 로그가 포털에 표시되는 데 몇 분 정도 걸릴 수 있습니다. 그런 경우 잠시 기다립니다.

  8. SDK가 다음 앱 시작 시 크래시가 감지되었는지 검사 하려면 API를 호출하여 앱이 마지막 세션에서 충돌했는지 여부를 검사 경고를 표시할 수 있습니다. 또는 크래시 콜백을 확장하여 서버에 성공적으로 전송되었는지 확인할 수 있습니다.

  9. App Center 백 엔드에서 크래시가 수신되었는지 검사 분석 서비스의 로그 흐름 섹션으로 이동합니다. 전송되면 충돌이 표시됩니다.

배포 및 앱 내 업데이트가 자동화된 UI 테스트를 차단하고 있습니다.

자동화된 UI 테스트를 실행하는 경우 앱 내 업데이트를 사용하도록 설정하면 App Center 백 엔드에 대해 인증을 시도하므로 자동화된 UI 테스트가 차단됩니다. UI 테스트에 App Center 배포를 사용하도록 설정하지 않는 것이 좋습니다.

DistributePlay를 추가한 후 Google Play에서 애플리케이션을 거부합니다.

Google Play는 앱 내 업데이트 구현을 Distribute 포함하므로 모듈을 사용하는 앱을 거부합니다. 이러한 상황을 방지하기 위해 App Center SDK에는 DistributePlay 기본 모듈에 대한 스텁이 포함된 모듈이 있습니다. 기본 어셈블리를 API를 모방하는 스텁 어셈블리로 대체합니다Distribute. 클라이언트 애플리케이션에는 추가 변경이 필요하지 않습니다. DistributePlay 에는 앱 내 업데이트 관련 코드가 없습니다. 모듈을 앱으로 DistributePlay 바꾼 Distribute 후에도 여전히 거부되는 경우 아래 단계에 따라 모듈이 Distribute 올바르게 대체되었는지 확인하세요.

  • Google Play 콘솔의 모든 게시 그룹에 대한 모든 릴리스에서 를 로 대체 DistributeDistributePlay 했는지 확인합니다.
  • 를 사용하는 Xamarin.Forms 경우 공유 및 Xamarin.Android 프로젝트 모두에 모듈을 DistributePlay 추가해야 합니다.
  • 출력 파일에 어셈블리가 포함되어 있지 않은지 확인합니다 Microsoft.AppCenter.Distribute.Android.Bindings.dll . APK 분석기를 사용하여 검사 수 있습니다.

iOS에서 데이터베이스를 열 수 없음을 나타내는 콘솔의 메시지

App Center는 백 엔드로 전송되기 전에 SQLite를 사용하여 로그를 유지합니다. OS에서 제공하는 라이브러리를 사용하는 대신 사용자 고유의 SQLite 라이브러리를 사용하여 애플리케이션을 묶는 경우 콘솔 [AppCenter] ERROR: -[MSACDBStorage executeSelectionQuery:]/147 Failed to open database 에서 이와 같은 오류가 표시될 수 있으며 백 엔드에 분석 또는 충돌 정보가 표시되지 않을 수 있습니다. SDK를 버전 0.16.0 이상으로 업데이트합니다.

App Center 비밀 값 보호

app_secret 앱의 식별자이며 트래픽이 적용되는 앱을 알아야 하며 기존 데이터를 검색하거나 편집하는 데 사용할 수 없습니다. app_secret 노출되는 경우 가장 큰 위험은 잘못된 데이터를 앱에 보내는 것이지만 데이터 보안에는 영향을 주지 않습니다.

중요한 데이터를 검색하려면 클라이언트 쪽에서 생성되는 앱/사용자 토큰을 제공해야 합니다. 클라이언트 쪽의 데이터를 완전히 안전하게 만들 수 있는 방법은 없습니다.

환경 변수를 사용하여 앱 비밀을 코드에 삽입하여 앱의 보안을 향상시킬 수 있습니다. 이렇게 하면 코드에 비밀이 표시되지 않습니다.