2014-11-24 76 views
7

我正在嘗試解決如何將可可pod依賴關係添加到具有嵌入的可可觸摸框架的iOS應用程序。我有我的podfile設立這樣的:將cocoapod依賴關係添加到可可觸摸框架

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-eiqrhcijoqplxgaoodgtwzncvhjk/Build/Products/Debug-iphonesimulator/TestAppFramework.framework/TestAppFramework和/ Users/jamesburke/Library/Developer/CoreSimulator/Devices/730A1805-D46F-4D11-9F9E-DA37C1147F9A /數據/容器/捆綁/應用/ EB7EE52A-7FB6-45CE-81B4-1E9A45875E69/TestApp.app/TestApp。將使用兩者之一。哪一個是未定義的。

如果我然後點擊登錄按鈕,我得到一個錯誤,說我沒有設定的谷歌客戶端ID - 我有,但因爲GPPSignIn類依賴於一個共享實例,它看起來像重複類有困惑的事:

情節中字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,但其他一些Pod似乎並未提出相同的警告。

有沒有辦法設置我的podfile,以便我的框架和我的應用程序都可以訪問相同的依賴關係,但不會在運行時發生衝突?或者我應該不是像這樣設置我的依賴關係?

回答

0

鏈接_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 

本示例將谷歌SDK這兩個項目(並鏈接到他們的測試目標),也許你只需要它在嵌入式框架中。

+0

感謝您的,但加入谷歌的SDK,以兩個目標將會導致錯誤我上面顯示。 我其實最後發現工作中移動的所有代碼的應用程序到框架 - 這樣的應用程序的委託,所有的故事板,所有的視圖控制器等,都在框架和主要的應用程序會變成一個空的持有人。有一點要與注意 - 如果你試圖做一個共享的擴展同樣的事情,那麼的CocoaPods不能處理它,你必須有一個虛擬視圖控制器的擴展,使的CocoaPods仍然可以正常工作。 – 2015-02-22 14:50:51

0

我不確定pod'google-plus-ios-sdk','〜> 1.7'是否支持Framework。 在你podfile

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

嘗試使用它這樣。