Erro Xcode no Simulador: MGIsDeviceOneOfType não é compatível com esta plataforma

99

Eu tenho um aplicativo muito simples com uma única visualização, contendo vários UILabels. Ao ser executado no Simulador, o console Xcode retorna o erro:

libMobileGestalt MobileGestalt.c: 875: MGIsDeviceOneOfType não é compatível com esta plataforma.

O próprio Simulador mostra apenas uma tela branca. Também tentei executá-lo em um dispositivo de desenvolvedor com a mesma tela branca. Eu pesquisei a documentação, mas não consigo encontrar nenhuma referência a MGIsDeviceOneOfType. O aplicativo foi escrito em Swift no Xcode 10 beta no macOS 10.14. Estou tentando executá-lo nos simuladores do iPhone 7-X, bem como no iPhone 7 de desenvolvimento, todos executando o software de destino (12.0).

Woodman
fonte
1
Você deveria ter mencionado que está usando o XCode 10 Beta. btw tendo o mesmo problema
kironet
Você está tentando usar o AWS MobileHub?
Victor 'Chris' Cabral
2
Encontrou este erro no console de depuração ao executar o aplicativo de design MVC chave de um instrutor. Estou executando o Xcode 10 (não beta). Não recebi o erro ao executar no dispositivo real.
Steve Robertson
4
Tendo este problema após a atualização do Xcode 10 (não beta)
MUH Mobile Inc.
1
O problema parece estar relacionado à plataforma em execução no simulador. Criei um projeto vazio, compilei e executei no iPhone X, XR, XS e XS-Max e não houve problema. Execute-o em qualquer coisa antes disso, começando com 8 Plus, e o erro ocorre. Mac OS X: 10.13.6, Xcode: 10.0
wbl2745

Respostas:

25

MobileGestalt

O libMobileGestalt.dylib fornece um repositório central para todas as propriedades do iOS. Pode ser análogo ao Gestalt do OS X, do qual faz parte CoreServices. O Gestalt do OS X está documentado, por exemplo, o Gestalt Manager e está obsoleto a partir de 10.8. MobileGestalt é totalmente não documentado pela Apple, pois é uma biblioteca privada.

MobileGestalt permite o teste de propriedades do sistema que podem ou não ser compatíveis em diferentes simuladores.

Muitos processos e aplicativos do sistema no iOS dependem do MobileGestalt, que está localizado em /usr/lib/libMobileGestalt.dylib. É mais uma biblioteca básica, mas suas APIs expostas seguem as convenções da estrutura da Apple e usam o MGprefixo da API, por exemplo MGIsDeviceOneOfType.

Se você procurar MobileGestalt no sistema de arquivos do iOS, não o encontrará - como todas as bibliotecas e estruturas privadas, ele foi pré-vinculado a /System/Library/Caches/...etc. Se você gosta de hacking e pen-testing, pode usar ferramentas para extraí-los.

O MobileGestalt fornece muitas informações - cerca de 200 consultas - sobre vários aspectos do sistema. Aqui estão alguns.

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");

Existem mais centenas AirplaneMode, por exemplo MobileEquipmentIdentifier, etc.

MobileGestalt mantém uma tabela de códigos do seletor OSType. por exemplo c: 890 na mensagem: libMobileGestalt MobileGestalt.c: 890: MGIsDeviceOneOfType não é suportado nesta plataforma. Neste caso, MGIsDeviceOneOfTypeé um método da biblioteca MobileGestalt .

Em vez de verificar a versão do simulador, há um seletor separado para consultar diretamente os recursos do simulador. As mensagens provavelmente indicam incompatibilidades entre as versões do simulador e versões do Xcode e / ou APIs não suportadas no simulador.

Edison
fonte
3
Essa parece uma razão lógica para o problema. O que você acabou fazendo para corrigir o problema?
Brian Sachetta
1
Como sugere a última frase. Certifique-se de que as versões do sim e do Xcode sejam compatíveis ou use apenas um dispositivo real.
Edison
Você escreveu cerca de 200 consultas , mas aparentemente há 673 chaves ofuscadas conhecidas . [editar: ah, bem, seu nome é "tymac" e o blog é de "timac" ... provavelmente não é uma coincidência]
Cœur
17

Eu o deixei cair com sucesso com a desativação do lixo do projeto.

