如何将旧版构建系统与 Xcode 10 的“xcodebuild”一起使用?

Posted

技术标签:

【中文标题】如何将旧版构建系统与 Xcode 10 的“xcodebuild”一起使用?【英文标题】:How can I use the legacy build system with Xcode 10's `xcodebuild`? 【发布时间】:2018-12-14 18:10:35 【问题描述】:

我想使用 Xcode 10 的新构建系统进行开发,但由于生成的 xcarchive 存在问题,我们在持续集成系统中的构建失败:xcarchive 中的 Info.plist 缺少ApplicationPropertieskey 和里面的信息!

事实证明,切换回旧版构建系统可以解决此问题。这可以在工作区设置中完成(文件 > 工作区设置... > 构建系统)。但我更愿意保留新的构建系统进行开发,只使用旧的构建系统进行 CI 构建。

有没有办法让xcodebuild 使用旧版构建系统而不修改工作区?

【问题讨论】:

【参考方案1】:

目前,我使用的是 Xcode 版本 12.0 (12A7209) 并按照以下步骤操作,然后您就可以使用旧版构建模式了:

    工作区设置:

    设置旧版构建模式:

【讨论】:

CI怎么做 如果我们将其更改为已弃用的,更改它是否是件好事? @sejn,这个答案不是关于好不好,如果有人需要将构建类型更改为旧版本,这就是方法。 @AmerllicA 更改为旧版构建系统后出现以下错误。启用 SWIFT_ENABLE_LIBRARY_EVOLUTION 时,旧版构建系统不支持使用 Swift 构建项目。【参考方案2】:

将构建系统从 New Build System 更改为 Legacy Build System,反之亦然。

打开 Xcode --> 选择文件 --> 选择工作区设置

Change Build System to Legacy Build System from New Build System --> 点击完成。

【讨论】:

谢谢,但正如问题中所述,这是已知的。这个问题是关于xcodebuild 工具的。 在 Xcode 11 中,这个菜单项叫做 Project Settings【参考方案3】:

要选择 Xcode 10 的构建系统:

在 Xcode 中,转到:文件 -> 项目设置(或工作区设置)-> 构建系统

您可以从那里选择New Build System (Default)Legacy Build System

希望这个帮助可以让这更容易。

【讨论】:

这将更改项目设置。问题是关于 xcodebuild 使用旧版构建系统 无需修改工作区 真正的 Niko,感谢您的澄清。希望这会帮助那些确实需要它的人。【参考方案4】:

为了扩展 DarkDust 的 answer,如果您使用 fastlane 进行自动构建,可以通过 xcargs 传递其他参数,例如 UseModernBuildSystem

build_app(
   // ... other necessary parameters,
   xcargs: "-UseModernBuildSystem=NO"
)

【讨论】:

【参考方案5】:

xcodebuild-UseModernBuildSystem=<value> 中有一个(尚未记录的)标志。该值可以是 0NO 以使用旧版(“原始”)构建系统,也可以是 1YES 以使用新的构建系统。

例如:

xcodebuild -workspace Foo.xcworkspace -scheme Bar -configuration Release -archivePath /path/to/Foo.xcarchive clean archive -UseModernBuildSystem=NO

-UseNewBuildSystem=<value> 似乎也可以工作;这个标志是在 Xcode 9 中引入的,但我怀疑UseModernBuildSystem 将成为这个的“官方”标志。)

【讨论】:

您认为这是 Xcode 的错误还是 plist 中缺少该条目的其他原因? @cynistersix:我想是的,是的。新的构建系统似乎还有其他问题:例如,如果您使用 CocoaPods 并更改 pod 中的文件,则新的构建系统无法正确重新编译它,您必须先清理项目。我的猜测是,由于新的构建系统是一种改进,但并不完美,但他们还保留了对旧版构建系统的支持。

以上是关于如何将旧版构建系统与 Xcode 10 的“xcodebuild”一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

IOS 的 Flutter 应用程序,是不是可以在没有 Xcode 的情况下设置 IOS“旧版构建系统”?

如何将旧版 SQL BigQuery 转换为标准 SQL?

关于将旧版 ASP 站点与 .NET 2.0 混合使用的建议

将旧版 SQL 查询转换为标准 SQL

如何调试旧版Mac OS X的应用程序?

安卓系统手机的软件更新,是直接更新会将旧版的覆盖?还是另外安装一套?