É possível direcionar versões mais antigas do iOS ao usar o Xcode 4.2 e iOS 5 SDK?

103

Recentemente, baixei o pacote Xcode 4.2 com iOS 5 SDK e imediatamente percebi que não consigo usar meu iPhone 3Gs com iOS 4.2.1 para depuração. Só consigo depurar e testar no meu iphone 4 com o iOS 5 instalado.

Para qualquer um dos meus dispositivos executando qualquer iOS inferior a 5.0, o Xcode apenas diz "Concluída a execução para iPhone3GS" e não o executa. Eu tenho minha meta de implantação definida para 3.0 porque não estou usando nenhum recurso em meu aplicativo acima de 3.0 e quero ser capaz de direcionar todas as versões 3.0 ou superior. Tenho todos os meus perfis de provisionamento instalados e atualizados.

Saí e reiniciei o xcode, limpei a compilação várias vezes. Eu tentei adicionar armv6 nas configurações de construção de arquitetura, mas nada me permitirá construir e executar meu aplicativo no meu telefone antigo com ios 4.2.1.

Minha pergunta é: ainda é possível fazer aplicativos com o novo SDK funcionarem para versões do iOS anteriores a 5? Como posso ter certeza de que meu aplicativo ainda será executado em versões anteriores do iOS se eu não conseguir instalá-los em meu telefone antigo?

Editar: OK, parece que o iOS SDK 5 abandonou o suporte para armv6 por padrão. O que você precisa fazer é adicionar armv6 no campo Arquiteturas em Configurações de compilação para seu destino e seu projeto. Assim, seu aplicativo poderá ser executado em dispositivos iPhone 3G. A resposta pode ser encontrada aqui Como construir para arquiteturas armv6 e armv7 com iOS 5

Greg Ellis
fonte
Observe que sua edição tem a ver com arquiteturas, que é um problema separado das iOSversões. Além disso, adicione a edição como uma resposta para que possa aceitar a solução que encontrou e esta questão possa ser marcada como respondida.

Respostas:

153

Eu estava tendo o mesmo problema ao tentar obter um projeto Xcode 4.2 recém-criado em execução em um iPhone 3G 4.2.1. Aqui está como consegui fazê-lo funcionar.

1) Altere as "Configurações de compilação" do destino ==> "Arquitetura" de "Padrão (armv7)" para "outro". Adicione armv6 e armv7.

2) Altere as "Configurações de compilação" do destino ==> "Arquitetura válida" para armv6 e armv7.

3) Altere as "Configurações de compilação" do destino ==> "Destino de implantação iOS" para iOS 4.2.

insira a descrição da imagem aqui

4) Abra os projetos * -Info.plist, remova a configuração "Capacidades necessárias do dispositivo" (observe que é necessário armv7) insira a descrição da imagem aqui

btw eu descobri isso quando tentei adicionar manualmente o aplicativo por meio do organizador e ele relatou:

Não consigo instalar o aplicativo

O Info.plist para o aplicativo em /Users/.../TestsDebug.app especifica os requisitos de capacidade do dispositivo, que não são atendidos pelo Dev iPhone 3G

Tudo deve funcionar depois disso. Fale sobre um PITA.

mmorris
fonte
Muito obrigado! Eu te devo cerveja! Isso realmente resolveu meus problemas, PITA de fato: D
Greg Ellis
4
Obrigado! Eu li sobre as configurações de arquitetura em outro lugar, mas ninguém parece mencionar as configurações de "Recursos necessários do dispositivo" também.
bunnyhero de
Devo acrescentar: os projetos novos e antigos são afetados pela atualização! Testei meu material antigo antes de pesquisar no Google e também não funcionou! Eu também te devo uma cerveja! :)
Eduardo Costa
1
Tenho o mesmo problema, mas mesmo que as configurações do projeto fossem 'Armv7 padrão' para arquiteturas, as arquiteturas válidas já indicavam 'armv6 armv7'. Além disso, eu não tinha nenhuma propriedade 'Recursos do dispositivo necessários' no Info.plist. Vou tentar o truque, no entanto, espero que funcione!
rchampourlier
os "
Recursos
12

Vá para Xcode> Preferências> Downloads e instale o suporte de depuração para versões mais antigas do iOS.

Aleksejs Mjaliks
fonte
Eu fui para preferências e baixei e instalei o suporte de depuração para sistemas operacionais mais antigos, fechei o xcode, reabri o xcode fez uma limpeza e compilação, mas o aplicativo ainda não instala no meu dispositivo mais antigo. Estou totalmente perdido agora, pois quando vi sua resposta pensei com certeza que resolveria meu problema :(
Greg Ellis
1
Eu também te devo uma cerveja! Isso resolveu OUTRO problema que tive após a atualização do Xcode 4! Agora posso depurar meu dispositivo iOS 4.2 (iPod Touch 2ª geração)!
Eduardo Costa
3

mmorris me aproximou de resolver o problema ... No Info.plist, eu tive que definir os recursos necessários do dispositivo para armv6, não armv7 Espero que isso ajude outras pessoas também.

flizit
fonte
1

Você precisa conectar o telefone e depois ir ao organizador. O Xcode deve solicitar automaticamente a versão mais antiga.

Veja a página do desenvolvedor para mais informações. Foi descrito nas notas do 4.2 beta

Foo Bah
fonte
Fiz isso e cliquei em "Usar este dispositivo para desenvolvimento" e parecia que fazia o que deveria, mas ainda não consigo fazer um aplicativo rodar no meu antigo dispositivo a partir do xcode.
Greg Ellis
1

Eu encontrei um problema semelhante ao tentar executar meu aplicativo em um iPod Touch antigo. Eu atualizei para o Xcode 4.3.3 e o aplicativo não funcionava mais no depurador para mim em um hardware mais antigo.

Acredito que os outros comentários aqui sobre "Arquiteturas" e "Recursos necessários do dispositivo" são detalhes importantes para especificar corretamente. Infelizmente, eles não foram suficientes para resolver meu problema.

No meu caso, descobri que o esquema de compilação era o culpado. O Xcode 4.3.3 solicitou que eu mudasse do depurador GDB para o LLDB ao atualizar meu projeto. Quando alterei a ação Executar do meu esquema de volta para GDB , consegui executar o aplicativo novamente no meu hardware antigo do Xcode.

otto
fonte
1

Descobri que tinha que adicionar armv6 às arquiteturas, mas ainda não funcionou. E agora eu removi armv7 das capacidades necessárias, e foi isso! Funcionou!

Greg
fonte
0

Isso funcionou para mim e deve funcionar para você se você tinha uma versão anterior do Xcode. Do contrário, você deve seguir o conselho dado por outras pessoas para obter o SDK de uma versão mais antiga do SDK:

sudo cp -a /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk

Este comando é apenas um pouco diferente daquele mostrado por outros, mas esses comandos soltaram os arquivos na própria pasta SDKs para mim - queremos que um subdiretório dele seja criado com o nome apropriado.

Tom Boutell
fonte
0

No meu caso, havia uma linha redundante nos recursos necessários do dispositivo insira a descrição da imagem aqui

Acabei de removê-lo ...

insira a descrição da imagem aqui

Espero que ajude outra pessoa.

Arkady
fonte