Domanda

Sto cercando un modo per differenziare in fase di esecuzione tra i dispositivi dotati del nuovo processore ARM (come iPhone 3GS e alcuni iPod 3G) e i dispositivi dotati dei vecchi processori ARM. So che posso usare uname () per determinare il modello del dispositivo, ma dato che solo alcuni degli iPod touch 3G hanno ricevuto una spinta nel loro processore ARM, questo non è abbastanza.

Pertanto, sto cercando uno di questi:

  1. Un modo per rilevare il modello di processore - suppongo che non ce ne sia nessuno.
  2. Un modo per determinare se le istruzioni al neon ARM sono supportate - da ciò ho potuto ricavare una risposta.
  3. Un modo per determinare la dimensione totale dello spazio di archiviazione dei dispositivi: combinare questo con il modello di dispositivo già noto potrebbe portarmi alla risposta in modo incisivo.
  4. lt &; INSERISCI IDEA CASUALE & Gt;

Grazie in anticipo :)

È stato utile?

Soluzione

Una soluzione alternativa che mi viene in mente è rilevare se OpenGL ES 2.0 è disponibile, poiché i processori più recenti lo consentono.

C'è un su mobileorchard su come farlo.

Altri suggerimenti

Non esattamente quello che stai chiedendo, ma una soluzione semplice è quella di aumentare il grasso della tua applicazione, in modo che contenga codice eseguibile sia per ARMv6 che per ARMv7. In questo caso, il codice appropriato verrà eseguito automaticamente sul processore e non è necessario eseguire alcun controllo di runtime. In effetti, stai lasciando che il caricatore esegua il rilevamento di runtime per te.

Per fare ciò, cambia l'impostazione Architetture nel tuo progetto XCode da " Standard (armv6) " a " Ottimizzato (armv6 armv7) "

Quindi, nella tua implementazione, fai questo:

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

Esiste una macro simile che puoi usare per controllare le funzionalità (non NEON) ARMv7, che non ricordo dalla parte superiore della mia testa.

Se vuoi davvero fare l'invio di runtime, dai un'occhiata a sysctlbyname in libc. In particolare, penso che cercare il parametro HW_MACHINE_ARCH possa esserti utile.

EDIT: ho ritirato questa risposta, poiché ha lasciato fuori un buco evidente che ho realizzato in seguito: cosa fare quando otteniamo un sottotipo sconosciuto su un hardware futuro? QUESTO NON È STATO PROVA FUTURO. Inoltre, l'incertezza sullo stato documentato di tale API non aiuta, data la tolleranza zero di Apple sull'uso di API non documentate.

Dovresti usare la risposta di Stephen Canon e aumentare il grasso della tua applicazione. Al momento non è possibile eseguire un runtime affidabile, a prova di futuro (con mio sgomento, te lo assicuro).

So che è scadente, ma il meglio che mi viene in mente è rilevare se il dispositivo supporta la registrazione video. Attualmente solo i dispositivi iPhone e iPod basati su ARM7 lo supportano, quindi è un modo legittimo, immagino.

Per fare ciò, usa UIImagePickerController's availableMediaTypesForSourceType insieme a isSourceTypeAvailable su kUTTypeMovie.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top