2016-03-10 35 views
20

Sto creando un nuovo Cocoa Touch Framework (MyFramework.framework), che avrà una dipendenza da Alamofire. Questo quadro sarà scritto in Swift. Come test ho iniziato un nuovo progetto di Cocoa Touch Framework:Posso utilizzare CocoaPods quando creo un Cocoa Touch Framework?

File > New > Project > Framework & Library > Cocoa Touch Framework 

Poi, nel terminale ho eseguito:

pod init 

in questo progetto directory. Nel Podfile appena creato ho aggiunto il seguente:

source 'https://github.com/CocoaPods/Specs.git' 
# Uncomment this line to define a global platform for your project 
platform :ios, '8.0' 
# Uncomment this line if you're using Swift 
use_frameworks! 

pod 'Alamofire', '~> 3.0' 

Ancora una volta, nel terminale ho eseguito:

pod install 

e ha iniziato la codifica via.

Tutto sembrava funzionare bene finché non ho utilizzato il prodotto MyFramework.framework in un progetto a vista singola. Quando si tenta di eseguire il progetto ottengo il seguente problema:

dyld: Library not loaded: @rpath/Alamofire.framework/Alamofire 
Referenced from: /Users/me/Library/Developer/CoreSimulator/Devices/87DA70B6-49BF-441E-BD81-F4A80B0792CF/data/Containers/Bundle/Application/2E414EA8-7E54-4D71-9295-566D4FAAADE2/test.app/Frameworks/MyFramework.framework/MyFramework 
Reason: image not found 

ho pensato che i progetti Cocoa Touch Framework erano intrinsecamente dinamica, e quindi dovrebbe includere tutte le dipendenze.

Qualcuno può dirmi perché questo sta accadendo e come potrei essere in grado di risolverlo? Si tratta di un problema con CocoaPods o mi manca qualcosa?

Sono un noob to Stack Overflow, quindi per favore fatemi sapere se avete bisogno di ulteriori informazioni da me.

Grazie!

risposta

16

Sfortunatamente CocoaPods non supporta l'utilizzo con il target Cocoa Touch Framework. Ho trovato alcuni riferimenti a questo mentre scavando attraverso i loro problemi su GitHub:

Noi in realtà non supportano l'integrazione di baccelli in obiettivi quadro ...
- neonichu il nov 4, 2015

e

... in modo che questo "solo lavoro", CP avrebbe bisogno di fare un'analisi ricorsiva delle dipendenze nel progetto Xcode e anche in qualche modo garantire che non si potrebbe utilizzare il prodotto in un altro accumulo contex t.
- neonichu il lug 7, 2015


Finora ho trovato due modi per affrontare il problema:

Il modo giusto è quello di creare una nuova specifica per il vostro pod quadro e portalo nel tuo progetto principale tramite CocoaPods. Questo risolve tutti i problemi che CococaPods ha con il grafico delle dipendenze ed è la soluzione consigliata dagli sviluppatori di CocoaPods.

Il modo semplice è includere i pod dal framework nel progetto principale. Questo sembra funzionare, ma francamente non so perché.Questo è il Podfile dal mio progetto di test:

platform :ios, '9.0' 
use_frameworks! 

def myfirstframework_pods 
    pod 'Alamofire', '~> 3.0' 
end 

target 'MyApp' do 
    pod 'SwiftKeychainWrapper', '~>1.0' 
    myfirstframework_pods 
end 

target 'MyFirstFramework' do 
    myfirstframework_pods 
end 
+0

Il motivo per cui questo funziona è che il framework che si sta creando è felice finché le sue dipendenze sono incorporate nell'app (basta collegarle e sono incorporate dall'app). Apple sembra molto schizzinosa riguardo l'inclusione dei framework - l'unico posto dove dovrebbero essere aggiunti è nell'app. Questo per evitare molti quadri diversi che aggiungono diverse versioni di framework che potrebbero causare il caos. Ho solo bisogno di menzionare "java classpath" per dare una foto dell'altro estremo. Quindi sì, usare frameworks in framework è molto difficile, ma può essere fatto usando le cosiddette intestazioni ombrello. –

+1

Il "modo semplice" ti darà un "[!] Il target 'Pods-MyApp' ha framework con nomi in conflitto: googletoolboxformac" per alcune librerie, come Firebase. –

+0

Post molto utile! – VaporwareWolf

-1

basta aggiungere il Alamofire.framework alle "binari incorporati" sezione "Generale" scheda del bersaglio app .

+2

Non esiste una sezione "Binari incorporati" per le destinazioni Cocoa Touch Framework, solo "Strutture e librerie collegate". – xZenon

+0

Esiste anche un'opzione per Cocoa Touch Framework – Donal