Come opzionalmente usi le funzionalità di iPhone OS 3.0 in un’app compatibile 2.0?

Mi piacerebbe utilizzare alcune funzionalità di iPhone OS 3.0 nella mia app 2.0 quando viene eseguito su un dispositivo 3.0. Non voglio andare in tutto 3.0 perché ci sono clienti che non vogliono ancora aggiornarsi.

Ho sperimentato un po ‘con il debole collegamento del MapKit.framework (-weak_framework MapKit). L’ho trovato piuttosto complicato, dal momento che dovevo ingannare il compilatore / linker per usare l’SDK 2.0 con tutto il codice tranne quello che usa MapKit.

Qualcuno ha più esperienza con questo? Che cosa stai facendo per renderlo compilato / link. Qualcuno ha già inviato un’app ad Apple, quali quadri di collegamenti deboli da altre versioni del sistema operativo?

Apple ha un esempio di come farlo, in particolare facendo un’app compatibile 2.x che utilizza MFMailComposeViewController ….

http://developer.apple.com/iphone/library/samplecode/MailComposer/index.html

la risposta prevede la compilazione con l’SDK 3.0, impostando l’objective di distribuzione su 2.x, assicurandosi che i framework 3.0 siano contrassegnati come riferimenti “deboli” e quindi facendo la cosa giusta per far funzionare il codice se si è su un dispositivo dove i nuovi quadri non sono presenti.

Puoi sempre collegarti a framework che non fanno parte dell’SDK corrente usando la funzione dlopen. Ovviamente, questo non è raccomandato per framework che non sono pubblici (non consigliato == vietato sull’app store, in questo caso). Tuttavia, poiché i nuovi framework nelle versioni inedite del sistema operativo diventano pubblici, è un’opzione. Basta controllare il numero di versione e aprire i framework come disponibili. Utile per le singole funzionalità, non tanto se stai facendo un uso pesante di nuove cose.

Probabilmente questa non è la risposta che stai cercando, ma il metodo che uso è avere solo due app separate. Invece di aggiornare le mie app esistenti con aggiornamenti 3.0, ho appena rilasciato questa come una nuova app. I vecchi utenti possono utilizzare l’app 2.0 per tutto il tempo che desiderano e le persone che desiderano le funzionalità 3.0 possono eseguire l’aggiornamento.

Ottimo howto sul collegamento debole (sia per le librerie che per i framework) qui:

http://developer.apple.com/mac/library/documentation/MacOSX/Conceptual/BPFrameworks/Concepts/WeakLinking.html#//apple_ref/doc/uid/20002378-107262

Anche se è un po ‘obsoleto … con l’ultimo x-code il processo per il debole collegamento di un intero framework è in realtà più semplice:

  1. Fare clic con il tasto destro del mouse sulla destinazione e selezionare Ottieni informazioni
  2. Vai alla scheda “Generale”
  3. Nella sezione delle librerie collegate verso il basso cambia il Tipo da obbligatorio a debole per tutte le librerie che vorresti link debole.
  4. Profitto

Non penso che tu possa 3.0 e 2.x utilizzano SDK completamente diversi e collegano un insieme completamente diverso di file e librerie. Non sono sicuro, ma non penso che tu possa collegarti all’SDK 3.0 e comunque essere compatibile 2.X.

(per favore aggiungi un commento se sbaglio).