升级Xcode与iOS17后Flutter应用遇DT_TOOLCHAIN_DIR错误求解决方案
解决Xcode 15/iOS 17下Flutter应用的DT_TOOLCHAIN_DIR错误
修改Podfile的post_install钩子
在现有post_install代码块中添加修复逻辑,遍历所有项目target的构建配置,将旧环境变量DT_TOOLCHAIN_DIR替换为Xcode 15要求的TOOLCHAIN_DIR。
修改后的完整post_install部分代码如下:
post_install do |installer| installer.generated_projects.each do |project| project.targets.each do |target| target.build_configurations.each do |config| config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '13.0' # 修复DT_TOOLCHAIN_DIR错误 if config.build_settings['LIBRARY_SEARCH_PATHS'] config.build_settings['LIBRARY_SEARCH_PATHS'] = config.build_settings['LIBRARY_SEARCH_PATHS'].map do |path| path.gsub(/DT_TOOLCHAIN_DIR/, 'TOOLCHAIN_DIR') end end # 原有的权限预处理定义 config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [ '$(inherited)', ## dart: PermissionGroup.calendar # 'PERMISSION_EVENTS=1', ## dart: PermissionGroup.reminders # 'PERMISSION_REMINDERS=1', ## dart: PermissionGroup.contacts # 'PERMISSION_CONTACTS=1', ## dart: PermissionGroup.camera 'PERMISSION_CAMERA=1', ## dart: PermissionGroup.microphone # 'PERMISSION_MICROPHONE=1', ## dart: PermissionGroup.speech # 'PERMISSION_SPEECH_RECOGNIZER=1', ## dart: PermissionGroup.photos # 'PERMISSION_PHOTOS=1', ## dart: [PermissionGroup.location, PermissionGroup.locationAlways, PermissionGroup.locationWhenInUse] # 'PERMISSION_LOCATION=1', ## dart: PermissionGroup.notification # 'PERMISSION_NOTIFICATIONS=1', ## dart: PermissionGroup.mediaLibrary # 'PERMISSION_MEDIA_LIBRARY=1', ## dart: PermissionGroup.sensors # 'PERMISSION_SENSORS=1', ## dart: PermissionGroup.bluetooth # 'PERMISSION_BLUETOOTH=1', ## dart: PermissionGroup.appTrackingTransparency # 'PERMISSION_APP_TRACKING_TRANSPARENCY=1', ## dart: PermissionGroup.criticalAlerts # 'PERMISSION_CRITICAL_ALERTS=1' ] end end end installer.pods_project.targets.each do |target| flutter_additional_ios_build_settings(target) # 修复Pods项目中的DT_TOOLCHAIN_DIR问题 target.build_configurations.each do |config| if config.build_settings['LIBRARY_SEARCH_PATHS'] config.build_settings['LIBRARY_SEARCH_PATHS'] = config.build_settings['LIBRARY_SEARCH_PATHS'].map do |path| path.gsub(/DT_TOOLCHAIN_DIR/, 'TOOLCHAIN_DIR') end end end end end
后续操作步骤
- 保存修改后的Podfile
- 执行命令重新安装依赖:
pod install - 清理Flutter项目缓存:
flutter clean - 重新运行应用:
flutter run
原理说明
Xcode 15弃用了DT_TOOLCHAIN_DIR环境变量,改用TOOLCHAIN_DIR,但部分第三方Pods或Flutter自动生成的配置仍在使用旧变量,导致构建时路径解析错误。通过在post_install钩子中批量替换所有构建配置里的旧变量,即可适配新的Xcode环境。
内容的提问来源于stack exchange,提问作者user19051554
相关产品推荐
相关产品推荐

