Pergunta

Eu estou procurando uma maneira de diferenciar em tempo de execução entre dispositivos equipados com o novo processador ARM (como o iPhone 3GS e alguns iPods 3G) e dispositivos equipados com os antigos processadores ARM. Eu sei que eu posso usar uname () para determinar o modelo do dispositivo, mas como apenas alguns dos iPod toca 3G recebeu um impulso em seu processador ARM, isso não é suficiente.

Portanto, eu estou procurando um destes:

  1. Uma maneira de detectar modelo de processador - Suponho que não há nenhum
  2. .
  3. Uma maneira de determinar se as instruções de néon ARM são suportados -. A partir deste eu poderia derivar uma resposta
  4. Uma maneira de determinar a dispositivos de tamanho total de armazenamento -. Combinando isso com o modelo de dispositivo já conhecido poderia hackishly me levar à resposta

Agradecemos antecipadamente:)

Foi útil?

Solução

Uma solução que eu posso pensar, é detectar se OpenGL ES 2.0 está disponível, já que os processadores mais recentes permitem isso.

Há um artigo em mobileorchard sobre como fazê-lo.

Outras dicas

Não é exatamente o que você está pedindo, mas uma solução fácil é construir sua gordura aplicativo, de modo que ele contém código executável para ambos ARMv6 e ARMv7. Se você fizer isso, o código apropriado será executado no processador automaticamente, e você não precisa fazer qualquer verificação de tempo de execução. Efetivamente, você está deixando o carregador de fazer a detecção de tempo de execução para você.

Para fazer isso, altere a configuração em seu projeto XCode de "Padrão (ARMv6)" para "Optimized (ARMv6 ARMv7)"

Arquiteturas

Então, em sua implementação, você fazer isso:

#if defined __ARM_NEON__
    // Code that uses NEON goes here
#else  // defined __ARM_NEON__
    // Fallback code without NEON goes here
#endif // defined __ARM_NEON__

Há uma macro similar que você pode usar para verificar se (não NEON) ARMv7 apresenta, que eu não me lembro fora do topo da minha cabeça.

Se você realmente quer fazer runtime de despacho, dê uma olhada no sysctlbyname função em libc. Especificamente, eu acho que olhando para cima o parâmetro HW_MACHINE_ARCH pode revelar-se útil.

EDIT: Eu ter retirado esta resposta, uma vez que deixou um buraco olhando eu percebi mais tarde: o que fazer quando temos um subtipo desconhecido em algum hardware futuro? Este não era à prova de futuro. Além disso, a incerteza da situação documentada dessa API não ajuda, dada a tolerância da Apple de zero sobre o uso de APIs não documentadas.

Você deve usar a resposta de Stephen Canon e construir sua gordura aplicação. , Detecção de tempo de execução de confiança à prova de futuro não é viável neste momento (para meu espanto, garanto-vos).

Eu sei que isso é ruim, mas o melhor que vem à minha mente é detectar se a gravação de vídeo suportados pelo dispositivo. dispositivos iPhone e iPod baseado atualmente apenas o ARM7 apoiá-lo, daí a sua forma legal, eu acho.

Para fazer isso, use availableMediaTypesForSourceType de UIImagePickerController em conjunto com isSourceTypeAvailable em kUTTypeMovie.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top