SwiftUI适配iOS16导航控制器引起的闪退

简介: SwiftUI适配iOS16导航控制器引起的闪退

当时iPhone14系列手机升级到iOS16.5.1系统以后,当用户登录后再次退出登录闪退货登录后退出登录闪退。

由于SwiftUI提倡用struct代替类,导致悲剧产生,闪退时无法打印是那个结构体(class类实现时会打印类名),因为是struct也没有deinit跟踪内存是否泄漏。开启僵尸进程打印只有一个这样的鬼话:

2023-06-30 19:52:42.637552+0800 xingqun_ios[4191:551916] *** -[_TtGC7SwiftUI41StyleContextSplitViewNavigationControllerVS_19SidebarStyleContext_ removeChildViewController:]: message sent to deallocated instance 0x10d02d000

定位闪退在main函数哪里。

iPhone14以下手机正常,只有iPhone14系列手机系统是iOS16才会出现。

经过三天个反复定位和查资料发现是iOS的导航栏变更产生的。iOS16要用NavigationStack代替NavigationView。

    var body: some View {
        if #available(iOS 16.0, *) {
            NavigationStack {
                VStack(spacing: 0) {
                    LoginTitleView(dismiss: .init(dismissAction: dismiss, type: .normal), from: .loginBySms) {
                        toPage = .toLoginPassword
                    }
                    phoneInput

                    // 新用户进入验证码注册页面 老用户进入验证码登录页面
                    switch loginModel.isNew {
                    case true: register
                    case false: loginByCode
                    default: Spacer()
                    }
                }
                .navigation(item: $toPage, destination: destination)
                .animation(.default, value: loginModel.isNew)
                .fullBackground(.white)
                .ignoresSafeArea(.keyboard, edges: .bottom)
            }
            .dismissKeyboard([.tap, .simulDrag])
            .noPaddingFullBackground(Color.white)
        } else {
            NavigationView {
                VStack(spacing: 0) {
                    LoginTitleView(dismiss: .init(dismissAction: dismiss, type: .normal), from: .loginBySms) {
                        toPage = .toLoginPassword
                    }
                    phoneInput

                    // 新用户进入验证码注册页面 老用户进入验证码登录页面
                    switch loginModel.isNew {
                    case true: register
                    case false: loginByCode
                    default: Spacer()
                    }
                }
                .navigation(item: $toPage, destination: destination)
                .animation(.default, value: loginModel.isNew)
                .fullBackground(.white)
                .ignoresSafeArea(.keyboard, edges: .bottom)
            }
            .dismissKeyboard([.tap, .simulDrag])
            .noPaddingFullBackground(Color.white)
        }
    }

闪退日志:


Exception Type:  EXC_BAD_ACCESS (SIGBUS)
Exception Subtype: KERN_PROTECTION_FAILURE at 0x0000001200000000
Exception Codes: 0x0000000000000002, 0x0000001200000000
VM Region Info: 0x1200000000 is in 0x1000000000-0x7000000000;  bytes after start: 8589934592  bytes before end: 403726925823
      REGION TYPE                 START - END      [ VSIZE] PRT/MAX SHRMOD  REGION DETAIL
      commpage (reserved)      fc0000000-1000000000 [  1.0G] ---/--- SM=NUL  ...(unallocated)
--->  GPU Carveout (reserved) 1000000000-7000000000 [384.0G] ---/--- SM=NUL  ...(unallocated)
      UNUSED SPACE AT END
Termination Reason: SIGNAL 10 Bus error: 10
Terminating Process: exc handler [638]

Triggered by Thread:  0

