XCode10下使用原来的编译系统
当升级XCode到10版本之后,在archive时遇到报错Cycle inside
这是因为,XCode10下有了一套新的编译系统,并且是默认使用的。新的编译系统对工程有了更严格的检查。所以,会导致出现使用XCode9可以编译通过的工程,在XCode10下无法编译通过。
简单的解决方式可以使用如下的方式更改XCode10的编译系统。仍然使用旧版的编译系统。
- 选择
File-workspace setting

xcode_workspace_setting.png
- 在弹出框中选择
Legacy Build System

xcode_build_system.png
xcodebuild使用旧版本编译系统
上面的方式只更改了手动通过XCode打包时编译系统。使用xcodebuild命令进行打包时的编译环境仍然使用的是最新的编译系统。
可以通过在xcodebuild命令后通过-UseModernBuildSystem=<value>参数来指定所使用的构建系统。value=0 或 value=NO表示使用旧版本构建系统(Legacy build system)。value=1或value=YES表示使用新的构建系统。
如下所示
xcodebuild archive -workspace Toon.xcworkspace -scheme Toon -configuration Release -archivePath ~/Desktop/Toon.xcarchive CODE_SIGN_IDENTITY="iPhone Distribution: Beijing Syswin Internet Technology Co. Ltd." PROVISIONING_PROFILE="d73920ec-9178-4f26-a0b8-c89ca2bbea6d" -UseModernBuildSystem=NO
多XCode时,更改xcodebuild所使用的XCode版本
当安装了多个版本的XCode时,可以通过如下方式选择xcodebuild所使用的xcode版本的
打开xcode偏好设置,选择location

xcode_command_line_tool_select.png
或 可以通过xcode-select命令进行选择
参考资料
http://www.skyfox.org/modify-legacy-or-new-build-system.html