Simulatore iPhone contro iPhone

Ho sentito che le app non funzionano correttamente sul simulatore ma funzionano correttamente sull’attuale dispositivo iPhone. Qualcuno ha provato un’app che funziona perfettamente nel simulatore ma non sul dispositivo iPhone vero?

I nomi dei file fanno distinzione tra maiuscole e minuscole su iPhone, ma non nel simulatore.

Quindi, ad esempio, se provi a caricare un’immagine con UIImage *iconImage = [UIImage imageNamed:"MyIcon.png"] , ma la tua risorsa è in realtà chiamata “myicon.png”, quindi funzionerà sul simulatore, ma non sul dispositivo.

Se la tua app è grafica intensa, come ad esempio un gioco, le prestazioni del simulatore NON assomigliano affatto a quelle dell’hardware. La tua applicazione sarà probabilmente fluida e funzionerà benissimo sul simulatore, ma su hardware sarà probabilmente sottoposto a scansione a meno che tu non sappia cosa stai facendo. Puoi facilmente passare da 60 fps a 3 fps tra simulatore e hardware.

Le funzioni di trigonometria possono restituire risultati diversi:

 float a = cosf( 0.108271248639 ); printf("%.12f", a); //simulator: 0.994144439697 //device: 0.994144380093 

L’ordine in cui vengono valutati i parametri funzione / costruttore è diverso:

 int i = 0; int f() { return ++i; } int a, b; int test(int p1, int p2) { a = p1; b = p2; } test( f(), f() ); //simulator: a = 2, b = 1 //device: a = 1, b = 2 

So che ci sono alcune differenze nell’implementazione di OpenGL ES tra il dispositivo e il simulatore. Da quello che ho capito, questo è principalmente a causa del chip grafico su iPhone (PowerVR MBX) che ha capacità molto diverse rispetto ad altre macchine mac. Molti dei limiti hardware non sono applicati nel simulatore, quindi è del tutto ansible ottenere qualcosa in esecuzione nel simulatore che si bloccherà completamente sul dispositivo.

Esistono anche alcune estensioni OpenGL ES supportate dall’hardware dell’iPhone che non sono supportate nel simulatore. Credo che il principale sia la compressione della trama di PowerVR (PVRTC).

Un’altra area problematica può essere l’impronta della memoria. Aneddoticamente, non ho visto il simulatore applicare automaticamente i limiti di memoria del dispositivo. Pertanto, è ansible avere qualcosa che gira nel simulatore, consumando volentieri abbondanti quantità di RAM e senza mai preoccuparsi di liberarne uno solo per essere rapidamente terminato dopo una breve continuazione di tale comportamento durante l’esecuzione su un dispositivo.

Le punte delle dita sono più grandi dell’estremo 1 pixel del cursore del mouse. Per eseguire test di usabilità corretti, anche minimi, è necessario distribuire l’app su un dispositivo.

Ci sono alcuni bit di codice che non funzionano sul simulatore (usando il portachiavi di iPhone, per esempio), ma per quasi tutte le applicazioni, il simulatore funzionerà esattamente come l’iPhone.

Detto questo, non c’è assolutamente alcun rimpiazzo per il test su un dispositivo reale.

Ho avuto un problema con un timer di 1/30 sec relativamente semplice per fare aggiornamenti per un gioco. Funziona perfettamente nel simulatore e congela l’input sul dispositivo.

Si noti inoltre che si procederà alla compilazione dei framework OS X (ove applicabile) durante la creazione del simulatore in modo da poter utilizzare metodi e classi non disponibili nelle versioni iPhone dei framework.

Un esempio che mi viene in mente è NSPredicate. Sono stato in grado di compilare ed eseguire un’app utilizzando NSPredicate nel simulatore, ma non sarebbe stata compilata per il dispositivo poiché quella class non è disponibile.

Se abiliti GCC_ENABLE_FLOATING_POINT_LIBRARY_CALLS, la tua app si arresterà in modo irreversibile nel simulatore ma funzionerà su iPhone.

Le chiamate grafiche al quarzo nel simulatore dell’iPhone sono più veloci delle chiamate Java2D sullo stesso computer – malvagiamente veloce.

Ho riscontrato problemi in applicazioni affamate di memoria in cui il simulatore funzionava perfettamente (perché presupponeva che la memoria dell’iPhone / iPod Touch fosse tutto tuo), mentre il dispositivo si arrestava in modo anomalo (perché altre app avevano perso e lo sfondo di Apple i servizi avevano consumato un po ‘di memoria) e non avevo implementato una gestione della memoria adeguata o una risposta al selettore didReceiveMemoryWarning .