Vá para < Nome do seu Projeto > -> Esquema -> Editar Esquema Em seguida, vá para Executar (menu à esquerda) e adicione a seguinte variável de ambiente:

Nome : OS_ACTIVITY_MODE, Valor : desativar

insira a descrição da imagem aqui

Alessandro Ornano
fonte
1
É companheiro de trabalho. Alguma explicação porque está funcionando?
Aditya S.
1
Esta não é uma resposta, mas está relacionada e importante: stackoverflow.com/questions/52410471/…
dlpolanco
Lamento mencionar que tentando esta abordagem, meu simulador não está abrindo e sem saída no console.
Neeraj Shukla
Este tipo de comando elimina certas mensagens de depuração, é muito útil e não tem nada a ver com o funcionamento correto do simulador e do console: provavelmente você tem outro problema que não está relacionado com este argumento.
Alessandro Ornano
Encontrei o erro como: libMobileGestalt MobileGestalt.c: 890: MGIsDeviceOneOfType não é compatível com esta plataforma. Por isso, quando tentei a abordagem acima, não funcionou. Mas quando saí do simulador e limpei meu código, ele estava funcionando bem.
Neeraj Shukla de
9

no meu caso: verifique o delegado do aplicativo para o método - didFinishLaunching. Tive privado e recebo o erro. Depois de remover "privado", tudo funciona bem

Ankmara
fonte
6
O meu não era privado.
ScottyBlades
8

Acabei de instalar o Xcode 10 Beta e tive o mesmo problema. Executei o Xcode 9.4.1 e o problema foi embora.

tjmister
fonte
10
Esta não é uma resposta viável IMO, especialmente agora que o xcode 10 está à solta e ainda tem esse problema. O problema não "desapareceu" no xcode 9.4.1 - para começar, ele nunca existiu. Uma coisa é dizer "infelizmente, este é um problema do xcode 10 e talvez tenhamos que ser pacientes." Outra é ignorá-lo completamente.
Brian Sachetta
6

Este erro ocorrerá apenas durante o teste / depuração em simuladores.

Quanto mais novo for o simulador, melhor.

Caso: Eu executo o simulador do iPhone 8 plus recebi esta mensagem no depurador.

Solução: mudei para um simulador mais recente sem mensagem de erro no depurador.

JhonnyTawk
fonte
5

Encontrei isso ao abrir algum projeto do GitHub no Xcode 10.0.

A solução pragmática foi: basta clicar em 'Continuar execução do programa' várias vezes e provavelmente desabilitar o ponto de interrupção de exceção . Aparentemente, a exceção era recuperável.

Não é uma solução real, mas foi bom o suficiente para mim naquele ponto.

de.
fonte
No meu caso, abrir um projeto antigo no Xcode 10.1, apenas clicar em 'Continuar a execução do programa' várias vezes me levou ao problema real em questão com a solução aqui stackoverflow.com/a/12398777/4221299
zeeawan
5

No meu caso, o destino de implantação do destino estava no iOS 8. Quando eu empurrei para o iOS 10.3, ele funcionou bem, tanto no simulador quanto no dispositivo.

Alterar o destino de implantação para corrigir o erro libMobileGestalt

Bharathram C
fonte
1
O meu está definido para 12,2 e a mensagem é impressa com o simulador do iPhone SE, mas não com o do iPhone XR. Então, pelo menos para mim, @anorskdev está certo.
Neph
5

Estou vendo esse problema. Usando o Xcode 10.1. Criou um novo projeto - não faz nada, exceto mostrar uma tela branca. Descobri que estava aparecendo no simulador de dispositivos mais antigos. Por exemplo, iPad Pro (12,9 polegadas) e iPad Pro (12,9 polegadas) (2ª geração) mostram o problema, mas o problema foi embora para o iPad Pro (12,9 polegadas) (3ª geração). Não aparece no simulador do iPhone XR.

Basicamente, parece irritante.

Anorskdev
fonte
Essa foi a causa para mim também. Não sei por que isso é um problema. Meu iPad é capaz de executar o iOS 12, portanto, o simulador de irmãos não deve ser considerado um dispositivo sem suporte.
Abbey Jackson
Mesma coisa aqui (a tela só tem um InputField e um botão). Xcode 10 com um projeto iOS 12: Usar o simulador do iPhone SE registra essa mensagem, mas ela não aparece com o iPhone XR.
Neph
2

