2013-06-15 3 views
7

Mavericks sta uscendo e per gli sviluppatori è sempre un periodo impegnativo con tutte queste nuove funzionalità e API da conoscere e utilizzare. Per me, penso che sia il momento perfetto per fare una domanda che mi ha infastidito per molto tempo.Sviluppo dell'app per 10.8+ ma utilizzando 10.9 SDK

Ecco la cosa, nel contesto: sto sviluppando un'applicazione che voglio essere in grado di eseguire su 10.8 (quindi il sistema di destinazione è 10.8+). In questo momento sto usando l'SDK 10.8. Tuttavia, con il rilascio di 10.9 arrivano alcune API piuttosto dolci che vorrei usare nella mia app. Li uso nel mio codice, ma poi, ovviamente, devo compilare la mia app contro l'SDK 10.9. Se lo faccio, posso ancora eseguire l'app su 10.8?

Oppure, in un modo più generale, se compilo la mia app contro un SDK, posso ancora eseguirlo su un Mac OS 'inferiore'? Se sì, puoi spiegare come funziona sotto il cofano (cosa sta facendo il compilatore)? Questo è un mistero per me.

risposta

5

In generale, Xcode disassocia il problema dell'SDK e del Target di distribuzione dell'app.

L'SDK è determinata dalla Base SDK, e la destinazione di distribuzione è determinata da OS X Deployment target. Questi entrambi vengono visualizzati nella scheda Impostazioni di creazione per ciascun target in Xcode.

Quando si programma con SDK e destinazione diversi, si è responsabili di assicurarsi di non chiamare metodi o funzioni su un sistema operativo che non li possiede. Ciò è spesso facilitato da un debole collegamento (nel caso di nuovi quadri) e/o dall'uso di -respondsToSelector: nel caso di nuovi metodi su classi e framework esistenti.

+0

Ma penso che ci siano metodi introdotti, per esempio, in 10.8 che sono disponibili anche su 10.7. Come posso sapere prima di compilare se i metodi sono disponibili su ciascuna versione del sistema operativo? – Alex

+0

Rimane un esercizio per lo sviluppatore. Ci sono alcuni strumenti su cui le persone sono state costrette a controllare le versioni di SDK, anche se ho difficoltà a trovare un esempio in questo momento. Puoi sempre provare a ricompilare il codice con gli altri SDK e non fare degli errori che genera, quindi ripristinare l'SDK e aggirarli. – gaige

+1

Se la destinazione di distribuzione è impostata su una versione precedente, i quadri che non erano disponibili saranno automaticamente collegati in modo debole. Ciò significa che se l'app viene eseguita su una versione precedente, allora le funzioni deboli non collegate avranno i puntatori alle funzioni NULL, i nomi delle classi deboli non disponibili saranno sostituiti da NSClassFromString e i metodi deboli non disponibili restituiranno NO dagli oggetti contenenti 'respondsToSelector: metodo . – geowar

1

In Xcode, sotto le impostazioni di compilazione, esiste un'opzione per il SO di destinazione in cui è possibile selezionare 10.8. 10.8 applicazioni sono generalmente compatibili con 10.9, quindi l'applicazione compilata funzionerà con entrambi i sistemi operativi.

1

Non aspettatevi che il nuovo Apis funzioni quando è in esecuzione su una versione inferiore. Non funziona in questo modo.