如何在Xcode Build Settings的Run Script阶段检测设备/模拟器并切换库
实现Xcode Run Script自动切换真机/模拟器适配库
核心思路
Xcode构建时会通过环境变量传递目标设备信息,我们可以读取SDK_NAME或PLATFORM_NAME判断真机/模拟器类型,再替换对应版本的库文件。
脚本实现步骤
- 定义真机、模拟器库的存放路径,以及项目中依赖库的目标路径
- 通过环境变量判断当前构建目标类型
- 根据判断结果替换目标路径下的库文件
完整脚本示例
#!/bin/bash # 配置你的库实际路径 REAL_DEVICE_LIB="${PROJECT_DIR}/Libs/RealDevice/YourLib.framework" SIMULATOR_LIB="${PROJECT_DIR}/Libs/Simulator/YourLib.framework" TARGET_LIB_DIR="${PROJECT_DIR}/YourApp/Deps/YourLib.framework" # 判断构建目标 if [[ "${SDK_NAME}" =~ ^iphoneos ]]; then echo "检测到真机构建,切换真机适配库" rm -rf "${TARGET_LIB_DIR}" cp -R "${REAL_DEVICE_LIB}" "${TARGET_LIB_DIR}" elif [[ "${SDK_NAME}" =~ ^iphonesimulator ]]; then echo "检测到模拟器构建,切换模拟器适配库" rm -rf "${TARGET_LIB_DIR}" cp -R "${SIMULATOR_LIB}" "${TARGET_LIB_DIR}" else echo "无法识别构建目标,保留当前库" fi
使用说明
- 路径替换:将脚本中三个路径变量替换为你项目的实际路径
- 添加到Xcode:进入项目
Build Phases,点击+选择New Run Script Phase,粘贴脚本,确保该阶段在Compile Sources之前执行 - 静态库适配:如果是
.a静态库,只需修改路径为对应.a文件路径即可,逻辑完全通用
关键环境变量说明
SDK_NAME:Xcode内置环境变量,真机构建时值为iphoneos开头,模拟器为iphonesimulator开头PLATFORM_NAME:替代选项,真机对应iphoneos,模拟器对应iphonesimulator,判断逻辑与SDK_NAME一致
额外优化建议
可以添加库文件存在性校验,避免因路径错误导致构建失败:
if [ ! -d "${REAL_DEVICE_LIB}" ]; then echo "错误:真机库路径不存在 ${REAL_DEVICE_LIB}" exit 1 fi if [ ! -d "${SIMULATOR_LIB}" ]; then echo "错误:模拟器库路径不存在 ${SIMULATOR_LIB}" exit 1 fi
内容的提问来源于stack exchange,提问作者zzheads
相关产品推荐
相关产品推荐

