仅构建“通用二进制框架”进行发布分发时遇到以下错误。在调试或发布模式下构建“非通用”方案时,可以使用相同的项目和设置。
项目使用 Objective-C 和 Xcode 11 GM (11A419c)。现在,更新到 Xcode 11 GM Seed 2 (11A420a)。
错误:访问构建数据库“/Users/john.doe/Library/Developer/Xcode/DerivedData/FrameworkSDK-esxhqchxkdevuiapyebthsdscpje/Build/Intermediates.noindex/XCBuildData/build.db”:磁盘I/O错误
使用脚本中的以下
build command
:
xcodebuild -workspace ${PROJECT_NAME}.xcworkspace -scheme ${PROJECT_NAME} -sdk iphonesimulator -configuration ${CONFIGURATION} only_active_arch=no defines_module=yes clean build CONFIGURATION_BUILD_DIR=${BUILD_DIR}/${CONFIGURATION}-iphonesimulator 2>&1
尝试了几个步骤:完成清理、pod更新以及Xcode 10的相关错误和链接帖子中提到的步骤 - 无法解决此问题
此问题没有答案:
为什么会出现“访问构建数据库磁盘I/O错误”的错误?
Command Line Tools
确保使用正确版本的
Command Line Tools
(xcodebuild),可以完全干净并构建全新的通用框架。该项目正在使用New Build System (Default)
。它还适用于 Xcode 11 GM - Build 11A419c(种子 1)。
使用以下命令确保正确链接:
xcodebuild -version
Xcode 11.0
Build version 11A419c
之前用的是旧的
Xcode10.2
xcodebuild
。
这不是一个好的修复,因为它使用
Legacy Build System
而不是带有 Xcode 11 的现代系统。
对于通用框架项目,一种选择是使用
Legacy Build System
和 Shared Project Settings
。
尝试使用未记录的
xcodebuild
参数-UseModernBuildSystem=NO
,但没有用。 [正在修复命令行,将更新]
相关发行说明:对于 GM-2 种子:2019 年 9 月 16 日发布 Build 11A420a
XCFramework 可以捆绑二进制框架或 适用于多个平台的库 - 包括 iOS 设备、iOS 模拟器、 和 Mac Catalyst — 集成到单个可分发的 .xcframework 捆绑包中 您的开发人员可以在自己的应用程序中使用。一个 .xcframework 包可以添加到 Xcode 目标的链接库中 阶段和 Xcode 使用正确的平台版本的包含 构建时的框架或库。框架的创建是 使用 xcodebuild -create-xcframework 从命令行支持。 捆绑在 XCFramework 中的框架或库应该使用以下命令构建 Build Libraries for Distribution 构建设置设置为 YES。 (49948269)
我在使用 XCode 14.1 构建项目时遇到了同样的问题。我将“-衍生数据路径../衍生数据”添加到构建命令中,并且它的构建没有任何问题。希望这能有所帮助。
xcodebuild -sheme YourSheme -project YourProject.xcodeproj -sdk iphoneos -configuration YourConfiguration -derivedDataPath ../derived_data clean build"
如果您的 Flutter iOS 构建遇到问题,以下是我用于清除 Xcode 的派生数据、清理 Flutter 构建以及重建项目的步骤:
在终端中运行以下命令来清除Xcode的导出数据:
rm -rf ~/Library/Developer/Xcode/DerivedData/*
清理 Flutter 项目并删除缓存的 iOS 依赖项:
flutter clean
导航到
ios
文件夹并清理 CocoaPods 缓存:
cd ios
pod cache clean --all
rm -rf Pods Podfile.lock
返回项目根目录并安装依赖项:
cd ..
flutter pub get
最后,重建并运行您的项目:
flutter run
这些步骤应确保您的 Flutter iOS 构建重新开始。