2014-11-24 11 views
7

Sto cercando di capire come aggiungere le dipendenze del pod di cacao a un'app iOS con un framework di tocco cacao incorporato. Ho il mio podfile impostato in questo modo:aggiunta delle dipendenze di cocoapod a un framework per il tocco di cacao

link_with [‘TestApp’, ‘TestAppFramework’] 
platform :ios, '8.0' 
source 'https://github.com/CocoaPods/Specs.git' 
pod 'google-plus-ios-sdk', '~> 1.7' 

poi aggiungo un controller di vista con un pulsante Accedi secondo le istruzioni qui:

https://developers.google.com/+/mobile/ios/sign-in

e tutto compila senza problemi. Se poi eseguire l'applicazione si avvierà e visualizzerà un Google Plus accedi pulsante, ma ho un sacco di avvertimenti circa le classi di Google in corso di definizione in due punti, ad esempio:

objc [6727]: La classe GPPSignIn è implementata in /Users/jamesburke/Library/Developer/Xcode/DerivedData/TestApp-eiqrhcijoqplxgaoodgtwzncvhjk/Build/Products/Debug-iphonesimulator/TestAppFramework.framework/TestAppFramework e/Users/jamesburke/Library/Developer/CoreSimulator/Devices/730A1805-D46F-4D11-9F9E-DA37C1147F9A/dati/Contenitori/Bundle/Application/EB7EE52A-7FB6-45CE-81B4-1E9A45875E69/TestApp.app/TestApp. Uno dei due sarà usato. Quale è indefinito.

Se poi clicco sul pulsante Accedi ottengo un errore che dice che non ho impostare il client id google - che ho, ma perché la classe GPPSignIn si basa su un'istanza condivisa sembra che il duplicato le classi hanno cose confuse:

2014-11-24 20: 54: 25,557 TestApp [6727: 155282] *** terminazione app a causa di eccezione non identificata 'NSInvalidArgumentException', la ragione: 'devi specificare | IDcliente | per | GPPSignIn | '

Guardando nella traccia dello stack lanciamo dal campo di applicazione TestApp al TestAppFramework uno, anche se non c'è alcun codice nel quadro, a questo punto

… 
3 TestAppFramework     0x000000010c7f1a9c -[GPPSignIn assertValidParameters] + 77 
4 TestAppFramework     0x000000010c7f35e7 -[GPPSignIn authenticateMaybeInteractively:withParams:] + 118 
5 TestAppFramework     0x000000010c7f5ac8 -[GPPSignInButton buttonPressed] + 164 
6 UIKit        0x000000010b4c38be -[UIApplication sendAction:to:from:forEvent:] + 75 
… 
19 UIKit        0x000000010b4c2420 UIApplicationMain + 1282 
20 TestApp        0x000000010a25e9f3 main + 115 

ottengo questo problema con alcuni altri baccelli di cacao, ad esempio mailcore2-ios, ma alcuni altri pod non sembrano presentare gli stessi avvertimenti.

C'è un modo per impostare il mio file pod in modo che sia il mio framework che la mia app abbiano accesso alle stesse dipendenze, ma senza interferenze al runtime? O dovrei semplicemente non impostare le mie dipendenze in questo modo?

risposta

0

Il link_with deve essere utilizzato per (correggimi se ho torto) collegando i target all'interno dello stesso progetto. Quello che stai descrivendo è un framework incorporato (che è un progetto separato).

cosa si vuole realmente fare è aggiungere le dipendenze per il framework embedded come:

source 'https://github.com/CocoaPods/Specs.git' 

workspace 'TestApp.xcworkspace' 

def import_pods 
    pod 'google-plus-ios-sdk', '~> 1.7' 
end 

target : TestAppFramework do 
    xcodeproj 'TestAppFramework.xcodeproj' 
    platform :ios, '8.0' 
    link_with 'TestAppFramework', 'TestAppFrameworkTests' 
    import_pods 
end 

target : TestApp do 
    xcodeproj 'TestApp.xcodeproj' 
    platform :ios, '8.0' 
    link_with 'TestApp', 'TestAppTests' 
    import_pods 
end 

questo esempio viene aggiunto l'SDK di Google per entrambi i progetti (e il collegamento ai loro obiettivi di prova), forse è necessario solo che nel framework incorporato.

+0

Grazie per questo, ma aggiungendo il sdk di Google ad entrambi i target si tradurrebbe nell'errore che ho mostrato sopra. Ciò che ho effettivamente trovato alla fine è stato spostare tutto il codice per l'app nel framework, quindi l'app delegata, tutti gli storyboard, tutti i controller di visualizzazione ecc. Sono nel framework e l'app principale diventa semplicemente un supporto vuoto. Una cosa da notare con questo: se si tenta di fare la stessa cosa con un'estensione di condivisione, i cocoapod non possono gestirli, è necessario avere un controller di visualizzazione fittizio nell'estensione in modo che i cocoapod possano ancora funzionare. –

0

Non sono sicuro che pod 'google-plus-ios-sdk', '~> 1.7' supporti Framework. Nella tua podfile

target 'YourProjectName' do 
pod 'google-plus-ios-sdk', '~> 1.7' 
end 

tenta di utilizzare in questo modo.