Se você tiver fontes fornecidas pelo aplicativo, você precisa adicionar ao Info.plist e verificar se o arquivo tem a Associação de destino selecionada

Nuno Ferro
fonte
1

A maneira normal quando erros estranhos acontecem ajudou:

1) Projeto limpo;
2) Simulador de desligamento;
3) Reinstale os pods.

Xcode 10.

Nik Kov
fonte
Isso funcionou para mim também. Muito obrigado. Usuários do iOS na plataforma 'nativescript' podem fazer (1) limpar o projeto excluindo a pasta 'plataformas / ios', (2) desligar e redefinir o simulador por "Apagar todo o conteúdo e configurações" e (3) reconstruir o projeto executando 'tns prepare ios --release' e então 'tns build ios --bundle'. Em seguida, você pode executar o aplicativo no simulador abrindo o arquivo .xcworkspace, escolher um simulador e executar o projeto a partir dele. Funcionou perfeitamente para mim.
Mick Morely
1

Para mim, com o simulador em questão em foco, selecionei Hardware-> Apagar todo o conteúdo e configurações.

Depois que o simulador foi reiniciado, iniciar meu aplicativo funcionou novamente, como esperado.

PKCLsoft
fonte
1
Agora se chama Device->Erase All Content and Settings...
Bruno Bieri
1

Fui para XCode -> Preferências -> Componentes Marquei todos os simuladores e a caixa de seleção para instalar atualizações automaticamente e, em seguida, "verificar e instalar agora" e fui embora por algumas horas enquanto todos eles atualizavam.

Agora o problema desapareceu - então, na verdade, é como mencionado. Novo XCode com Antigo - simuladores não atualizados.

Harry McGovern
fonte
Isso não vai consumir muita memória?
Euridice01
0

Eu tive o mesmo problema, mas com MapKit, onde um MapView não apareceu, apenas a tela branca e o mesmo erro, MGIsDeviceOneOfType não é suportado nesta plataforma.

Resolvido isso corrigindo avisos de "layout ambíguo" vinculados ao objeto MapView. Agora está funcionando perfeitamente bem e os erros foram embora.

Strudel
fonte
0

O que funcionou para mim foi mudar general > Deployment Info > Main Interfacepara CDVLaunchScreen e fazer o mesmo também general > App Icons and Launch Images > Launch Screen Filepara CDVLaunchScreen.

Eu venho do Ionic, então isso pode não ser um problema para quem desenvolve em Swift / Objective-C.

RaulGM
fonte
1
Como você consertou isso? Eu também estava tendo o mesmo problema. Mas isso só acontece ao executá-lo em produção em iônico e depois disso fiquei preso no carregador de tela inicial
KnowledgeSeeker
0

Recentemente, atualizei para o Xcode 10.2e quando tentei executar um projeto criado em uma versão anterior, mesmo erro ocorreu.

O problema era que o simulador estava rodando antes de atualizar o Xcode.

A solução foi muito simples para mim sair do Simulador e reiniciá-lo para que ele possa obter as novas alterações. Não acho que o modelo do simulador (iPhone SE ou iPhone X) importe. Você só precisa reiniciar o simulador para que ele entre em vigor na nova atualização.

Eu recomendaria sair do Xcode e do simulador e reiniciar o Mac.

Gulfam Khan
fonte
0

Recebi este erro ao chamar .syncna fila principal, o que causou um deadlock ( DispatchQueue.main.sync {}). Eu queria ligar .async.

Bartosz Kunat
fonte
0

Eu recebi este erro, ao tentar ler um arquivo json que está dentro do meu projeto e ele retornou nil, por isso eu obtive este erro.

Eu obtive nil por causa de algum erro de grafia no nome da fonte, aquele arquivo json estava segurando os nomes das fontes, após copiar e colar o nome da fonte eu obtive os dados e o erro corrigido.

Tentei quase todas as soluções dadas acima, nada funcionou, então depure com paciência, você vai saber o que está causando este erro e em algum momento ruim o xcode vai tocar na nossa vida :)

R. Mohan
fonte
0

Eu estava enfrentando o mesmo problema, mas consegui eliminá-lo com os itens abaixo:

  1. Simulador de desligamento,
  2. Desligue o Xcode,
  3. Reabra o Xcode e o simulador

Eu espero que isso ajude.

Sandip Moradiya
fonte