Sto tentando di aggiornare un'app (Clarke) per fornire la compatibilità 10.6.Creazione di un'app OS X compatibile con le versioni precedenti, quando è presente una nuova API?
Il mio piano prevede l'utilizzo di due percorsi di codice diversi a seconda della versione di OSX in uso.
Il 10.5 utilizzerà un controller, che consiste in un codice completamente personalizzato che non dipende da alcuna API Cocoa specifica. Il 10.6 utilizzerà un altro controller, che avvolge la nuova API CoreLocation in un'interfaccia identica, basata sulla stessa classe astratta. In fase di esecuzione, l'app passa da un controller all'altro rilevando la versione del sistema operativo.
Questo funziona bene su 10.6 costruito per il 10,6 SDK, ma la stessa corporatura soffia su 10.5 con:
10/09/2009 18:30:50 [0x0-0x12f12f].uk.co.tomtaylor.Clarke[4575] dyld: unknown required load command 0x80000022
10/09/2009 18:30:51 com.apple.launchd[403] ([0x0-0x12f12f].uk.co.tomtaylor.Clarke[4575]) Exited abnormally: Trace/BPT trap
Se io costruisco il 10,5 SDK non può compilare il programma CoreLocation, ovviamente.
Spero di essere in grado di fornire un singolo binario per questa applicazione. C'è un modo per "nascondere" l'API CoreLocation da 10.5?
Questo è il metodo corretto ma c'è dell'altro: Quando è necessario chiamare le API che sono in 10.6 ma non 10.5 è necessario ottenere il nome della classe utilizzando NSClassFromString(). Quindi verifica se il nome della classe restituito è valido o meno. Se è valido, puoi andare avanti e chiamare le API di cui hai bisogno. In caso contrario, dovrai eseguire il failover con grazia. – Jasarien