我正在尝试创建一个动态框架以在我的应用程序的各种扩展之间共享代码。这是使用嵌入式可可豆荚创建动态/嵌入式框架的正确方法吗?
问题:
这里是我的项目结构。
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如果有帮助。