03
第一小时完成两个 Xcode 的隔离共存
下载完成后,先给两个应用使用明确名称,例如:
/Applications/.app
/Applications/.app
名称只是示例,实际路径应替换成你自己的应用路径。重点不是文件名本身,而是不要让脚本、终端和人工操作无法分辨当前使用的版本。
图形界面打开项目时,分别从对应应用启动。命令行构建则优先使用一次性环境变量,而不是立即改写整台 Mac 的全局默认值:
DEVELOPER_DIR="/Applications/.app/Contents/Developer" \
xcodebuild -version
DEVELOPER_DIR="/Applications/.app/Contents/Developer" \
xcodebuild -version
两条命令都应返回预期版本。只有确认结果无误后,才考虑使用:
sudo xcode-select --switch "/Applications/.app/Contents/Developer"
全局切换前,先记录原始状态:
xcode-select --print-path
xcodebuild -version
xcrun simctl list
自动化任务不要依赖“某次人工切换后的全局状态”。对于 fastlane、GitHub Actions Runner、LaunchAgent 或自建 iOS 打包服务器,应在脚本内部显式设置 Xcode 路径,并把日志中的 Xcode 版本写入构建产物。
同时检查模拟器是否被错误复用。Xcode 27 Beta 新增的 iOS 27 运行时应只用于兼容性验证;生产基线使用的模拟器、构建缓存和 DerivedData 最好分开,避免 Beta 编译结果污染下一次正式 Archive。