Swift 框架不适用于名为“Debug”或“Release”以外的构建配置:没有这样的模块

Posted

技术标签:

【中文标题】Swift 框架不适用于名为“Debug”或“Release”以外的构建配置:没有这样的模块【英文标题】:Swift frameworks do not work with build configurations named other than 'Debug' or 'Release': No such module 【发布时间】:2014-11-22 06:19:17 【问题描述】:

每当我尝试使用名为“Debug”或“Release”以外的构建配置时,Xcode 突然找不到我的 Swift 框架。除了名称之外,这些配置完全相同(实际上,新配置是从工作的“调试”配置中复制而来的)。

Xcode 报告“没有这样的模块”

这似乎是一个非常奇怪的错误。肯定有人以前遇到过这种情况吗?我的谷歌搜索没有结果。有谁知道可能导致此问题的原因是什么?我很确定我正确添加了框架。

我制作了一个简短的截屏视频,向您展示我在做什么:http://www.screencast.com/t/zpgZ5ZYgvH

底线:

    确保项目当前使用第三方 Swift 框架构建 在项目/文件导航器中选择项目 在编辑器左侧边栏中选择 Targets 上方的项目,并确保您位于 Info 选项卡上 通过单击配置列表下方的 + 按钮并选择“复制 XXX 配置”来复制当前配置(可能是“调试”) 通过转到产品(菜单)> 方案 > 编辑方案...修改您的方案以使用新配置。 在左侧边栏中选择运行 在构建配置下选择您的新配置 尝试再次构建

您也可以下载示例项目:http://s000.tinyupload.com/?file_id=48797763216274271820

我正在运行 Xcode 6.0.1 (6A317) 和 Yosemite 10.10 (14A361c)。

【问题讨论】:

为你的努力+1 ;) @someotherguy 我也遇到了这个问题……有什么解决办法吗? 当我将同名的配置添加到框架时,它可以工作......所以在你的情况下,尝试将 Debug Original 添加到 Alamofire 项目...... @JohnGibb 尚无解决方案。 =/不错的收获!我很快就会试试看。 切题地说,我的理解是框架仅支持应​​用程序扩展,不支持代码重用。除非我错了(或者您将它用于应用程序扩展),否则这意味着 Apple 无论如何都会拒绝这样的应用程序。 【参考方案1】:

在目标的Build Settings 中添加以下Framework Search Path$(SYMROOT)/Release$(EFFECTIVE_PLATFORM_NAME) 并使其成为non-recursive

在我的情况下,这是针对 Alamofire,它作为 git 子模块添加到我的项目中。

可以在构建日志中看到框架正在正确构建,但我假设默认框架搜索路径是从方案名称派生的。 Alamofire 框架和 dSYM 文件位于Release-iphoneos/Release-iphonesimulator

这应该适用于任何 Swift 框架,只要它的方案名称是默认的。如果没有,请检查构建日志并相应地调整框架搜索路径。

【讨论】:

谢谢。我在任何地方都找不到解决方案,然后突然间我偶然发现了这个帖子,你的回答解决了我的问题! **这也适用于 Objective-C 子项目。还有..感谢您的回答! 太棒了,谢谢!这个问题让我很头疼。 在这个问题上浪费了这么多时间。感谢发帖!【参考方案2】:

我也遇到了这个问题,并通过将相同的配置名称添加到包含的 Alamofire 项目中来解决它。

我在主项目中的构建方案:

Alamofire 项目中的构建方案:

注意: 此外,请确保您的 ios 部署目标在两个项目中相同。

【讨论】:

感谢您的报告。不幸的是,这不是一个理想的解决方案。希望 Apple 尽快解决此问题。 谢谢!我还必须执行“清洁 (CAP+CMD+K)”才能使其正常工作。 谢谢。这为我节省了几个小时,我敢肯定。 @Antoine:谢谢!在上面的例子中,你有 Alamofire 框架项目,所以你可以更新构建配置,但是如果我们只为例如 HockeySDK.framework 编译了框架(没有项目),那么我们不能更新构建配置。如何处理这种情况?有什么想法吗? 我也必须这样做,更改框架搜索路径没有帮助。【参考方案3】:

如果您使用的是 CocoaPods,请尝试 pod install 这将生成一些带有您的配置名称的 .xcconfig 文件。清理您的构建文件夹并重新构建。

【讨论】:

如果你使用 CocoaPods,那确实是最好的选择! 我对 CocoaPods 也有同样的问题。事实上,我最初在使用 CocoaPods 时首先遇到了这个错误。出于这个问题的目的,我尝试在没有 CocoaPods 的情况下排除 CocoaPods 作为罪魁祸首。 我有同样的问题,这解决了问题。如果问题是由于 cocoapods 引起的,这将是一个有效的解决方案 我试过了,它似乎没有用。 CocoaLumberjack 是目前的罪魁祸首【参考方案4】:

如果您具有模块化结构(例如,应用程序使用框架将 UI、服务或业务逻辑与应用程序的主模块分离),则将新的构建配置添加到构建这些框架的每个子项目中。

在这种情况下,如果作者在他的工作空间中有服务框架,那么他也必须向它添加一个调试原始配置。然后当然是运行pod install

这就是我解决问题的方法。

【讨论】:

以上是关于Swift 框架不适用于名为“Debug”或“Release”以外的构建配置:没有这样的模块的主要内容,如果未能解决你的问题,请参考以下文章

Mixpanel 不适用于 swift

AlamofireObjectMapper.swift 第 74 行适用于 Playground,但不适用于设备或模拟器

在 Swift 中显示 UITextField 的底部边框不适用于约束。

文件嵌套不适用于类或共享库项目

Swift 和 TestFlight 适用于 iOS 8 但不适用于 iOS 7

Xaml实时编辑不适用于自定义解决方案配置