如何将旧版构建系统与 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
缺少ApplicationProperties
key 和里面的信息!
事实证明,切换回旧版构建系统可以解决此问题。这可以在工作区设置中完成(文件 > 工作区设置... > 构建系统)。但我更愿意保留新的构建系统进行开发,只使用旧的构建系统进行 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>
中有一个(尚未记录的)标志。该值可以是 0
或 NO
以使用旧版(“原始”)构建系统,也可以是 1
或 YES
以使用新的构建系统。
例如:
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“旧版构建系统”?