Respostas:
Acabei de construir algo hoje especificando um destino de implantação do iOS 4.0. Com apenas armv7 especificado em Architectures, o Xcode me avisou que para oferecer suporte a qualquer coisa abaixo de iOS4.2 eu precisava incluir armv6 em Architectures. Apenas edite esse campo, clique no botão "+" quando a caixa de diálogo for exibida e digite o "armv6" literal.
No meu caso, queremos que nosso aplicativo funcione em iOS4 e iOS5. Tivemos que fazer algumas modificações para que funcionasse corretamente no iOS5, mas todas essas alterações foram feitas com alterações de código compatíveis com iOS4.
Também adicionamos alguns recursos específicos do iOS5 de uma maneira que permite que o aplicativo seja executado sem travar no iOS4. Especificamente, testamos os recursos do iOS5 antes de tentar usá-los e vinculamos as bibliotecas apenas do iOS5 como opcionais.
Portanto, o suporte ao iPhone3G em um mundo iOS5 poderia facilmente significar "queremos que nosso aplicativo seja executado no iOS4 e superior (independentemente do uso de qualquer recurso do iOS5)" em vez de "queremos ter certeza de que nosso aplicativo é executado em um dispositivo mais antigo executando iOS5 " Há uma diferença aqui; pense nisso. :-)
De qualquer forma, adicionar suporte para armv6 é muito fácil. E eu acho que o ponto é este: em algum ponto, quando não houver mais dispositivos armv6 com os quais se preocupar (por qualquer motivo), você não terá que construir para ele. A opinião da Apple é que todos devem atualizar para o hardware mais recente o mais rápido possível. Portanto, naquele mundo, não há necessidade de as ferramentas serem padronizadas para nada além das melhores e mais recentes. :-) Felizmente (ou não), nós, desenvolvedores, vivemos no mundo real e reconhecemos que você precisa suportar coisas mais antigas por um tempo. E eu acho que a equipe de desenvolvimento do Xcode também sabe disso, é por isso que você pode adicionar o suporte armv6 de volta de forma bastante simples.
A resposta simples é que você deve alterar as configurações atuais de "Standard (armv7) - $ (ARCHS_STANDARD_32_BIT)" para ser apenas "armv6" e "armv7". Veja a imagem abaixo. Você deve excluir a linha com as configurações anteriores para que funcione.
também certifique-se de definir isso em Projeto E metas ... me custou uma hora para descobrir isso. tinha definido para um, mas não para o outro. espero que isto ajude. GLTA
Acho que há uma razão pela qual a Apple retirou o armv6 da configuração padrão.
Compilei armv7 / armv6 com iOS5 SDK, no entanto, o compilador armv6 produziu código errado no modo de lançamento. Depois de horas tentando encontrar uma solução alternativa (tentando llvm ou gcc com diferentes níveis de otimização), desisto.
Portanto, voltarei ao iOS SDK 4.x, desde que ofereça suporte a dispositivos armv6 mais antigos.
Exemplo de código:
// myView center=(160, 100)
CGPoint p=myView.center;
// now p=(100,100) (what the heck?)
p.x=myView.center.x;
p.y=myView.center.y;
// now p=(160,100)
p.y+=100;
// now p =(200,200) (what the heck?)
Talvez eu tenha alguma corrupção de memória, no entanto, no compilador armv7 e no iOSSDK <5.0 ele se comporta conforme o esperado.
Cumprimentos
Não tenho certeza se isso é realmente uma solução ainda, mas descobri que substituir a string definida em "arquiteturas", que era $ (ARCHS_STANDARD_32_BIT), por "armv6 armv7" me permitiu compilar com iOS5 como base e iOS4 como implantação alvo e passar na validação.
Não estou usando nenhuma biblioteca ou chamada exclusiva do IOS5, mas pretendo usar no meu próximo lançamento.