[ios] 시뮬레이터의 Xcode 오류 : MGIsDeviceOneOfType은이 플랫폼에서 지원되지 않습니다.

여러 UILabel을 포함하는 단일보기가있는 매우 간단한 응용 프로그램이 있습니다. Simulator에서 실행하면 Xcode 콘솔이 오류를 반환합니다.

libMobileGestalt MobileGestalt.c : 875 : MGIsDeviceOneOfType은이 플랫폼에서 지원되지 않습니다.

시뮬레이터 자체는 흰색 화면 만 표시합니다. 또한 동일한 흰색 화면으로 개발자 장치에서 실행 해 보았습니다. 문서를 검색했지만에 대한 참조를 찾을 수 없습니다 MGIsDeviceOneOfType. 이 애플리케이션은 macOS 10.14의 Xcode 10 베타에서 Swift로 작성되었습니다. 나는 iPhone 7-X 시뮬레이터와 개발 용 iPhone 7에서 모두 대상 소프트웨어 (12.0)를 실행하는 것으로 실행하려고합니다.



답변

MobileGestalt

libMobileGestalt.dylib는 아이폰 OS의 모든 속성에 대한 중앙 저장소를 제공합니다. OS X의 Gestalt와 유사 할 수 있습니다 CoreServices. OS X의 Gestalt는 예를 들어 Gestalt Manager에 대해 문서화 되어 있으며 10.8부터 더 이상 사용되지 않습니다. MobileGestalt 는 개인 라이브러리이므로 Apple에서 완전히 문서화하지 않았습니다 .

MobileGestalt를 사용하면 다른 시뮬레이터에서 호환되거나 호환되지 않을 수있는 시스템 속성을 테스트 할 수 있습니다.

iOS의 상당수 시스템 프로세스와 앱은 /usr/lib/libMobileGestalt.dylib에있는 MobileGestalt에 의존합니다. 기본 라이브러리에 가깝지만 노출 된 API는 Apple 프레임 워크 규칙을 따르고 MGAPI 접두사를 사용합니다 MGIsDeviceOneOfType.

iOS 파일 시스템에서 MobileGestalt를 찾으면 찾을 수 없습니다. 모든 개인 프레임 워크 및 라이브러리와 마찬가지로 /System/Library/Caches/…etc에 미리 링크되어 있습니다. 해킹 및 펜 테스트를 좋아한다면 도구를 사용하여 추출 할 수 있습니다.

MobileGestalt는 시스템의 다양한 측면에 대한 많은 정보 (약 200 개 정도의 쿼리)를 제공합니다. 다음은 몇 가지입니다.

libMobileGestalt.dylib
//Answers to MG queries

MGCopyAnswer(@"5MSZn7w3nnJp22VbpqaxLQ");
MGCopyAnswer(@"7mV26K/1a+wTtqiunvHMUQ");
MGCopyAnswer(@"BasebandAPTimeSync");
MGCopyAnswer(@"BasebandPostponementStatus");
MGCopyAnswer(@"BasebandPostponementStatusBlob");
MGCopyAnswer(@"BasebandSecurityInfoBlob");
MGCopyAnswer(@"BasebandStatus");
MGCopyAnswer(@"BuildVersion");
MGCopyAnswer(@"CoreRoutineCapability");
MGCopyAnswer(@"DeviceClass");
MGCopyAnswer(@"DeviceClassNumber");
MGCopyAnswer(@"DeviceName");
MGCopyAnswer(@"DeviceSupports1080p");
MGCopyAnswer(@"DeviceSupports720p");
MGCopyAnswer(@"DiskUsage");
MGCopyAnswer(@"GSDeviceName");
MGCopyAnswer(@"HWModelStr");
MGCopyAnswer(@"HasBaseband");
MGCopyAnswer(@"InternalBuild");
MGCopyAnswer(@"InverseDeviceID");
MGCopyAnswer(@"IsSimulator");
MGCopyAnswer(@"MLBSerialNumber");
MGCopyAnswer(@"MaxH264PlaybackLevel");
MGCopyAnswer(@"MinimumSupportediTunesVersion");
MGCopyAnswer(@"PasswordConfigured");
MGCopyAnswer(@"PasswordProtected");
MGCopyAnswer(@"ProductType");
MGCopyAnswer(@"ProductVersion");
MGCopyAnswer(@"RegionCode");
MGCopyAnswer(@"RegionalBehaviorNTSC");
MGCopyAnswer(@"RegionalBehaviorNoPasscodeLocationTiles");
MGCopyAnswer(@"ReleaseType");
MGCopyAnswer(@"SIMStatus");

수백 개 등이있다 AirplaneMode, MobileEquipmentIdentifier

MobileGestalt는 OSType 선택기 코드 테이블을 유지합니다. 예를 들어 , 메시지의 c : 890 : libMobileGestalt MobileGestalt.c : 890 : MGIsDeviceOneOfType은이 플랫폼에서 지원되지 않습니다. 이 경우 MGIsDeviceOneOfTypeMobileGestalt 라이브러리 의 방법입니다 .

시뮬레이터 버전을 확인하는 대신 시뮬레이터의 기능을 직접 쿼리하기위한 별도의 선택기가 있습니다. 이 메시지는 시뮬레이터 버전과 Xcode 버전 간의 비 호환성 및 / 또는 시뮬레이터에서 지원되지 않는 API를 나타낼 가능성이 높습니다.


답변

프로젝트 쓰레기를 비활성화하여 성공적으로 삭제했습니다.

< Name of your Project > -> Scheme- > Edit Scheme으로 이동 한 다음 Run (왼쪽 메뉴)으로 이동 하여 다음 환경 변수를 추가합니다.

이름 : OS_ACTIVITY_MODE, : 비활성화

여기에 이미지 설명 입력


답변

제 경우에는 앱 델리게이트에서 메서드를 확인하십시오-didFinishLaunching. 나는 개인이 있었고 오류가 발생했습니다. “비공개”를 제거한 후 모든 것이 잘 작동합니다.


답변

방금 Xcode 10 Beta를 설치했는데 같은 문제가 발생했습니다. Xcode 9.4.1을 실행하고 문제가 해결되었습니다.


답변

이 오류는 시뮬레이터에서 테스트 / 디버깅 할 때만 발생합니다.

새로운 시뮬레이터 일수록 좋습니다.

케이스 : 시뮬레이터 iPhone 8을 실행하고 디버거에서이 메시지를 받았습니다.

솔루션 : 디버거에서 오류 메시지가없는 최신 시뮬레이터로 변경했습니다.


답변

Xcode 10.0의 GitHub에서 일부 프로젝트를 열 때이 문제가 발생했습니다.

실용적인 해결책은 ‘프로그램 실행 계속’을 여러 번 누르고 예외 중단 점을 비활성화하는 것 입니다. 분명히 예외는 복구 할 수있었습니다.

실제 해결책은 아니지만 그 시점에서 저에게 충분했습니다.


답변

필자의 경우 Target의 배포 대상은 iOS 8이었습니다. iOS 10.3까지 푸시했을 때 시뮬레이터와 장치 모두에서 정상적으로 실행되었습니다.

배포 대상을 변경하여 libMobileGestalt 오류 수정