如何从 SwiftUI crashlytics 错误中获取更多信息

问题描述 投票:0回答:1

我已将 iOS 应用程序从 UIKit 迁移到 SwiftUI。我最近发布了 SwiftUI 版本,昨天 Crashlytics 报告了一个崩溃,我不知道如何修复,因为我不知道崩溃发生在哪里。

崩溃报告是这样说的:

_userInfoForFileAndLine
NSInternalInconsistencyException - attempt to insert item 268 into section 0, but there are only 0 items in section 0 after the update

 Fatal Exception: NSInternalInconsistencyException
Attempted to scroll the collection view to an out-of-bounds item (0) when there are only 0 items in section 0. Collection view: <_TtC7SwiftUIP33_8825076C2763A50452A210CBE1FA4AF020PagingCollectionView: 0x1238fd000; baseClass = UICollectionView; frame = (0 0; 340 105); clipsToBounds = YES; autoresize = W+H; gestureRecognizers = <NSArray: 0x2838f89f0>; backgroundColor = UIExtendedGrayColorSpace 0 0; layer = <CALayer: 0x2836c2cc0>; contentOffset: {0, 0}; contentSize: {0, 0}; adjustedContentInset: {0, 0, 0, 0}; layout: <_TtC7SwiftUIP33_8825076C2763A50452A210CBE1FA4AF012PagingLayout: 0x12268c400>; dataSource: (null)>.


Fatal Exception: NSInternalInconsistencyException
0  CoreFoundation                 0xa248 __exceptionPreprocess
1  libobjc.A.dylib                0x17a68 objc_exception_throw
2  Foundation                     0x54681c _userInfoForFileAndLine
3  UIKitCore                      0x3ece80 -[UICollectionView _validateScrollingTargetIndexPath:]
4  UIKitCore                      0x3ec65c -[UICollectionView _contentOffsetForScrollingToItemAtIndexPath:atScrollPosition:]
5  UIKitCore                      0x3ec078 -[UICollectionView _scrollToItemAtIndexPath:atScrollPosition:animated:]
6  SwiftUI                        0x9c4e38 OUTLINED_FUNCTION_17
7  SwiftUI                        0x9c4f24 OUTLINED_FUNCTION_17
8  SwiftUI                        0x2f9dc OUTLINED_FUNCTION_173
9  SwiftUI                        0x2e9e8 OUTLINED_FUNCTION_504
10 UIKitCore                      0x4cec -[UIView(CALayerDelegate) layoutSublayersOfLayer:]
11 QuartzCore                     0xa4e8 CA::Layer::layout_if_needed(CA::Transaction*)
12 QuartzCore                     0x1db9c CA::Layer::layout_and_display_if_needed(CA::Transaction*)
13 QuartzCore                     0x2f098 CA::Context::commit_transaction(CA::Transaction*, double, double*)
14 QuartzCore                     0x663c4 CA::Transaction::commit()
15 UIKitCore                      0x49431c __34-[UIApplication _firstCommitBlock]_block_invoke_2
16 CoreFoundation                 0x43924 __CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__
17 CoreFoundation                 0xac0ac __CFRunLoopDoBlocks
18 CoreFoundation                 0x7becc __CFRunLoopRun
19 CoreFoundation                 0x811e4 CFRunLoopRunSpecific
20 GraphicsServices               0x1368 GSEventRunModal
21 UIKitCore                      0x3a2d88 -[UIApplication _run]
22 UIKitCore                      0x3a29ec UIApplicationMain
23 MySwiftUIApp                   0xf0e4 main + 14 (main.m:14)
24 ???                            0x1ca3d1948 (Missing)

唯一提到 MySwiftUIApp 的是 main + 14 (main.m:14) 行(信息不多)。

但对我来说更奇怪的是,问题似乎发生在 UICollectionView 中,但我的应用程序中没有任何 UICollectionView!

所有这些都从 UIKit 应用程序中删除并替换为 List swiftUI 视图。 这些列表可以在低级别调用 UIKit UICollectionView 吗?我不这么认为...

我正在考虑将 crashlytics 日志添加到我的应用程序中的每个列表中,以查看发生了什么情况,以防再次发生崩溃,但我不确定这是否是一个好主意。

