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

Flutter应用在iOS 16设备启动即崩溃,iOS 17正常求助

问题:Flutter应用在iOS 16闪退但iOS 17正常

我开发的Flutter应用上传至App Store后,iOS 17设备下载运行完全正常,但iOS 16设备打开即立即闪退。已经更新所有依赖库、尝试修改代码,问题仍未解决,给客户对接带来不少麻烦。

pubspec.yaml内容

version: 6.5.2+27

environment:
  sdk: '>=2.18.4 <3.0.0'

dependencies:
  flutter:
    sdk: flutter

  cupertino_icons: ^1.0.2
  font_awesome_flutter: ^10.1.0
  easy_localization: ^3.0.0
  http: ^1.1.0
  carousel_slider: ^4.1.1
  hive: ^2.0.4
  hive_flutter: ^1.1.0
  url_launcher: ^6.0.20
  lazy_load_scrollview: ^1.3.0
  device_info_plus: ^9.1.0
  flutter_offline: ^3.0.0
  data_connection_checker_tv: ^0.3.5-nullsafety
  firebase_dynamic_links: ^5.0.4
  firebase_messaging: ^14.0.4
  firebase_core: ^2.1.1
  flutter_local_notifications: ^9.9.1
  curved_navigation_bar: ^1.0.3
  flutter_html: ^3.0.0-alpha.5
  package_info_plus: ^4.2.0
  get: ^4.6.1
  lottie: ^2.7.0
  cached_network_image: ^3.2.2
  get_storage: ^2.0.3
  flutter_cache_manager: ^3.3.0
  dio: ^5.3.3

dev_dependencies:
  flutter_test:
    sdk: flutter

  flutter_lints: ^3.0.1
  flutter_launcher_icons: ^0.13.1

flutter_icons:
  android: "launcher_icon"
  ios: true
  remove_alpha_ios: true
  image_path: "assets/images/logo.png"

flutter:

  uses-material-design: true

  assets:
    - assets/images/
    - lang/

  fonts:
    - family: Tajawal
      fonts:
        - asset: assets/fonts/Tajawal-Black.ttf
        - asset: assets/fonts/Tajawal-Medium.ttf
          weight: 500
        - asset: assets/fonts/Tajawal-ExtraBold.ttf
          weight: 600
        - asset: assets/fonts/Tajawal-Bold.ttf
          weight: 700

main.dart入口代码

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Hive.initFlutter();
  await Hive.openBox("user");
  await Firebase.initializeApp();
  await SystemChrome.setPreferredOrientations(
      [DeviceOrientation.portraitUp, DeviceOrientation.portraitDown]);
  await EasyLocalization.ensureInitialized();
  HttpOverrides.global = MyHttpOverrides();
  runApp(
    EasyLocalization(
      supportedLocales: const [Locale('ar')],
      path: 'lang', // <-- change patch to your
      fallbackLocale: const Locale('ar'),
      child: const MyApp(),
    ),
  );
}

class MyHttpOverrides extends HttpOverrides {
  @override
  HttpClient createHttpClient(SecurityContext? context) {
    return super.createHttpClient(context)
      ..badCertificateCallback =
          (X509Certificate cert, String host, int port) => true;
  }
}

排查建议

  • 优先获取iOS 16设备的闪退日志:通过Xcode的Organizer连接设备,查看崩溃报告的堆栈信息,这是定位问题的核心依据。
  • 检查依赖库的iOS版本兼容性:部分依赖如device_info_plus: ^9.1.0、firebase_messaging: ^14.0.4可能对iOS 16及以下存在适配问题,查看对应库的文档,确认最低支持iOS版本,必要时降级到兼容版本。
  • 验证Flutter SDK兼容性:当前SDK范围是>=2.18.4 <3.0.0,旧版本Flutter在适配iOS 17后可能出现iOS 16兼容问题,尝试升级到Flutter 3.x稳定版(需同步调整SDK范围)。
  • 给初始化步骤添加错误捕获:用try-catch包裹Hive、Firebase等异步初始化操作,排查是否存在未捕获的异常导致闪退:
    try {
      await Hive.initFlutter();
      await Hive.openBox("user");
    } catch(e) {
      print("Hive初始化错误: $e");
    }
    try {
      await Firebase.initializeApp();
    } catch(e) {
      print("Firebase初始化错误: $e");
    }
    
  • 检查iOS打包配置:确认Xcode项目的Deployment Target是否设置为iOS 16或更低,同时检查Info.plist中的权限隐私描述是否完整,iOS 16对部分权限的要求与iOS 17存在差异。
  • 测试Ad Hoc包:直接用Xcode给iOS 16设备打Ad Hoc包安装测试,获取更精准的错误信息,App Store包的闪退原因可能与本地调试包不同。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 12:56:19