我有一个用Swift编写的模块/框架,打算在iOS上使用。当我尝试在应用程序中包含框架时,我首先在构建阶段注意到一些红色的“未找到”提示:
但是,项目构建良好-找到了目标依赖项,因此没有编译问题。这只是生成的构建框架-可以肯定的是,启动后,我遇到了链接器错误,它找不到图像。查看构建日志,它在这里:
/Users/Craig/Projects/Fluffy/build/Debug-iphoneos/
这很有意义-这就是在我的框架的“build设置”中定义的内容:
但是复制失败了,因为源框架不存在:
PBXCp /Users/Craig/projects/Fluffy/build/Debug-iphoneos/Fluffy_iOS.framework /Users/Craig/Library/Developer/Xcode/DerivedData/MyApp-dcjfhcnyzkwzxiejuuxqlsgajreb/Build/Products/Debug-iphoneos/MyApp/Frameworks/Fluffy_iOS.framework
...
error: /Users/Craig/projects/Fluffy/build/Debug-iphoneos/Fluffy_iOS.framework: No such file or directory
但是,查看我的框架的构建日志,我发现它实际上已经结束了:
/Users/Craig/Library/Developer/Xcode/DerivedData/Fluffy-fuuewsvogdkycegheyrsabkiicxc/Build/Products/Debug-iphonesimulator/Fluffy_iOS.framework
我想这是有道理的-DerivedData一段时间以来一直是所有内置产品的默认位置。
当我查看预期的build文件夹时,它没有太多,很多是旧的,并且都与Debug配置无关:
所以我的问题是:为什么在将“build设置”要求相对于项目放置在
DerivedData
文件夹中时,为什么将我的框架放置在build
文件夹中?是否完全引用了这些参数(按配置的构建产品路径等)?而且,我应该怎么做才能调和这一点?我的应用程序如何知道如何以可扩展的方式在框架的正确DerivedData文件夹中查找正确的配置(调试与发行版),而无需手动指定其绝对路径就能正常工作?
最佳答案
好的,所以我想出了解决方法。这假定您具有工作空间,并且已将框架作为项目包含在工作空间中,并且您正尝试从包含框架的工作空间中的另一个项目中构建产品。
您需要做的是找出框架的构建位置。它通常是DeriveData
目录下的一个疯狂目录。转到Finder并找到您刚刚尝试构建的配置。
在产品目标的General
设置中,在Embedded Binaries
下,将该文件拖入其中。现在应该将其放置在Project Navigator
中。您还应该在Linked Frameworks and Libraries
下的Embedded Binaries
中看到它。
转到Project Navigator
并选择文件,然后在File Inspector
下查看它。在那里,将Location
更改为Relative to Build Products
。
在目标的Build Settings
中,对于Framework Search Paths
,添加$(BUILT_PRODUCTS_DIR)
并使其递归。删除添加框架时自动添加的条目。这将是其中包含DerivedData路径的显式路径。
进行彻底清理,并删除DerivedData
目录,以备不时之需。
build 。
现在,您应该看到该框架变黑,它应该可以正常工作。