Swift iOS 模块未部署到预期的调试目录

2023-11-25

我有一个用 Swift 编写的模块/框架,打算在 iOS 上使用。当我尝试将框架包含在我的应用程序中时,我首先注意到构建阶段有一些红色的“未找到”提示:

enter image description here

但是,该项目builds很好 - 找到了目标依赖项,因此不存在编译问题。这只是生成的框架 - 果然,在启动时,我遇到了链接器错误,它找不到图像。查看构建日志,它在这里:

/Users/Craig/Projects/Fluffy/build/Debug-iphoneos/

这是有道理的 - 这就是我的框架的构建设置中定义的内容:

enter image description here

但复制失败,因为源框架不存在:

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

但是,查看我的框架的构建日志,我发现它是actually到这里结束:

/Users/Craig/Library/Developer/Xcode/DerivedData/Fluffy-fuuewsvogdkycegheyrsabkiicxc/Build/Products/Debug-iphonesimulator/Fluffy_iOS.framework

我认为这是有道理的 - DerivedData 一段时间以来一直是任何构建产品的默认位置。

当我看一下expectedbuild 文件夹,内容不多,很多都是旧的,而且都与 Debug 配置无关:

enter image description here

所以我的问题是:为什么我的框架被放置在DerivedData文件夹,当它似乎要求在构建设置中放置在build相对于项目的文件夹?是否完全参考了这些参数(每个配置构建产品路径等)?

而且,我应该怎么做才能协调这一点?我的应用程序如何知道以可扩展的方式在正确的 DerivedData 文件夹中查找框架、正确的配置(调试与发布),并且无需我手动指定其绝对路径就可以工作?


好的,所以我想出了如何解决这个问题。这假设您有工作区,并且已将框架作为项目包含在工作区中,并且您正在尝试从工作区中包含该框架的另一个项目构建产品。

您需要做的是找出框架是在哪里构建的。它通常是一些疯狂的目录DeriveData目录。转到 Finder 并找到您刚刚尝试构建的配置。

在产品目标中General设置,在Embedded Binaries,将该文件拖入其中。现在应该将其放置在Project Navigator。您还应该在Linked Frameworks and Libraries在下面Embedded Binaries.

前往Project Navigator并选择该文件并在下面查看它File Inspector。在那里,改变Location to Relative to Build Products.

在目标的Build Settings, for Framework Search Paths, add $(BUILT_PRODUCTS_DIR)并使之递归。删除添加框架时自动添加的条目。它将是一个包含 DerivedData 路径的显式路径。

进行深度清理并删除DerivedData目录以进行良好衡量。

Build.

您现在应该看到框架变黑并且它应该可以正常工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Swift iOS 模块未部署到预期的调试目录 的相关文章

随机推荐