我正在尝试研究如何将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
并且一切都没有问题。如果我然后运行应用程序,它将启动并显示一个谷歌加登录按钮,但我收到很多关于在两个地方定义谷歌类的警告,例如:
objc [6727]:类GPPSignIn在/Users/jamesburke/Library/Developer/Xcode/DerivedData/TestApp-eiqrhcijoqplxgoodgtwzncvhjk/Build/Products/Debug-iphonesimulator/TestAppFramework.framework/TestAppFramework和/ Users / jamesburke /中实现。图书馆/开发商/ CoreSimulator /设备/ 730A1805-D46F-4D11-9F9E-DA37C1147F9A /数据/集装箱/包/应用/ EB7EE52A-7FB6-45CE-81B4-1E9A45875E69 / TestApp.app / TestApp。将使用两者之一。哪一个未定义。
如果我点击登录按钮,我会收到一条错误消息,说我没有设置谷歌客户端ID - 我有,但因为GPPSignIn类依赖于共享实例,所以看起来重复的类已经混淆了事情:
2014-11-24 20:54:25.557 TestApp [6727:155282] ***因未捕获的异常终止应用程序' NSInvalidArgumentException',原因:'您必须指定| clientID | for | GPPSignIn |'
查看堆栈跟踪,我们将TestApp范围从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,以便我的框架和我的应用程序都可以访问相同的依赖项,但不会在运行时发生冲突?或者我不应该像这样设置我的依赖项?
答案 0 :(得分:0)
link_with应该用于(纠正我,如果我错了)链接同一项目中的目标。您所描述的是嵌入式框架(这是一个单独的项目)。
您真正想要做的是将依赖项添加到嵌入式框架中,如:
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
此示例将google sdk添加到两个项目(并链接到他们的测试目标),也许您只需要在嵌入式框架中使用它。