Flutter项目iOS部署目标未同步Podfile指定版本问题
核心原因
Podfile的
platform设置仅约束依赖库platform :ios, '13.0'的作用是告诉CocoaPods,所有引入的第三方Pod库最低支持iOS 13.0,但它不会自动修改你的主项目(Runner)的Deployment Target——主项目的部署目标由Flutter工具链或Xcode项目本身的配置控制。Flutter默认最低支持iOS 11.0
Flutter项目初始化时,主Runner目标的Deployment Target默认被设置为iOS 11.0,这个配置会写入ios/Flutter/Generated.xcconfig或Xcode项目的Build Settings中,优先级高于Podfile的设置。你的
post_install脚本没修改主项目
当前脚本仅遍历修改了installer.pods_project.targets(也就是Pods依赖库的所有目标),但完全没触及主Runner项目的配置,所以Xcode显示的主项目部署目标还是默认的11.0。
解决方法
方法1:手动在Xcode中修改
打开ios/Runner.xcodeproj,选中Runner目标,进入Build Settings,找到Deployment Target,将所有配置(Debug/Profile/Release)的版本统一改为13.0即可。
方法2:通过Podfile脚本自动同步
修改你的post_install脚本,加入修改主Runner项目的逻辑,这样每次pod install都会自动同步版本:
post_install do |installer| # 处理Pods依赖库的部署目标 installer.pods_project.targets.each do |target| flutter_additional_ios_build_settings(target) target.build_configurations.each do |config| config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '13.0' config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [ '$(inherited)', 'PERMISSION_CAMERA=1', 'PERMISSION_MEDIA_LIBRARY=1', 'PERMISSION_PHOTOS=1', 'PERMISSION_NOTIFICATIONS=1', ] config.build_settings['ONLY_ACTIVE_ARCH'] = 'YES' config.build_settings['ARCHS[sdk=iphonesimulator*]'] = `uname -m` config.build_settings['EXPANDED_CODE_SIGN_IDENTITY'] = "" config.build_settings['CODE_SIGNING_REQUIRED'] = "NO" config.build_settings['CODE_SIGNING_ALLOWED'] = "NO" end end # 修改主Runner项目的部署目标 main_project = Xcodeproj::Project.open('Runner.xcodeproj') main_project.targets.each do |target| next unless target.name == 'Runner' target.build_configurations.each do |config| config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '13.0' end end main_project.save end
修改后执行以下命令生效:
flutter clean && flutter pub get && cd ios && pod install
额外检查
可以打开ios/Flutter/Generated.xcconfig文件,确认里面的IPHONEOS_DEPLOYMENT_TARGET是否为13.0,如果不是,上面的脚本会覆盖它,或者你也可以手动修改这个文件(注意:Flutter在执行flutter pub get时可能会重置该文件,所以脚本方法更可靠)。
内容的提问来源于stack exchange,提问作者Queen Ellery

