我正在尝试研究如何将 cocoa pod 依赖项添加到具有嵌入式 cocoa touch 框架的 iOS 应用程序。我的 podfile 设置如下:
link_with [‘TestApp’, ‘TestAppFramework’]
platform :ios, '8.0'
source 'https://github.com/CocoaPods/Specs.git'
pod 'google-plus-ios-sdk', '~> 1.7'
然后,我按照此处的说明添加一个带有登录按钮的视图控制器:
https://developers.google.com/+/mobile/ios/sign-in https://developers.google.com/+/mobile/ios/sign-in
一切编译都没有问题。如果我随后运行该应用程序,它将启动并显示 google plus 登录按钮,但我收到很多关于在两个地方定义的 google 类的警告,例如:
objc[6727]:类 GPPSignIn 在 /Users/jamesburke/Library/Developer/Xcode/DerivedData/TestApp-eiqrhcijoqplxgaoodgtwzncvhjk/Build/Products/Debug-iphonesimulator/TestAppFramework.framework/TestAppFramework 和 /Users/jamesburke/Library/Developer 中实现/CoreSimulator/Devices/730A1805-D46F-4D11-9F9E-DA37C1147F9A/data/Containers/Bundle/Application/EB7EE52A-7FB6-45CE-81B4-1E9A45875E69/TestApp.app/TestApp。将使用两者之一。哪一个是未定义的。
如果我单击登录按钮,则会收到一条错误消息,指出我尚未设置 google 客户端 ID(我已经设置了),但由于 GPPSignIn 类依赖于共享实例,因此重复的类看起来有些混乱:
2014-11-24 20:54:25.557 TestApp[6727:155282] *** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“您必须指定 |clientID|”对于 |GPPSignIn|'
查看堆栈跟踪,我们从 TestApp 范围翻转到 TestAppFramework 范围,即使此时框架中没有代码
…
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
我在其他一些可可豆荚(例如 mailcore2-ios)上遇到了这个问题,但其他一些豆荚似乎没有发出相同的警告。
有没有办法设置我的 podfile,以便我的框架和应用程序都可以访问相同的依赖项,但不会在运行时发生冲突?或者我不应该像这样设置我的依赖项?