Xcode 10.2、Swift 5、Command compileSwift 在使用 Release Scheme 构建程序时失败
Posted
技术标签:
【中文标题】Xcode 10.2、Swift 5、Command compileSwift 在使用 Release Scheme 构建程序时失败【英文标题】:Xcode 10.2, Swift 5, Command compileSwift failed while build the program with Release Scheme 【发布时间】:2019-03-26 07:23:30 【问题描述】:我正在使用 Xcode 10.2、Swift 5。
使用 Debug 方案,没有问题发生,但使用 Release 方案,当我构建或存档时,它显示 Command compileSwift 失败,退出代码为非零。
我已尝试删除 DerivedData / Clean / pod deintegrate & pod install & pod update。这些都不起作用。
【问题讨论】:
能否分享一下您正在使用的 pod 的名称 尝试从 Podfile 中移除混乱的 Pod 并执行 Pod 安装。 ** 如果这不起作用,请尝试:** 清理并构建项目。再次将 Pod 添加到 Podfile 并执行 pod install。如果可能,请使用真实设备再次清理并构建项目。 ** 如果上述两个不起作用,请尝试此操作:** 确保将 Swift 版本设置为您当前的版本,然后 pod deintegrate、pod install、修复此问题 这里是 pod 列表:Alamofire、Kingfisher、SwiftyJSON、SnapKit、SwifterSwift、LightBox @shivi_shub # pod 'Alamofire' # pod 'Kingfisher' # pod 'SwiftyJSON' # pod 'SnapKit' pod 'DeviceKit' pod 'PKHUD' pod 'FMDB' # pod 'SwifterSwift' pod 'Tabman', '~> 2.2' pod 'FLEX', '~> 2.0' pod 'MJRefresh' pod 'UITextView+Placeholder' pod 'Bugly' # pod 'Lightbox' pod 'FSCalendar' pod 'RxSwift', '~> 4.0' pod ' RxCocoa', '~> 4.0' 这是我正在使用的所有 pod 我认为您的 pod 与 swift 5 不兼容 【参考方案1】:对于我的项目,问题与 pod Cache
有关,当 Optimization Level
for Release
设置为 Optimize for Speed [-O]
时会出错。我再次将Compilation Mode
设置为Whole Module
并在pod 文件中设置了pod 的优化级别:
post_install do |installer|
installer.pods_project.targets.each do |target|
# Cache pod does not accept optimization level '-O', causing Bus 10 error. Use '-Osize' or '-Onone'
if target.name == 'Cache'
target.build_configurations.each do |config|
level = '-Osize'
config.build_settings['SWIFT_OPTIMIZATION_LEVEL'] = level
puts "Set #target.name #config.name to Optimization Level #level"
end
end
end
end
参考:https://github.com/hyperoslo/Cache/issues/233#issuecomment-477749560
【讨论】:
【参考方案2】:我解决了这个问题,方法是转到 Pods Project,然后转到构建设置并将 Compilation Mode 设置为 Incremental 以进行 Release强>。然后清理并归档,应该可以正常编译了。
【讨论】:
这行得通,但构建存档需要太多时间。【参考方案3】:所以我在将我的项目更新到 Swift 5 时遇到了同样的问题。 出于某种原因,Cocoapods(最新版本,1.6.1)将某些 pod 的 SWIFT_VERSION 设置为 Swift 5,即使它们作为 Swift 4、4.1、4.2 pod 发布也是如此。 所以我不得不添加一个安装后脚本,像这样设置 swift 的更正版本
post_install do |installer|
installer.pods_project.targets.each do |target|
if target.name == 'CryptoSwift' || target.name == 'SwiftyBeaver'
target.build_configurations.each do |config|
config.build_settings['SWIFT_VERSION'] = '4.2'
end
end
end
end
【讨论】:
我已经手动将Pod Project的Swift Language Version的target全部设置为4.2,我自己的项目也是这样,但是还是不行。【参考方案4】:升级到 Xcode 10.2 后我遇到了同样的问题。按照以下步骤操作后,它对我有用:
-
更新 pod
清理项目文件夹
将 Pods 项目的 Swift Language Version 更改为 Unspecified 并且(如 @Neil Faulkner 所建议)将 Compilation Mode 更改为 Incremental强>
【讨论】:
【参考方案5】:我必须将“Swift Compiler - Code Generation”中的“Optimization Level”设置为“Optimize for speed”中的“Release”-“No Optimization [-Onone]”,以使缓存通过存档。
与 SwiftyBeaver 相同
这似乎是与 Xcode 10.2 相关的问题。其他 pod 项目似乎也可以使用优化,例如 Toucan 或 XCGLogger。
【讨论】:
【参考方案6】:在我的情况下,它可能只是因为我在构建项目时再次运行项目而出现。 所以我所做的不仅是清理,而且还使用文件夹清理我的项目
SHITF + ALT + COMMAND + K
我还删除了派生数据,项目重新启动并运行。
【讨论】:
【参考方案7】:您可以按照以下步骤操作...
-
确保将 Swift 版本更改为当前版本。
更新您的所有 pod。
清除 Xcode 的所有派生数据。
现在重新启动您的 Mac。
你得到所有这些错误只是因为 pods..所以要么你需要更新你正在使用的每个 pod。
【讨论】:
感谢您的回答,但我已经尝试了所有这些步骤,它对我不起作用。以上是关于Xcode 10.2、Swift 5、Command compileSwift 在使用 Release Scheme 构建程序时失败的主要内容,如果未能解决你的问题,请参考以下文章
在 Xcode 10.2 上的 Swift4.2 中插入 NSManagedObject 后,我会立即收到 Xcode 构建错误