You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xcode构建通用iOS Framework时报build.db磁盘I/O错误如何解决

报错原因

该磁盘I/O错误由Xcode新型构建系统的资源冲突导致:你脚本中串行执行了模拟器、真机两次xcodebuild构建任务,两个任务会争抢访问同一份构建数据库/Build/Intermediates.noindex/XCBuildData/build.db,读写冲突触发报错。

修复方案
  • 方案1:给xcodebuild指令添加独立派生数据路径参数,避免共享构建数据库
    修改脚本中两个xcodebuild构建指令,分别给每个构建任务指定独立的派生数据存储目录,规避路径参数为-derivedDataPath "./DerivedData_${SDK_NAME}",修改后的构建指令示例如下:
# 模拟器构建指令修改
xcodebuild BITCODE_GENERATION_MODE=bitcode -workspace "${PROJECTNAME}.xcworkspace" -scheme "${PROJECTNAME}" -sdk iphonesimulator -configuration "${CONFIGURATION}" clean build CONFIGURATION_BUILD_DIR="${BUILD_DIR}/${CONFIGURATION}-iphonesimulator" -derivedDataPath "./DerivedData_Simulator" 2>&1

# 真机构建指令修改
xcodebuild BITCODE_GENERATION_MODE=bitcode -workspace "${PROJECTNAME}.xcworkspace" -scheme "${PROJECTNAME}" -sdk iphoneos -configuration "${CONFIGURATION}" clean build CONFIGURATION_BUILD_DIR="${BUILD_DIR}/${CONFIGURATION}-iphoneos" -derivedDataPath "./DerivedData_iOS" 2>&1
  • 方案2:强制使用旧版构建系统
    在所有xcodebuild指令末尾添加-UseModernBuildSystem=NO参数,强制使用兼容度更高的旧版构建系统,构建过程不会生成共享的build.db文件,从根源避免冲突。

  • 方案3:清理残留构建缓存
    完全退出Xcode后,执行以下命令清理全局Xcode缓存后重新构建:

rm -rf ~/Library/Developer/Xcode/DerivedData
rm -rf ~/Library/Caches/com.apple.dt.Xcode
  • 方案4:替换为XCFramework构建方案(推荐)
    Xcode 11及以上版本支持直接构建XCFramework格式的通用包,无需手动合并模拟器和真机架构,完全规避上述构建冲突问题。
完整修改后脚本参考
######################
# Options
######################
REVEAL_ARCHIVE_IN_FINDER=true
FRAMEWORK_NAME="XXXX"
SIMULATOR_LIBRARY_PATH="${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${FRAMEWORK_NAME}.framework"
DEVICE_LIBRARY_PATH="${BUILD_DIR}/${CONFIGURATION}-iphoneos/${FRAMEWORK_NAME}.framework"
UNIVERSAL_LIBRARY_DIR="${BUILD_DIR}/${CONFIGURATION}-iphoneuniversal"
FRAMEWORK="${UNIVERSAL_LIBRARY_DIR}/${FRAMEWORK_NAME}.framework"
PROJECTNAME="XXXX"

######################
# Clean
######################
xcodebuild clean -workspace "${PROJECTNAME}.xcworkspace" -scheme "${PROJECTNAME}" 

######################
# Build Frameworks
######################
# 新增独立派生数据路径参数
xcodebuild BITCODE_GENERATION_MODE=bitcode -workspace "${PROJECTNAME}.xcworkspace" -scheme "${PROJECTNAME}" -sdk iphonesimulator -configuration "${CONFIGURATION}" clean build CONFIGURATION_BUILD_DIR="${BUILD_DIR}/${CONFIGURATION}-iphonesimulator" -derivedDataPath "./DerivedData_Simulator" 2>&1
xcodebuild BITCODE_GENERATION_MODE=bitcode -workspace "${PROJECTNAME}.xcworkspace" -scheme "${PROJECTNAME}" -sdk iphoneos -configuration "${CONFIGURATION}" clean build CONFIGURATION_BUILD_DIR="${BUILD_DIR}/${CONFIGURATION}-iphoneos" -derivedDataPath "./DerivedData_iOS" 2>&1

######################
# Create directory for universal
######################
rm -rf "${UNIVERSAL_LIBRARY_DIR}"
mkdir "${UNIVERSAL_LIBRARY_DIR}"
mkdir "${FRAMEWORK}"

######################
# Copy files Framework
######################
cp -r "${DEVICE_LIBRARY_PATH}/." "${FRAMEWORK}"

# 如需生成完整通用Framework需要补充lipo合并模拟器、真机二进制架构的代码

内容的提问来源于stack exchange,提问作者HariKarthick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 23:45:02