Thread 0 name:   Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libobjc.A.dylib                        0x1964fc414 lookUpImpOrForward + 64
1   libobjc.A.dylib                        0x1964f6cc4 _objc_msgSend_uncached + 68
2   UIKitCore                              0x19f6ca538 -[UIViewController dealloc] + 772
3   UIKitCore                              0x19f6c8160 -[UINavigationController dealloc] + 308
4   UIKitCore                              0x19f95112c -[_UISplitViewControllerColumnContents .cxx_destruct] + 44
5   libobjc.A.dylib                        0x1964f60a4 object_cxxDestructFromClass(objc_object*, objc_class*) + 116
6   libobjc.A.dylib                        0x1964fae00 objc_destructInstance + 80
7   libobjc.A.dylib                        0x1965044fc _objc_rootDealloc + 80
8   CoreFoundation                         0x19d48518c cow_cleanup + 168
9   CoreFoundation                         0x19d4bd458 -[__NSDictionaryM dealloc] + 148
10  libobjc.A.dylib                        0x1964f60a4 object_cxxDestructFromClass(objc_object*, objc_class*) + 116
11  libobjc.A.dylib                        0x1964fae00 objc_destructInstance + 80
12  libobjc.A.dylib                        0x1965044fc _objc_rootDealloc + 80
13  libobjc.A.dylib                        0x1964f60a4 object_cxxDestructFromClass(objc_object*, objc_class*) + 116
14  libobjc.A.dylib                        0x1964fae00 objc_destructInstance + 80
15  libobjc.A.dylib                        0x1965044fc _objc_rootDealloc + 80
16  UIKitCore                              0x19f6ca96c -[UIResponder dealloc] + 124
17  UIKit                                  0x2277b3f10 -[UIResponderAccessibility dealloc] + 56
18  UIKitCore                              0x19f6ca670 -[UIViewController dealloc] + 1084
19  libobjc.A.dylib                        0x1964f61d4 AutoreleasePoolPage::releaseUntil(objc_object**) + 196
20  libobjc.A.dylib                        0x1964f9bdc objc_autoreleasePoolPop + 256
21  UIKitCore                              0x19f66a44c -[_UIAfterCACommitBlock run] + 92
22  UIKitCore                              0x19f66a36c -[_UIAfterCACommitQueue flush] + 168
23  UIKitCore                              0x19f66a280 _runAfterCACommitDeferredBlocks + 496
24  UIKitCore                              0x19f508be8 _cleanUpAfterCAFlushAndRunDeferredBlocks + 108
25  UIKitCore                              0x19f9c7c18 _UIApplicationFlushCATransaction + 72
26  UIKitCore                              0x19fb184b0 _UIUpdateSequenceRun + 84
27  UIKitCore                              0x1a017cc8c schedulerStepScheduledMainSection + 144
28  UIKitCore                              0x1a017c1e8 runloopSourceCallback + 92
29  CoreFoundation                         0x19d52e128 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 28
30  CoreFoundation                         0x19d53a7b4 __CFRunLoopDoSource0 + 176
31  CoreFoundation                         0x19d4bf5e8 __CFRunLoopDoSources0 + 244
32  CoreFoundation                         0x19d4d50d4 __CFRunLoopRun + 828
33  CoreFoundation                         0x19d4da3ec CFRunLoopRunSpecific + 612
34  GraphicsServices                       0x1d897735c GSEventRunModal + 164
35  UIKitCore                              0x19f8676e8 -[UIApplication _run] + 888
36  UIKitCore                              0x19f86734c UIApplicationMain + 340
目录
相关文章
|
2月前
|
iOS开发 开发者 MacOS
深入探索iOS开发中的SwiftUI框架
【10月更文挑战第21天】 本文将带领读者深入了解Apple最新推出的SwiftUI框架,这一革命性的用户界面构建工具为iOS开发者提供了一种声明式、高效且直观的方式来创建复杂的用户界面。通过分析SwiftUI的核心概念、主要特性以及在实际项目中的应用示例,我们将展示如何利用SwiftUI简化UI代码,提高开发效率,并保持应用程序的高性能和响应性。无论你是iOS开发的新手还是有经验的开发者,本文都将为你提供宝贵的见解和实用的指导。
145 66
|
5月前
|
开发框架 数据可视化 Java
iOS开发-SwiftUI简介
iOS开发-SwiftUI简介
|
7月前
|
开发工具 Swift iOS开发
探索iOS开发中的SwiftUI框架
在数字时代的浪潮中,iOS应用开发的舞台日益扩展,其中SwiftUI作为苹果推出的新型用户界面框架,正逐渐改变着开发者构建应用的方式。本文将深入介绍SwiftUI的核心概念和实际应用,探讨其如何简化代码、提升效率并推动设计创新,同时也会触及SwiftUI在当前技术生态中所面临的挑战与未来的发展潜力。
|
3月前
|
iOS开发 开发者
探索iOS开发中的SwiftUI框架
【10月更文挑战第39天】在苹果的生态系统中,SwiftUI框架以其声明式语法和易用性成为开发者的新宠。本文将深入SwiftUI的核心概念,通过实际案例展示如何利用这一框架快速构建用户界面,并探讨其对iOS应用开发流程的影响。
|
4月前
|
Swift iOS开发 开发者
探索iOS开发中的SwiftUI框架
【10月更文挑战第21天】在苹果生态系统中,SwiftUI的引入无疑为iOS应用开发带来了革命性的变化。本文将通过深入浅出的方式,带领读者了解SwiftUI的基本概念、核心优势以及如何在实际项目中运用这一框架。我们将从一个简单的例子开始,逐步深入到更复杂的应用场景,让初学者能够快速上手,同时也为有经验的开发者提供一些深度使用的技巧和策略。
77 1
|
6月前
|
机器学习/深度学习 搜索推荐 数据处理
探索iOS应用开发的新趋势:SwiftUI和Combine框架
【8月更文挑战第6天】随着Apple不断推动其操作系统的进化,iOS开发领域也迎来了新的变革。本文将深入探讨SwiftUI和Combine框架如何革新iOS应用开发流程,提升开发者的工作效率,并改善最终用户的体验。我们将从这两个框架的基本概念出发,分析它们的核心优势,并预测它们将如何塑造iOS开发的未来。
|
5月前
|
前端开发 iOS开发 开发者
探索iOS开发中的SwiftUI框架
【9月更文挑战第21天】在iOS应用开发的广阔天地中,SwiftUI框架如一股清新之风,为开发者带来了声明式语法的便捷与高效。本文将深入探讨SwiftUI的核心概念、布局方式及数据绑定机制,同时通过实例演示如何运用SwiftUI构建用户界面,旨在引领读者领略SwiftUI的魅力,并激发其对iOS开发新趋势的思考与实践。
57 6
|
5月前
|
iOS开发 开发者 UED
探索iOS应用开发中的SwiftUI框架
【9月更文挑战第26天】 在iOS开发的海洋中,SwiftUI犹如一艘现代的快艇,引领着开发者们驶向更加高效与直观的编程体验。本文将带你领略SwiftUI的魅力,从其设计理念到实际应用,我们将一步步揭开它如何简化界面构建过程的面纱。通过对比传统方式,你将看到SwiftUI如何让代码变得像诗一样优美,同时保持强大的功能性和灵活性。准备好让你的iOS开发技能加速升级,一起驾驭这股新潮流吧!
|
5月前
|
开发工具 Swift iOS开发
探索iOS开发中的SwiftUI框架
【9月更文挑战第1天】在本文中,我们将一起潜入iOS开发的海洋,特别聚焦于SwiftUI这一现代且富有表现力的框架。SwiftUI不仅简化了界面设计流程,还为开发者提供了声明式Swift语法的便利。通过这篇文章,你将学会如何利用SwiftUI构建灵活且响应式的用户界面,并理解其背后的原理。无论你是刚入门的新手还是寻求进阶的开发者,本文都将为你提供有价值的指导和启示。
|
6月前
|
Swift iOS开发 开发者
探索iOS开发:SwiftUI的魔力
【8月更文挑战第30天】在这篇文章中,我们将一起揭开SwiftUI的神秘面纱,这是Apple为iOS开发者带来的一种创新和简化界面设计的框架。通过直观易懂的语言和实际案例,我们会深入探讨SwiftUI如何让代码变得像诗一样优美,同时提升开发效率。你将看到,即便是编程初学者也能迅速上手,构建出令人惊叹的应用界面。让我们跟随SwiftUI的步伐,开启一段高效、愉悦的开发旅程。

热门文章

最新文章

  • 1
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 2
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 3
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
  • 4
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
  • 5
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
  • 6
    iOS8 中无需开源库的内置功能一览
  • 7
    iOS7应用开发7:自定义视图、手势操作
  • 8
    IOS小工具以及精彩的博客
  • 9
    Facebook SDK(iOS)初学讲解
  • 10
    iOS - Swift NSPoint 位置
  • 1
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
    14
  • 2
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
    28
  • 3
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    34
  • 4
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    29
  • 5
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
    23
  • 6
    uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
    143
  • 7
    【05】2025年1月首发完整版-篇幅较长-苹果app如何上架到app store完整流程·不借助第三方上架工具的情况下无需花钱但需仔细学习-优雅草央千澈详解关于APP签名以及分发-们最关心的一篇来了-IOS上架app
    235
  • 8
    app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
    90
  • 9
    深入探索iOS开发中的SwiftUI框架
    145
  • 10
    ios样式开关按钮jQuery插件
    60