如何让Xcode跨电脑构建时将项目二进制文件输出至固定位置?
解决Xcode跨电脑编译输出路径不一致的问题
方法一:指定固定编译输出路径(推荐)
直接让Xcode把编译产物输出到自定义的固定路径,彻底避开DerivedData里的随机串问题,有两种实现方式:
1. Xcode图形界面配置
- 打开项目,点击顶部菜单栏的
Project->Build Settings - 在搜索框输入
Build Products Path,将默认值修改为项目内的相对路径(比如$(SRCROOT)/Build/Products),产物会直接生成在项目根目录的Build文件夹下 - 或者搜索
Derived Data Location,选择Custom并指定固定路径,整个DerivedData目录都会放到这里,避免随机串生成
2. xcodebuild命令行指定
执行构建命令时,通过-derivedDataPath参数指定自定义的DerivedData路径,示例:
xcodebuild -project YourProject.xcodeproj -scheme YourScheme -configuration Debug -derivedDataPath ./Build/DerivedData
编译完成后,产物会在./Build/DerivedData/Build/Products/Debug/ProjectName路径下,跨电脑路径完全一致。
方法二:获取DerivedData中的随机串(无需单独提取,直接拿产物路径更高效)
如果必须使用默认的DerivedData路径,可以直接提取最终产物的完整路径,无需单独处理随机串:
1. 通过xcodebuild构建设置提取
使用-showBuildSettings参数输出所有构建配置,从中提取BUILT_PRODUCTS_DIR(产物所在目录):
# 获取Debug配置的产物目录 PRODUCT_DIR=$(xcodebuild -project YourProject.xcodeproj -scheme YourScheme -configuration Debug -showBuildSettings | grep -m 1 "BUILT_PRODUCTS_DIR" | awk -F ' = ' '{print $2}') # 拼接二进制文件路径 BINARY_PATH="$PRODUCT_DIR/ProjectName"
这个方法直接拿到最终路径,完全不需要关心中间的随机串,跨电脑通用。
2. 通过DerivedData目录搜索获取
如果需要定位到包含随机串的DerivedData根目录,可通过目录匹配搜索:
# 获取项目对应的DerivedData根路径 DERIVED_DATA_ROOT=$(find ~/Library/Developer/Xcode/DerivedData -name "ProjectName-*" -type d | head -n 1) # 拼接产物路径 PRODUCT_PATH="$DERIVED_DATA_ROOT/Build/Products/Debug/ProjectName"
不过这种方法依赖本地DerivedData目录的存在,不如第一种命令行方式稳定。
内容的提问来源于stack exchange,提问作者c00000fd
相关产品推荐
相关产品推荐

