【发布时间】:2018-01-01 08:04:38
【问题描述】:
我正在尝试创建一个动态框架以在我的应用的各种扩展之间共享代码。
问题:
这是我的项目结构。
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 Search 路径
- 安装名称 Running pod deintegrate 并再次运行 pod install。
- 删除派生数据和重新链接框架都会导致相同的结果 问题。
有效的解决方案:
我意识到 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 如果有帮助。
【问题讨论】:
标签: ios swift3 cocoapods embedded-framework