flutter踩坑插件:Swift架构不兼容

最近接手一个老项目,净是遇到插件swift架构不兼容,报错如下:

复制代码
User-Defined Issue (Xcode): Unsupported Swift architecture
/Users/yiner/code/app/app/build/ios/Debug-iphonesimulator/url_launcher_ios/url_launcher_ios.framework/Headers/url_launcher_ios-Swift.h:325:1

User-Defined Issue (Xcode): Unsupported Swift architecture
/Users/yiner/code/app/app/build/ios/Debug-iphonesimulator/webview_flutter_wkwebview/webview_flutter_wkwebview.framework/Headers/webview_flutter_wkwebview-Swift.h:364:1

User-Defined Issue (Xcode): Unsupported Swift architecture
/Users/yiner/code/app/app/build/ios/Debug-iphonesimulator/shared_preferences_foundation/shared_preferences_foundation.framework/Headers/shared_preferences_foundation-Swift.h:330:1

User-Defined Issue (Xcode): Unsupported Swift architecture
/Users/yiner/code/app/app/build/ios/Debug-iphonesimulator/mobile_scanner/mobile_scanner.framework/Headers/mobile_scanner-Swift.h:340:1

User-Defined Issue (Xcode): Unsupported Swift architecture
/Users/yiner/code/app/app/build/ios/Debug-iphonesimulator/connectivity_plus/connectivity_plus.framework/Headers/connectivity_plus-Swift.h:337:1

User-Defined Issue (Xcode): Unsupported Swift architecture
/Users/yiner/code/app/app/build/ios/Debug-iphonesimulator/flutter_new_badger/flutter_new_badger.framework/Headers/flutter_new_badger-Swift.h:326:1

User-Defined Issue (Xcode): Unsupported Swift architecture
/Users/yiner/code/app/app/build/ios/Debug-iphonesimulator/path_provider_foundation/path_provider_foundation.framework/Headers/path_provider_foundation-Swift.h:324:1

Could not build the application for the simulator.
Error launching application on iPhone 16 Pro.

网上查一堆资料,也问了很多次AI都解决不了,也不知道啥问题,怀疑是mac 的m1、m2芯片的虚拟机和m4芯片的不一样,博主是M4。

废话不多说,下面是解决方案:

在ios下的Podfile文件中添加如下代码:

复制代码
# 添加以下配置来解决Swift架构问题
    target.build_configurations.each do |config|
      config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '15.6'
      config.build_settings['SWIFT_VERSION'] = '5.0'
      config.build_settings['ENABLE_BITCODE'] = 'NO'
      
      # 关键:排除模拟器的arm64架构
      config.build_settings['EXCLUDED_ARCHS[sdk=iphonesimulator*]'] = 'arm64'
      
      # 确保支持正确的架构
      config.build_settings['VALID_ARCHS'] = 'arm64 x86_64'
      config.build_settings['ONLY_ACTIVE_ARCH'] = 'NO'

然后完全清理并重建:

复制代码
# 停止所有Flutter进程
flutter devices
# 如果有设备在运行,先停止

# 清理Flutter缓存
flutter clean

# 删除iOS构建缓存
cd ios
rm -rf Pods Podfile.lock
rm -rf ~/Library/Developer/Xcode/DerivedData
cd ..

# 重新获取依赖
flutter pub get

# 重新安装Pods
cd ios
pod install --repo-update
cd ..

最后再运行,就OK了

我的完整Podfile:

复制代码
# Uncomment this line to define a global platform for your project
platform :ios, '15.6'

# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true'

project 'Runner', {
  'Debug' => :debug,
  'Profile' => :release,
  'Release' => :release,
}

def flutter_root
  generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__)
  unless File.exist?(generated_xcode_build_settings_path)
    raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first"
  end

  File.foreach(generated_xcode_build_settings_path) do |line|
    matches = line.match(/FLUTTER_ROOT\=(.*)/)
    return matches[1].strip if matches
  end
  raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get"
end

require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)

flutter_ios_podfile_setup

target 'Runner' do
  use_frameworks!
 

  flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
  target 'RunnerTests' do
    inherit! :search_paths
  end
end

post_install do |installer|
  installer.pods_project.targets.each do |target|
    flutter_additional_ios_build_settings(target)
    
    # 添加以下配置来解决Swift架构问题
    target.build_configurations.each do |config|
      config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '15.6'
      config.build_settings['SWIFT_VERSION'] = '5.0'
      config.build_settings['ENABLE_BITCODE'] = 'NO'
      
      # 关键:排除模拟器的arm64架构
      config.build_settings['EXCLUDED_ARCHS[sdk=iphonesimulator*]'] = 'arm64'
      
      # 确保支持正确的架构
      config.build_settings['VALID_ARCHS'] = 'arm64 x86_64'
      config.build_settings['ONLY_ACTIVE_ARCH'] = 'NO'
    end
  end
end
相关推荐
科技道人8 小时前
记录 默认置灰/禁用 app ‘Search Engine Selector‘ 的disable按钮
开发语言·前端·javascript
逝水无殇10 小时前
C# 异常处理详解
开发语言·后端·c#
玖玥拾12 小时前
C# 语言进阶(十五)C# 游戏服务端 MySQL 数据库
服务器·开发语言·网络·数据库·mysql·c#
铅笔侠_小龙虾12 小时前
Rust 学习目录
开发语言·学习·rust
云泽80813 小时前
从零吃透 C++ 异常:抛出捕获、栈展开、异常重抛与编码规范详解
开发语言·c++·代码规范
灯澜忆梦13 小时前
GO---可见性规则
开发语言·golang
逝水无殇13 小时前
C# 文件的输入与输出详解
开发语言·数据库·后端·c#
这是个栗子14 小时前
前端开发中的常用工具函数(八)
开发语言·前端·javascript
凤凰院凶涛QAQ14 小时前
《Java版数据结构 & 集合类剖析》栈与队列:“push/pop 是栈的灵魂,offer/poll 是队列的骨架——四组 API,两种人生”
java·开发语言·数据结构
研☆香14 小时前
为什么变量声明在赋值前也能使用?—— 深入理解 JavaScript 变量提升与作用域
开发语言·前端·javascript