2016-04-27 87 views
2

我正在編寫一個快速框架,這取決於Alamofire v3.x.現在我想將我的框架添加到一個項目中,該項目取決於Alamofire v2.x.我正在使用迦太基來管理我的項目。似乎不可能在項目中添加兩個相同框架的版本。有辦法解決這種情況嗎?iOS(或OS X)項目取決於框架的兩個版本

+0

如果兩個框架版本試圖在通用位置寫入數據庫,但每個版本都需要不同的模式,該怎麼辦?你不能保證相同框架的兩個版本(你沒有寫)可以互操作,所以你不應該混合和匹配這樣的框架版本。使用一個或另一個。 – par

+0

@par感謝您的評論。事實上,我想分發一個依賴於Alamofire v3.x的框架,但是如果我的用戶在他們的項目中使用Alamofire v2.x會怎樣? – ukim

+0

這是同樣的問題。現在Alamofire特別*可能在不同版本之間兼容(我不知道),但是如果你的庫中有第三方依賴項,你需要告訴用戶他們必須使用該版本,如果它也是它們的依賴項。只要從同一個框架的兩個版本之間的共享資源的角度思考它,就會明白爲什麼事情不可避免地會以突發的,令人討厭的方式破壞。 – par

回答

1

您遇到的情況稱爲依賴性地獄。像.NET,Node等運行時已經解決了這個問題。 Java至少可以達到8個,只會選擇它在運行時發現的第一個版本,並希望所有其他軟件包都能與之協同工作;他們沒有。

CocoaPods可以檢測到你的依賴地獄和pod install期間的錯誤,但就是這樣。我認爲迦太基也是這樣做的?然後,您的框架的用戶堅持降級依賴關係,直到您的框架和其他依賴框架都使用相同版本的共享依賴關係。截至目前,這仍然是我們AFAIK可用的唯一選擇。

蘋果確實通過Framework versioning解決了依賴地獄的問題。該框架將捆綁自身的多個版本,並且在與框架鏈接時,鏈接器會將完整路徑(版本在路徑中)記錄爲所需版本。但是捆綁多個版本的框架是一個令人難以置信的愚蠢想法,因此從未起飛。