Obiettivo di base contro attivo rispetto a quello di implementazione

So che alcune parti di questa domanda sono state poste in diverse varianti, ma voglio assicurarmi di aver capito bene.

Ecco le mie supposizioni e intese che voglio sapere se sono corrette prima dell’invio.

La mia applicazione presuppone funzionalità supportate da tutti i sistemi operativi, quindi dovrei:

  1. Impostare l’SDK attivo per essere l’ultimo (attualmente SDK 3.0).
  2. Impostare il target di distribuzione su quello che voglio essere più basso – iPhone 2.0 e versioni successive?
  3. A cosa serve esattamente l’SDK di base? dovrei ignorarlo se scelgo Active SDK per essere diverso e dove vedo l’SDK attivo nelle impostazioni di Progetti?

Un’ultima domanda: Apple consente di scegliere iPhone OS 2.0 come objective di distribuzione?

Grazie in anticipo,

BTW – uno dei motivi principali di questa domanda è che quando compilo con gli SDK precedenti, Apple sembra avere un problema nel rilasciare la memoria per l’array di animazione UIImageView quando questa animazione è stata salvata per un utilizzo di più ore. Questo è un problema noto che è stato risolto con SDK 3.0 (semplicemente impostando l’array di animazioni UIImageView su zero)

La differenza tra l’SDK di base e Active è che il primo è l’SDK predefinito impostato per il progetto e il secondo è l’SDK in corso di creazione. Quindi è ansible che il tuo SDK attivo sia l’SDK di base, a quel punto XCode utilizzerà l’SDK specificato per il progetto.

Per build la tua app per il più ampio set di dispositivi ansible, hai ragione:

  • Impostare Base SDK sull’SDK più recente ansible (3.0, 3.0.1)
  • Imposta la Target di distribuzione sul primo SDK ansible (2.0)

Apple ti consente di specificare iPhone 2.0 come objective di distribuzione, ma tieni presente qualsiasi API o framework rilasciato dopo l’iPhone 2.0 che non avrai a disposizione per l’utilizzo predefinito. Esistono tecniche per utilizzare le funzionalità degli SDK successivi , tuttavia non sono banali.

È necessario impostare l’impostazione di build dell’SDK di base sull’ultimo SDK contenente tutte le funzionalità che si intende utilizzare (di solito, l’ultimo SDK disponibile) e impostare l’impostazione di build “Destinazione di distribuzione iPhone” sulla prima versione del sistema operativo su che vuoi correre.

È quindi necessario assicurarsi di verificare, in fase di runtime, eventuali funzioni che potrebbero non essere presenti sui sistemi operativi precedenti.

“Base SDK” è l’SDK massimo supportato dall’applicazione. C’è un limite difficile qui: non è ansible selezionare un futuro SDK non rilasciato.

“Obiettivo di distribuzione” è l’SDK minimo che sei disposto a supportare. È indietro nel tempo che sei disposto ad andare.

Xcode sembra creare una dipendenza spuria su “Obiettivo di distribuzione”. Ad esempio, non riesco a svilupparlo sul mio iPod iOS 5.1.1 con Xcode 4.5.2 (Xcode 4.5.2 è accoppiato con iOS 6.0), anche se le API 4.3, 5.0 e 5.1 e i simulatori sono installati su questa installazione. Devo usare il simulatore o il jack nel mio iPhone iOS 6.0.

Anche i giochi che Apple sta giocando sembra causare problemi con le app. La mia copia acquistata di Elements non verrà sincronizzata tramite iTunes sull’iPod perché Elements richiede una versione più recente di iOS da eseguire (si sincronizza e funziona correttamente sul mio iPhone iOS 6.0).

Ho due iPad e uno è il 4.3. Rabbrividisco a pensare a quale pasticcio causerà.

In generale;

Imposta l’SDK BASE sull’ultimo SDK che desideri supportare e testare.

Imposta il target di distribuzione sulla versione più bassa di iOS che desideri supportare e testare.

Se ti capita di utilizzare le funzionalità di Base SDK non disponibili nell’SDK di destinazione di distribuzione, l’applicazione si arresta in fase di runtime sui dispositivi meno recenti, quindi il test è di vitale importanza.

Un processo alternativo / complementare consisterebbe nell’utilizzare Deploymate http://www.deploymateapp.com/ che esegue un’analisi statica del codice per identificare i problemi.

Se vieni dal mondo android le analogie sono tali;

TargetSDK -> Base SDK

MinSDK -> Obiettivo di distribuzione

Lint -> Deploymate