2016-11-21 90 views
7

我創建了一個CocoaPod,比如說MyPod,它依賴於另一個Cocoapod,比如RxSwift在開發CocoaPod時使用CocoaPod依賴項

所以我有這樣的MyPod.podspec

s.dependency "RxSwift", "~> 3.0.1" 

然而,儘管發展MyPod,我怎麼能實際使用的依賴?

import RxSwift 
// ^
// No such module 'RxSwift' 

public class MyClass { //... 

有沒有我失蹤的一步,或一些常見的約定?看起來像Moya等其他項目正在使用Carthage在開發過程中構建依賴關係。我應該這樣做,或者可以添加一個Podfile

我知道這對於位於回購協議中的示例應用程序應該不是問題,該示例應用程序將擁有自己的Podfile。但是,我仍想在示例應用程序之外的頂級測試中進行測試,並且能夠在示例應用程序之外再次對其進行構建時實際構建框架。

回答

1

我最終使用Carthage來構建框架依賴關係。我想我可以用CocoaPods來做。但是,這需要我開始使用工作區,並且我不想這樣做,以便儘可能減少更改。

而且,與迦太基,它並不需要我添加一個新的Podfile/Podfile.lock,因爲迦太基將使用現有的Cartfile/Cartfile.resolved這是已經存在。這是因爲在單獨構建框架時,Carthage在另一個項目中使用框架時使用Cartfile.resolved。然而,隨着的CocoaPods,*.podspec在另一個項目中使用.NET Framework時使用Podfile.lock如果你一個Podfile加)在框架本身安裝相關的豆莢需要。

6

我不能說是否使用CocoaPods或迦太基。兩者都有其優點和缺點。另外,應該考慮很多因素,其中一些可能無法控制(例如堅持使用CocoaPods的客戶端),所以我會跳過這一部分。

但是,對於您的問題,確實您正在開發的吊艙可能依賴於另一個吊艙。您已經有了正確的s.dependency一行。這是必要的。

但是,我懷疑你無法引用相關pod的原因可能是因爲你的'tester/example'項目中沒有Podfile,並且/或者在添加完畢後沒有執行pod install依賴於你的Podspec。

原因是我懷疑是因爲Podspec根本沒有被Xcode實際處理過,所以實際上並沒有下載(或編譯)依賴關係。

相反,當你進行pod安裝(當然是通過命令行)時,CocoaPods將創建一個Pods項目,包括你的開發窗口,你依賴的窗口(在Podspec中)以及Podfile中的其他窗格。

爲了驗證這一理論,我:

  • 創建一個新的吊艙(使用CocoaPod自己的「豆莢LIB創建」(https://guides.cocoapods.org/making/using-pod-lib-create.html
  • 打開的CocoaPod我創建和編輯的Podspec到工作區。添加依賴s.dependency 'RxSwift', '~> 3.0.1'
  • 加在我的示例應用程序的Podfile的另一盒(證明Podfile依賴和Podspec依賴之間的區別。)
  • 在示例應用程序的folde演出pod install
  • 編輯我的Pod的類來做一些有用的事情,並添加import RxSwift行。
  • 爲我的示例應用程序(當然是「Hello World」)添加了一個標籤。
  • 二手PureLayout做所有的汽車佈局限制爲標籤(與證明示例項目如何訪問這兩個吊艙 - 發展吊艙以及被引用的吊艙PureLayout

您可以檢查出我對我的公開GitHub上創建的演示: https://github.com/ericwastaken/CocoaPod-Dependency-Demo

老實說,我已經創建使用pod lib create幾個豆莢和它確實創造一個很好的結構,它一直爲我工作。出於這個原因,我會建議您始終使用它來創建您的吊艙的骨架。

Xcode 8評論:pod lib create似乎仍然創建一個Swift 1.x項目。所以,在你使用這個工具之後,當你打開Xcode時,你將被提供「轉換」到一個更新版本的Swift。我會讓這種轉換在第一時間發生,這樣你就可以使用Swift 2.x或3.x語法(你可以選擇)。

+0

感謝您的徹底解答。但是,我認爲你錯過了我的問題的最後一部分,我說我不想通過ExampleApp進行開發(甚至根本不需要開發),我想在框架的頂層進行我的測試本身。我希望我的ExampleApp(如果我甚至有)只是爲了展示如何使用框架。它不應該包含任何必要的東西,比如測試。它應該能夠被刪除而不用擔心。 – solidcell

+0

我鼓勵你克隆我創建的回購。您會注意到示例應用程序根本不需要,它確實可以刪除。像你說的那樣,你在'發展莢'中做所有的發展。另外,您確實可以針對該窗格編寫單元測試。單元測試目標可以簡單地將pod作爲依賴項,並且可以使用TESTABLE將私有方法公開到測試中。隨意克隆它,並嘗試刪除示例。請注意,您仍然需要一個Podfile,但這本身就可以。 – ericWasTaken

+0

最終,主要的收穫是你仍然需要一個額外的'Podfile'來讓框架能夠自行構建。至於你的回購,我試圖建立它,但我得到了大量的Xcode問題。找不到文件(紅色),然後在我嘗試構建時在'../ build'中添加一個構建文件夾。如果我關閉並再次打開它,它會爲每個方案創建一個複製方案:每個方案都有「___ 2」。沒問題,因爲我已經和你一樣解決了這個問題('Podfile'),所以把項目設置的差異放在一邊。 – solidcell