2014-10-01 87 views
6

我在應用程序中使用CocoaPods,其中工作空間由主應用程序項目和一些靜態庫作爲子項目組成,每個靜態庫都有自己的依賴關係。靜態庫在編譯時鏈接到主項目中,主要作爲封裝和組織代碼的手段存在。使用cocoapods管理靜態庫中的依賴關係

CocoaPods將依賴項鍊接到子項目的靜態庫中時出現問題。如果這兩個或多個靜態庫具有相同的依賴關係,則它們都不能鏈接到主項目中,因爲這樣做會導致重複的符號。

我現在有的解決方法是在每個子項目中創建一個「虛擬」目標,並將其設置爲pod文件中的鏈接目標。真正的目標使用由CocoaPods生成的xcconfig文件,沒有任何依賴關聯鏈接。

儘管這確實有效,並且id是我能找到的最簡單的解決方案,但它仍然帶有額外的不必要的負擔,針對每個項目,如:

xcodeproj 'MyApp/MyApp.xcodeproj' 
target :'MyApp' do 
    xcodeproj 'MyApp/MyApp.xcodeproj' 

    pod 'MBProgressHUD',   '0.9' 

    link_with 'PodDummy' 
end 

另一個缺點這種方法是將所有的依賴仍然需要在主項目無論如何指定,使它們與最終的可執行文件鏈接。


所以我的問題是:如何使用的CocoaPods靜態庫中的項目,而不依賴鏈接到二進制?

或者更好的是:我可以只在靜態庫子項目中指定依賴項,並讓CocoaPods找出需要在主項目中鏈接哪些內容,解決過程中的重複項?

我在考慮只在pod文件中包含主項目,並讓子項目手動引用標題的「Pods」目錄。

過去似乎已經圍繞這個問題進行了一些討論,但是我看不出它是什麼,如果有的話。相關的討論是:

  1. https://github.com/CocoaPods/CocoaPods/issues/1335
  2. https://github.com/CocoaPods/CocoaPods/issues/840
  3. iOS Static Library + CocoaPods and the duplicate symbols error
  4. Kiwi and CocoaPods with a static shared library

回答

0

的CocoaPods非常適用於使用豆莢人。當你開發豆莢時,或者更糟糕的是,當你開發一個應用程序以及(a)所有豆莢...(也可能取決於豆莢)時,使用它會困難得多。

你必須知道的是CocoaPods在這裏解決依賴關係。你的問題在我看來,你已經在你的工作區中開啓了你的pod,完全繞過了這個特性!當然,如果您在項目目錄中執行「pod install」,則只會產生一堆依賴項,Pod將根據Podfile進行安裝,而您自己的pod代碼庫位於同一文件夾樹中。

我所做的是分開開發豆莢(可能與否取決於其他豆莢)。不在同一個應用程序的「工作區」中也是一種很好的做法。您可以使用演示應用程序開發您的Pod。

而在主應用程序的目錄中,我在Podfile中指出了我自己的pod的「開發」分支。因此,該應用程序正在開發與豆莢的傾向,就好像這些豆莢正式發佈。除了它們也只是在開發中。

它迫使你分開分開,當你需要改變你的應用程序的pod代碼中的某些內容時,它並不那麼好。

兩種可能性(他們都不是很好)。首先,更換您的吊艙,然後在您的應用程序文件夾中進行「吊艙更新」。其次,將pod代碼直接播放到應用程序工作區(pod代碼已由pod update命令導入)。並且一旦滿足,將修改返回到用於提交的原始pod代碼。

很多來回,但我沒有找到比這更好的。

+0

謝謝你的回答。我沒有開發豆莢,只是試圖使用一個項目使用多個子項目鏈接到一個單一的可執行文件。子項目有其自己的依賴關係 - 其中一些對每個項目都是唯一的,另一些則用於多個子項目。問題是使用cocoapods來管理這些依賴關係,同時也避免了當依賴鏈接到可執行文件時出現的重複符號。 – 2015-04-21 18:23:17