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”以外的构建配置:没有这样的模块的主要内容,如果未能解决你的问题,请参考以下文章
AlamofireObjectMapper.swift 第 74 行适用于 Playground,但不适用于设备或模拟器
在 Swift 中显示 UITextField 的底部边框不适用于约束。