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 构建程序时失败的主要内容,如果未能解决你的问题,请参考以下文章

Swift 5

Xcode 10.2

在 Xcode 10.2 上的 Swift4.2 中插入 NSManagedObject 后,我​​会立即收到 Xcode 构建错误

子类中的委托方法有时不使用 Swift 5 编译器调用

Swift 5 Type Metadata 详解

针对 Objective-C 枚举的新 Swift 5 警告:如何摆脱它们?