我正在嘗試創建一個動態框架以在我的應用程序的各種擴展之間共享代碼。這是使用嵌入式可可豆莢創建動態/嵌入式框架的正確方法嗎?
問題:
這裏是我的項目結構。
MyFrameworks是我的應用程序的網絡層,其固有地使用Alamofire。如下所示構建我的pod文件。
platform :ios, '9.0'
use_frameworks!
workspace 'CocoaPodsProjectworkspace'
def shared_pods
pod 'Alamofire'
pod 'SwiftyJSON'
end
target 'CocoaPodsProject' do
project 'CocoaPodsProject.xcodeproj'
# Pods for CocoaPodsProject
end
target 'MyFramework' do
project 'MyFramework/MyFramework.xcodeproj'
shared_pods
end
target 'CocoaPodsProjectTests' do
end
target 'CocoaPodsProjectUITests' do
end
在構建框架時,我將其作爲嵌入式二進制拖動到我的主項目中時出現錯誤。
使dyld:庫未加載:.framework/Alamofire從引用: /Users/sandeep/Library/Developer/Xcode/DerivedData/CocoaPodsProjectworkspace-enpobdyluhbxdwazuvbfogcspfof/Build/Products/Debug-iphonesimulator/MyFramework.framework/MyFramework 原因:沒有找到圖片
解決方案我想:
- 聲明的pods_frameworks.framework爲在鏈接的 二進制文件中可選。
- 嘗試更改RunPath框架的搜索路徑動態庫
- 安裝名稱再次運行pod分解並運行pod安裝。
- 刪除派生數據和重新鏈接框架都導致相同的 問題。
解決方案奏效:
我意識到MyFramework.framework試圖找到Alamofire.framework在一個錯誤的目錄,它是送花兒給人試圖尋找相對使用框架項目/目標。所以我能找到的最簡單的解決方案是修改pod文件,如下所示。
platform :ios, '9.0'
use_frameworks!
workspace 'CocoaPodsProjectworkspace'
def shared_pods
pod 'Alamofire'
pod 'SwiftyJSON'
end
target 'CocoaPodsProject' do
project 'CocoaPodsProject.xcodeproj'
shared_pods
# Pods for CocoaPodsProject
end
target 'MyFramework' do
project 'MyFramework/MyFramework.xcodeproj'
shared_pods
end
target 'CocoaPodsProjectTests' do
end
target 'CocoaPodsProjectUITests' do
end
正如您所見,我將shared_pods添加到主應用程序和我的框架項目及其各自的目標。現在一切順利。我既不必使pods_framework成爲可選項,也不必修改MyFramework的構建設置。
問:
將共享回購到所有想使用我的框架看起來有點多餘的項目和他們的目標。有沒有更好的方法可以指定Myframework.framework來讀取它的所有依賴關係,而不是從使用它的項目中讀取?
我在CocoaPods Git repo上提出了同樣的問題。但是,因爲它本身不是一個問題,所以它們可能不會恢復原狀。因此在這裏張貼它作爲一個問題。鏈接到問題:https://github.com/CocoaPods/CocoaPods/issues/6901如果有幫助。