Una cosa importante che mi ha richiesto un po ‘di tempo è che il simulatore non supporta i token dispositivo, quindi qualsiasi codice che coinvolge quelli non verrà eseguito sul simulatore.

Ho avuto un bug in cui l’app funzionava correttamente sul simulatore, ma si sarebbe bloccata quando l’ho eseguita su un dispositivo perché c’era un errore nel codice del token del dispositivo. Non riuscivo a capirlo per molto tempo!

Ci sono molti esempi banali. Ad esempio, è ansible allocare molta più memoria sul simulatore rispetto a un telefono reale. Non è ansible ricevere notifiche push sul simulatore se non si dispone di un Mac retina, l’altezza del punto di visualizzazione è diversa.

Ad un livello più fondamentale, il simulatore è proprio questo, simula l’iPhone OS X utilizzando Mac OS X. Ciò è evidenziato dal fatto che il filesystem sul simulatore potrebbe non essere case sensitive ma sul telefono lo sarà. In modo più sottile, non emula l’hardware, quindi cose come la posizione non funzioneranno allo stesso modo e il 3D sarà molto diverso, specialmente se utilizzi Metal.

Dovresti sempre provare su hardware reale.

Senza considerare le differenze di prestazioni tra i due, c’erano alcune cose che il simulatore non funzionava correttamente – cioè in alcuni casi avrebbe rovinato l’audio (vedi questa domanda ). Comunque dal 2.2 SDK questo problema è stato risolto e il suono sembra andare bene nel simulatore. Questo non vuol dire che ci siano altre incompatibilità in agguato laggiù! (Solo nessuno in cui mi sono imbattuto)

Per quanto riguarda i suoni, stavo avendo lo stesso problema. Il problema era che le codifiche audio che il simulatore supporta è un insieme diverso di suoni rispetto al dispositivo. Spero che aiuti.

Ho avuto molti problemi con librerie e framework quando si passa dal simulatore al dispositivo. Non meno importante, sembrano avere diverse architetture!

Ho visto che il posizionamento degli oggetti, come le barre degli strumenti, è diverso sul simulatore che sul telefono. Molto noioso.

Si….

Le app compilate per 2.x funzioneranno correttamente sul dispositivo 3.0, ma si bloccherà su 3.0Simulator

Nota: 1. Se si compila per 3.0, l’app funzionerà correttamente anche sul simulatore 3.0 … 2. a) Compilare per 2.xe lanciare l’app nel simulatore. b) Ora cambia l’Hardware del simulatore iPhone in “3.0”. c) Quindi avviare l’app che abbiamo installato in precedenza nel passaggio a). CRASH !!!!!!!!

filmato (tipo m4v) poiché la mia esperienza è la prima volta che si gioca correttamente

ma alla seconda volta sfarfalla lo schermo del simulatore …

mentre nel dispositivo iPhone funziona …

Ho avuto alcuni effetti sonori che hanno funzionato bene nel simulatore, ma non sul dispositivo. Ho dovuto cambiare il formato in qualcosa che il dispositivo avrebbe gestito.

Se la barra di stato dell’applicazione è nascosta, nel caso del simulatore continua a consumare un evento touch. Ma nel dispositivo si comporta perfettamente.

Sì, è successo a me l’altro giorno. Sono nuovo per l’iphone, e quindi ho cancellato MainWindow.xib pensando che fosse inutilizzato. L’app ha funzionato perfettamente sul simulatore, ma si è bloccata durante l’installazione sul telefono.

Un altro problema che abbiamo riscontrato sono le nostre tre20 dipendenze, impostate su iOS 3.2 anziché su 4.1. Ha funzionato perfettamente nel simulatore, ma ha bombardato il dispositivo (dal momento che i file sono stati compilati per l’arco sbagliato).

la videoteca di iphone non è accessibile in simulatore ma il codice funziona correttamente sul dispositivo reale

Il caricamento delle risorse nel simulatore è MOLTO più veloce rispetto al dispositivo. Ad esempio, il caricamento e la visualizzazione di una sequenza di UIImages schermo UIImages (come un video rudimentale) possono sembrare molto fluidi nel simulatore e disturbare su un dispositivo.

In realtà, ricorda che esiste un’enorme differenza di velocità tra diversi dispositivi. L’iPhone originale e l’iPhone 3G sono più lenti di iPod touch 2nd Gen, che è anche molto più lento di iPhone 3GS e così via.

Quando provi ad accedere a UIDevice.currentDevice (), restituisce iOS Simulator invece del dispositivo che stai testando. Questo fa schifo, dal momento che non puoi fare certe cose sul simulatore.