2014-12-15 17 views
7

Ho un requisito per creare un framework per un insieme condiviso di utilità comuni che intendiamo utilizzare in più progetti iOS nella nostra organizzazione. Le classi di utilità sono scritte in swift e il framework deve supportare i progetti in iOS 7 e versioni successive. Sto usando Xcode 6.1.1.Come creare un framework per un progetto rapido con supporto iOS 7+?

Ho provato a creare sia un "Cocoa Touch Framework" che una "Cocoa Touch Static Library" e non riesco a farlo funzionare per i build di iOS 7.

Con "Cocoa Touch Framework", viene visualizzato un avviso che "Dylibs/framework incorporati funzionano solo su iOS 8 o versioni successive" e sebbene possa essere eseguito, fallisce durante il passaggio iTunesconnect con un errore che il progetto l'obiettivo di distribuzione non deve essere inferiore a 8.0 (il mio è 7.0).

Ho provato anche con "Cocoa Touch Static Library" utilizzando i passaggi indicati in http://www.raywenderlich.com/65964/create-a-framework-for-ios, ma semplicemente non viene creato con file swift. Quando rimuovo tutti i file swift e aggiungo i file Obj-C, funziona correttamente.

Qualsiasi aiuto è molto apprezzato. Come posso creare un framework per un progetto rapido con supporto iOS 7+?

Grazie

risposta

8

Sfortunatamente, non è possibile. È uno dei fattori più deludenti di Swift.

Come mostrato nello documentation, non è possibile creare un framework/libreria statico con librerie veloci e dinamiche supportate solo in iOS 8+.

L'unica opzione che consiglio è di sviluppare un framework statico Objective-C per iOS 7 e quindi iniziare a usare swift quando si desidera rilasciare il supporto per iOS 7. Non è la situazione più ideale, ma poiché è possibile avere mixed languages in un framework dinamico, significa che non si dovrà perdere tempo a riscrivere il codice (a meno che, ovviamente, lo si voglia).

+0

potresti indicare dove nella documentazione non è possibile utilizzare Swift per produrre un framework per iOS inferiore a 8? Sono fiducioso nella tua risposta, ma ho bisogno di qualcosa di formale da portare a un cliente. –

6

Apple non supporta i framework puri di Swift prima che iOS 8 subisca un certo danno con il tasso di adozione di Swift.

Non sto sostenendo la seguente soluzione come best practice. Onestamente, è un hack molto imperfetto. Abbiamo una grande struttura pura di Swift che fa la maggior parte del lavoro pesante per cose qui al lavoro. E, avevamo bisogno di quella struttura in un prodotto che girava su iOS 7.1+.

Ecco l'hack: la gerarchia della directory è importante. In una situazione ideale, il progetto e il framework sono fratelli nell'albero delle directory. Crea un gruppo nel progetto. In Finder, shift/command seleziona tutti i file sorgente dal framework e li rilascia nel gruppo appena creato. Assicurati di non copiare i file. Il tuo raccontare Xcode per aggiungere semplicemente i file al file di progetto, creando collegamenti di percorso relativi a loro.

Il framework dovrebbe ora essere compilato direttamente nel progetto. Non posso sottolineare abbastanza quanto sia fragile questa soluzione. Poiché i file vengono aggiunti al tuo framework, devono anche essere aggiunti/collegati a qualsiasi progetto che hai "linkato" al framework.

Questa "soluzione" deve essere utilizzata solo come ultima risorsa. Dover ripetere la parità di framework su più progetti è stupido. Se il tempo passa con il progetto che rimane statico e il framework si evolve, scaricare il framework nel progetto e riaggiungerlo. Ci vuole meno di un minuto per scaricare/riaggiungere il framework e riduce le possibilità di errore.

Apple, per favore aiutateci, così possiamo mantenere le migliori pratiche.Sono imbarazzato per condividere questa soluzione, in quanto è solo un orribile modo per aggirare qualcosa che Apple non supporta.

+2

a volte devi fare quello che devi fare – jamylak

Problemi correlati