最后一件事:这些错误在同一用户身上发生了 3 次,崩溃时间分别是 2023 年 9 月 19 日上午 9:01:41、2023 年 9 月 19 日上午 9:01:43 和 2023 年 9 月 19 日,上午 9:01:45。这怎么可能?怎么可能3秒内发生3次崩溃?这是 Crashlytics 的“问题”吗?

我想添加一些代码,但我不知道哪个类、视图或文件崩溃了。

任何线索将不胜感激!

ios swift swiftui crashlytics
1个回答
0
投票

嗯,多亏了 dalton_c 评论,我已经成功获得了堆栈跟踪,其中包含有关 SwiftUI 步骤的清晰消息:

Last Exception Backtrace:
0   CoreFoundation                  0x1aa82e248 __exceptionPreprocess + 164 (NSException.m:202)
1   libobjc.A.dylib                 0x1a3bf3a68 objc_exception_throw + 60 (objc-exception.mm:356)
2   Foundation                      0x1a51b281c -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 188 (NSException.m:242)
3   UIKitCore                       0x1acd9ee80 -[UICollectionView _validateScrollingTargetIndexPath:] + 412 (UICollectionView.m:0)
4   UIKitCore                       0x1acd9e65c -[UICollectionView _contentOffsetForScrollingToItemAtIndexPath:atScrollPosition:] + 52 (UICollectionView.m:7348)
5   UIKitCore                       0x1acd9e078 -[UICollectionView _scrollToItemAtIndexPath:atScrollPosition:animated:] + 240 (UICollectionView.m:7563)
6   SwiftUI                         0x1aeb3de38 PagingCollectionView.scrollToItem(at:at:animated:) + 320 (PageView_PhoneTV.swift:607)
7   SwiftUI                         0x1aeb3df24 @objc PagingCollectionView.scrollToItem(at:at:animated:) + 208 (<compiler-generated>:0)
8   SwiftUI                         0x1ae1a89dc PagingCollectionView.layoutSubviews() + 988 (PageView_PhoneTV.swift:595)
9   SwiftUI                         0x1ae1a79e8 @objc PagingCollectionView.layoutSubviews() + 36 (<compiler-generated>:0)
10  UIKitCore                       0x1ac9b6cec -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 1980 (UIView.m:18550)
11  QuartzCore                      0x1abe934e8 CA::Layer::layout_if_needed(CA::Transaction*) + 500 (CALayer.mm:10223)
12  QuartzCore                      0x1abea6b9c CA::Layer::layout_and_display_if_needed(CA::Transaction*) + 148 (CALayer.mm:2516)
13  QuartzCore                      0x1abeb8098 CA::Context::commit_transaction(CA::Transaction*, double, double*) + 456 (CAContextInternal.mm:2711)
14  QuartzCore                      0x1abeef3c4 CA::Transaction::commit() + 652 (CATransactionInternal.mm:431)
15  UIKitCore                       0x1ace4631c __34-[UIApplication _firstCommitBlock]_block_invoke_2 + 36 (UIApplication.m:12109)
16  CoreFoundation                  0x1aa867924 __CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 28 (CFRunLoop.c:1822)
17  CoreFoundation                  0x1aa8d00ac __CFRunLoopDoBlocks + 368 (CFRunLoop.c:1864)
18  CoreFoundation                  0x1aa89fecc __CFRunLoopRun + 856 (CFRunLoop.c:2972)
19  CoreFoundation                  0x1aa8a51e4 CFRunLoopRunSpecific + 612 (CFRunLoop.c:3390)
20  GraphicsServices                0x1e36c5368 GSEventRunModal + 164 (GSEvent.c:2196)
21  UIKitCore                       0x1acd54d88 -[UIApplication _run] + 888 (UIApplication.m:3726)
22  UIKitCore                       0x1acd549ec UIApplicationMain + 340 (UIApplication.m:5316)
23  MySwiftUIApp                    0x100feb0e4 main + 80 (main.m:14)
24  dyld                            0x1c8bc9948 start + 2504 (dyldMain.cpp:1168)

我在 StackOverflow 中进行了与第 8 行相关的新搜索:“PageView_PhoneTV”。

我发现了这个:

如何修复由 UICollectionView _validateScrollingTargetIndexPath 引起的 SwiftUI 崩溃?

还有这个:

简单的 TabView 在 iOS 16 中崩溃

考虑到用户使用的是iOS 16.0,这似乎回答了我的问题,并且与我的TabView有关,并且这是iOS 16.0的错误。

© www.soinside.com 2019 - 2024. All rights reserved.