2013-03-11 4 views
101

Ho un'app per iOS esistente e voglio aggiungere una grande porzione di codice che ho sviluppato come un altro progetto solo per facilità di test. Il nuovo blocco riguarda fondamentalmente il salvataggio di un'immagine su vari servizi di condivisione, ecc. Poiché questo codice di condivisione richiede molti test e aggiornamenti futuri, mi chiedevo quale fosse il modo migliore per incorporare quel frammento di codice nella mia app esistente.Biblioteca? Statico? Dinamico? O quadro? Progetto all'interno di un altro progetto

Non so se dovrebbe essere una libreria statica, una libreria dinamica o un framework, e onestamente, non sono veramente sicuro di quale sia la differenza, o di come dovrei farlo e metterlo in Xcode.

Tutto quello che so è che ho bisogno di tenere un'app separata per testare e aggiornare il codice di condivisione e che l'app principale la usi.

Se non si può già dire, io non sono un mago. Sono solo uno sviluppatore semplice.

Qualsiasi aiuto o direzione sarebbe apprezzato. Grazie!

+0

È possibile creare un framework ombrello che è qualcosa come "framework inside framework" http://stackoverflow.com/a/27638841/1582217 –

+0

possibile duplicato di [Come creare un framework Umbrella in sdk iOS?] (Http://stackoverflow.com/questions/27484997/how-to-create-an-umbrella-framework-in-ios-sdk) –

risposta

150

In primo luogo, alcune definizioni generali (specifiche per iOS):

libreria statica - un'unità di codice legato al momento della compilazione, che non cambia.

Tuttavia, le librerie statiche iOS sono non consentito contenere immagini/risorse (solo codice). Puoi ovviare a questa sfida utilizzando un pacchetto multimediale .

Una definizione migliore e più formale può essere trovata su Wikipedia here.

libreria dinamica - un'unità di codice e/o delle attività collegate in fase di esecuzione che può cambiamento.

Tuttavia, solo a Apple è consentito creare librerie dinamiche per iOS. Non ti è permesso crearli, in quanto ciò comporta il rifiuto della tua app. (Vedere this altro post SO per conferma e ragionamento su tale).

Software Framework - un gruppo compilato di codice che esegue un compito ... da qui, si può effettivamente avere un quadro statico o un quadro dinamico , che sono in genere solo le versioni compilate di cui sopra.

Vedere il Wiki on Software Framework per ulteriori dettagli.

Quindi su iOS, l'unica opzione è fondamentalmente utilizzare una libreria statica o un framework statico (la differenza principale è che un framework statico viene distribuito come file compilato .a, mentre una libreria statica può essere semplicemente inclusa come sottoprogetto: è possibile visualizzare tutto il codice, che viene prima compilato e il relativo file .a utilizzato come dipendenza dal progetto).

Ora che siamo chiari (er) in questi termini, la creazione di una libreria statica e il supporto del pacchetto multimediale per iOS non è troppo difficile, e ci sono molti tutorial su come farlo.Personalmente consiglierei questo:

https://github.com/jverkoey/iOS-Framework

Questa è una guida abbastanza straight-forward e non ha lo svantaggio di trattare con "librerie statiche falsi" ... check it out per ulteriori informazioni ..

Una volta creata la libreria statica, è facile includerla come un modulo all'interno di Git per l'utilizzo in diversi progetti.

Buona fortuna.

EDIT

Per quanto riguarda un sottoprogetto all'interno di un progetto, per quanto ne so, per arrivare a questo lavoro/corretta compilazione, si deve essenzialmente a creare una catena di compilazione in cui il sottoprogetto viene compilato prima , che crea un file statico .a che viene utilizzato come dipendenza dal progetto.

Ecco un altro tutorial utile che parla di questo:

http://www.cocoanetics.com/2011/12/sub-projects-in-xcode/

EDIT 2

Come di iOS 8, Apple ora permette agli sviluppatori di creare quadri dinamici! (Nota: la tua app deve avere un target minimo di iOS 8 per includere un framework dinamico ... back porting non consentito.)

Questo è stato aggiunto come un nuovo modello di progetto. In Xcode 6.1, questo può essere trovato all'indirizzo:

New Project -> iOS -> Framework & Library -> Cocoa Touch Framework 
+0

Finora, sembra che il sottoprogetto sia quello che voglio e quell'articolo era perfetto. Ho notato uno strano effetto collaterale: il sottoprogetto che ho trascinato all'interno del mio progetto principale ha anche il mio codice di test (viewcontroller e pennino, appdelegate, ecc.) E ho fatto in modo che solo le classi che voglio usare nel il progetto principale viene controllato per essere utilizzato nella libreria statica. Ma per qualche ragione, quando sono andato a fare gli allegati al file del pennino del mio progetto principale, ho anche mostrato gli outlets e le azioni del mio sottoprogetto. Questo potrebbe sicuramente portare ad una certa confusione. Qualche consiglio per sbarazzarsi di quelli? Grazie! – pizzafilms

+0

Un progetto dinamico può essere trascinato e rilasciato in un progetto statico, rendendolo quindi un progetto statico? Sono davvero confuso, qualche chiarimento sarebbe davvero grandioso! Grazie in anticipo :-) –

+1

@ JRG-Developer Il porting del framework dinamico è consentito se si seguono alcune regole: https://developer.apple.com/library/prerelease/ios/documentation/General/Conceptual/ExtensibilityPG/ExtensionScenarios.html # // apple_ref/doc/uid/TP40014214-CH21-SW3 – klefevre