2014-11-24 4 views
7

Ich versuche, herauszufinden, wie Kakaoschote Abhängigkeiten zu einem iOS-App hinzufügen, die eine eingebettete Cocoa Touch Framework hat. Ich habe meine podfile wie folgt aufgebaut:Hinzufügen cocoapod Abhängigkeiten zu einem Kakao Touch Rahmen

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

Dann habe ich einen View-Controller mit einem Schild in Schaltfläche hinzuzufügen gemäß den Anweisungen hier:

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

und alles kompiliert ohne Probleme. Wenn ich dann die App laufe es starten und eine Google-Anzeige und in Schaltfläche schreiben, aber ich habe eine Menge Warnungen über die Google-Klassen an zwei Stellen definiert werden, zum Beispiel:

objc [6727]: Klasse GPPSignIn implementiert sowohl /Users/jamesburke/Library/Developer/Xcode/DerivedData/TestApp-eiqrhcijoqplxgaoodgtwzncvhjk/Build/Products/Debug-iphonesimulator/TestAppFramework.framework/TestAppFramework und/Users/jamesburke/Library/Developer/CoreSimulator/Geräte/730A1805-D46F-4D11-9F9E-DA37C1147F9A/data/Behälter/Bundle/Anwendung/EB7EE52A-7FB6-45CE-81B4-1E9A45875E69/TestApp.app/TestApp. Einer der beiden wird verwendet. Welches ist undefiniert.

Wenn ich dann in Taste auf das Zeichen klicken erhalte ich eine Fehlermeldung, dass ich nicht die Google-Client-ID gesetzt haben -, die ich habe, sondern weil die GPPSignIn Klasse auf einer gemeinsamen Instanz beruht sieht es aus wie das Duplikat Klassen haben verwirrt Dinge:

2014-11-24 20: 54: 25,557 TestApp [6727: 155282] *** aufgrund nicht abgefangene Ausnahme 'NSInvalidArgumentException' beenden app Grund: ‚Sie geben muss | clientID | für | GPPSignIn | '

Blick in dem Stack-Trace wir aus dem TestApp Bereich auf die TestAppFramework eines Flip, auch wenn es an dieser Stelle im Rahmen kein Code ist

… 
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 

ich dieses Problem mit einigen anderen Kakaofrüchten bekommen, zum Beispiel mailcore2-ios, aber einige andere Pods scheinen nicht die gleichen Warnungen zu erzeugen.

Gibt es eine Möglichkeit, meine podfile einzurichten, so dass sowohl meinen Rahmen und meine App Zugriff auf die gleichen Abhängigkeiten, aber ohne zur Laufzeit kollidieren? Oder sollte ich meine Abhängigkeiten nicht so aufstellen?

Antwort

0

Die link_with sollte (korrigiert mich wenn ich falsch liege) verwendet werden Ziele im selben Projekt zu verknüpfen. Was Sie beschreiben, ist ein eingebettetes Framework (welches ein separates Projekt ist).

Was Sie wirklich wollen, zu tun ist, um die Abhängigkeiten zu den eingebetteten Rahmen Zugabe wie:

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 

In diesem Beispiel wird die Google-sdk zu beiden Projekten (und die Anbindung an ihre Testziele), vielleicht nur Sie es brauchen im eingebetteten Framework.

+0

Danke dafür, aber das Hinzufügen der Google SDK zu beiden Zielen würde zu dem oben gezeigten Fehler führen. Was ich am Ende tatsächlich herausgefunden habe, war, den gesamten Code für die App in das Framework zu verschieben - also sind der App-Delegierte, alle Storyboards, alle View-Controller usw. im Framework und die Haupt-App wird einfach zu leerer Halter. Eine Sache zu beachten - wenn Sie versuchen, dasselbe mit einer Freigabeerweiterung zu tun, dann kann cocoapods nicht damit umgehen, Sie müssen einen Dummy-View-Controller in der Erweiterung haben, damit cocoapods immer noch funktionieren kann. –

0

Ich bin nicht sicher, dass pod 'google-plus-ios-sdk', '~> 1.7' unterstützt Framework. In Ihrem podfile

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

Versuchen Sie, wie diese zu verwenden.