Gỡ lỗi ứng dụng lẻ tẻ với dylib trong iOS13 / iPadOS 13


8

Sau khi cập nhật lên iOS 13.x / iPadOS 13.x, chúng tôi thấy các sự cố lẻ tẻ với các bản dựng Testflight gần đây của chúng tôi. Chúng tôi chưa thấy báo cáo từ người dùng sử dụng phiên bản phát hành trước 13 của chúng tôi, nhưng có vẻ như chưa có nhiều người cập nhật lên 13, vì vậy chúng tôi thực sự không biết.

Ứng dụng này là một ứng dụng cordova với cordova-ios 5.0.2 bằng WkWebView. Quyền được bảo vệ dữ liệu được đặt thành đầy đủ.

Tôi có một thời gian khó hiểu về sự cố, và nó dường như ở đâu đó sâu trong ngăn xếp iOS? Sự cố là lẻ tẻ và dường như chỉ xảy ra đôi khi khi ứng dụng đã được đưa vào nền.

Tôi đang tìm kiếm một số hướng dẫn / gợi ý về cách đi đến tận cùng của điều này.

Báo cáo sự cố từ TestFlight:

Incident Identifier: 900F9C19-EE4A-4A9D-B1AB-E834F6387565
Beta Identifier:     7194E7C0-152C-43E4-9716-BE2AF29A0BD7
Hardware Model:      iPad7,5
Process:             SomeApp [677]
Path:                /private/var/containers/Bundle/Application/745F3054-AB4B-4A1A-A7AB-2AFD0516706C/SomeApp.app/SomeApp
Identifier:          SomeApp
Version:             380 (2.0.0)
AppStoreTools:       11A1002b
Beta:                YES
Code Type:           ARM-64 (Native)
Role:                Non UI
Parent Process:      launchd [1]
Coalition:           SomeApp [620]


Date/Time:           2019-10-03 07:10:10.2716 +0200
Launch Time:         2019-10-02 15:50:25.8963 +0200
OS Version:          iPhone OS 13.1.2 (17A860)
Release Type:        User
Baseband Version:    n/a
Report Version:      104

Exception Type:  EXC_BAD_ACCESS (SIGBUS)
Exception Subtype: KERN_MEMORY_ERROR at 0x00000001048a5c8c
VM Region Info: 0x1048a5c8c is in 0x104884000-0x1048a8000;  bytes after start: 138380  bytes before end: 9075
      REGION TYPE                      START - END             [ VSIZE] PRT/MAX SHRMOD  REGION DETAIL
      MALLOC_LARGE           0000000104880000-0000000104884000 [   16K] rw-/rwx SM=PRV  
--->  mapped file            0000000104884000-00000001048a8000 [  144K] r--/rw- SM=COW  ...t_id=18017271
      shared memory          00000001048a8000-00000001048ac000 [   16K] r--/r-- SM=SHM  

Termination Signal: Bus error: 10
Termination Reason: Namespace SIGNAL, Code 0xa
Terminating Process: exc handler [677]
Triggered by Thread:  12

Thread 12 name:
Thread 12 Crashed:
0   libdyld.dylib                   0x000000018a2f76c0 dyld3::closure::ObjCStringTable::hash(char const*, unsigned long) const + 16 (Closure.cpp:1339)
1   libdyld.dylib                   0x000000018a2f7cd4 dyld3::closure::ObjCStringTable::getIndex(char const*) const + 52 (Closure.h:840)
2   libdyld.dylib                   0x000000018a2f7a6c dyld3::closure::ObjCStringTable::getPotentialTarget(char const*) const + 20 (Closure.h:824)
3   libdyld.dylib                   0x000000018a2f7d40 dyld3::closure::ObjCClassDuplicatesOpt::getClassLocation(char const*, objc_opt::objc_opt_t const*... + 44 (Closure.cpp:1483)
4   libdyld.dylib                   0x000000018a3044bc dyld3::AllImages::forEachObjCClass(char const*, void (void*, bool, bool*) block_pointer) const + 72 (AllImages.cpp:1915)
5   libobjc.A.dylib                 0x000000018a236c38 getPreoptimizedClass + 148 (objc-opt.mm:279)
6   libobjc.A.dylib                 0x000000018a2218d8 getClassExceptSomeSwift(char const*) + 20 (objc-runtime-new.mm:1607)
7   libobjc.A.dylib                 0x000000018a222784 look_up_class + 100 (objc-runtime-new.mm:6843)
8   Foundation                      0x000000018a8b4b00 NSClassFromString + 200 (NSObjCRuntime.m:0)
9   BoardServices                   0x000000018f2ba1b0 +[BSXPCServiceConnectionProxy invokeMethod:onTarget:withMessage:forConnection:] + 104 (BSXPCServiceConnectionProxy.m:329)
10  BoardServices                   0x000000018f2b9374 -[BSXPCServiceConnectionProxy invokeMessage:onTarget:] + 144 (BSXPCServiceConnectionProxy.m:177)
11  BoardServices                   0x000000018f2c080c __63-[BSXPCServiceConnectionEventHandler connection:handleMessage:]_block_invoke + 428 (BSXPCServiceConnectionEventHandler.m:184)
12  BoardServices                   0x000000018f2d6bf0 BSXPCServiceConnectionExecuteCallOut + 344 (BSXPCServiceConnection.m:1049)
13  BoardServices                   0x000000018f2c062c -[BSXPCServiceConnectionEventHandler connection:handleMessage:] + 172 (BSXPCServiceConnectionEventHandler.m:173)
14  BoardServices                   0x000000018f2d53e4 -[BSXPCServiceConnection _connection_handleMessage:fromPeer:withHandoff:] + 644 (BSXPCServiceConnection.m:808)
15  libdispatch.dylib               0x000000018a1bf610 _dispatch_call_block_and_release + 24 (init.c:1408)
16  libdispatch.dylib               0x000000018a1c0184 _dispatch_client_callout + 16 (object.m:495)
17  libdispatch.dylib               0x000000018a16c464 _dispatch_lane_serial_drain$VARIANT$mp + 608 (inline_internal.h:2487)
18  libdispatch.dylib               0x000000018a16ce88 _dispatch_lane_invoke$VARIANT$mp + 468 (queue.c:3820)
19  libdispatch.dylib               0x000000018a16c330 _dispatch_lane_serial_drain$VARIANT$mp + 300 (inline_internal.h:2528)
20  libdispatch.dylib               0x000000018a16ce88 _dispatch_lane_invoke$VARIANT$mp + 468 (queue.c:3820)
21  libdispatch.dylib               0x000000018a176340 _dispatch_workloop_worker_thread + 588 (queue.c:6386)
22  libsystem_pthread.dylib         0x000000018a20ffa4 _pthread_wqthread + 276 (pthread.c:2323)
23  libsystem_pthread.dylib         0x000000018a212ae0 start_wqthread + 8

Ngăn xếp sau khi cập nhật lên iPadOS 13.2, lưu ý: PluginKit:

Thread 5 name:
Thread 5 Crashed:
0   libdyld.dylib                   0x00000001bc5505d0 dyld3::closure::ObjCStringTable::hash(char const*, unsigned long) const + 16 (Closure.cpp:1339)
1   libdyld.dylib                   0x00000001bc550be4 dyld3::closure::ObjCStringTable::getIndex(char const*) const + 52 (Closure.h:841)
2   libdyld.dylib                   0x00000001bc55097c dyld3::closure::ObjCStringTable::getPotentialTarget(char const*) const + 20 (Closure.h:825)
3   libdyld.dylib                   0x00000001bc550c50 dyld3::closure::ObjCClassDuplicatesOpt::getClassLocation(char const*, objc_opt::objc_opt_t const*... + 44 (Closure.cpp:1483)
4   libdyld.dylib                   0x00000001bc55d3cc dyld3::AllImages::forEachObjCClass(char const*, void (void*, bool, bool*) block_pointer) const + 72 (AllImages.cpp:1915)
5   libobjc.A.dylib                 0x00000001bc48fc28 getPreoptimizedClass + 148 (objc-opt.mm:279)
6   libobjc.A.dylib                 0x00000001bc47a7d8 getClassExceptSomeSwift(char const*) + 20 (objc-runtime-new.mm:1620)
7   libobjc.A.dylib                 0x00000001bc47b684 look_up_class + 100 (objc-runtime-new.mm:6880)
8   BaseBoard                       0x00000001bf30447c _BSXPCEncodeObjectForKey + 124 (BSXPCCoder.m:377)
9   BaseBoard                       0x00000001bf30428c -[BSXPCCoder encodeObject:forKey:] + 96 (BSXPCCoder.m:181)
10  RunningBoardServices            0x00000001bf29f604 __44+[RBSXPCMessage messageForMethod:arguments:]_block_invoke + 288 (RBSXPCUtilities.m:152)
11  RunningBoardServices            0x00000001bf29f35c +[RBSXPCMessage messageWithEncoder:] + 72 (RBSXPCUtilities.m:132)
12  RunningBoardServices            0x00000001bf29f408 +[RBSXPCMessage messageForMethod:arguments:] + 148 (RBSXPCUtilities.m:140)
13  RunningBoardServices            0x00000001bf29f788 +[RBSXPCMessage messageForMethod:varguments:] + 192 (RBSXPCUtilities.m:170)
14  RunningBoardServices            0x00000001bf28f234 -[RBSConnection _invalidateAssertionIdentifier:error:] + 144 (RBSConnection.m:1361)
15  RunningBoardServices            0x00000001bf28808c -[RBSConnection invalidateAssertion:error:] + 80 (RBSConnection.m:275)
16  RunningBoardServices            0x00000001bf28605c -[RBSAssertion _clientInvalidateWithError:] + 124 (RBSAssertion.m:317)
17  AssertionServices               0x00000001c0e6278c -[BKSAssertion _invalidateSynchronously:] + 104 (BKSAssertion.m:164)
18  AssertionServices               0x00000001c0e6718c -[BKSProcessAssertion invalidate] + 92 (BKSProcessAssertion.m:291)
19  Foundation                      0x00000001bcb2e624 ___NSExtensionTearDownRequestWithIdentifier_block_invoke_2 + 84 (NSExtension.m:1098)
20  PlugInKit                       0x00000001c9e6db4c -[PKHostPlugIn endUsing:] + 152 (PKHostPlugIn.m:814)
21  Foundation                      0x00000001bcb2d090 __64-[NSExtension _safelyEndUsingWithProcessAssertion:continuation:]_block_invoke + 116 (NSExtension.m:1670)
22  libdispatch.dylib               0x00000001bc418610 _dispatch_call_block_and_release + 24 (init.c:1408)
23  libdispatch.dylib               0x00000001bc419184 _dispatch_client_callout + 16 (object.m:495)
24  libdispatch.dylib               0x00000001bc3c5404 _dispatch_lane_serial_drain$VARIANT$mp + 608 (inline_internal.h:2484)
25  libdispatch.dylib               0x00000001bc3c5df8 _dispatch_lane_invoke$VARIANT$mp + 420 (queue.c:3863)
26  libdispatch.dylib               0x00000001bc3cf314 _dispatch_workloop_worker_thread + 588 (queue.c:6445)
27  libsystem_pthread.dylib         0x00000001bc468f98 _pthread_wqthread + 276 (pthread.c:2323)
28  libsystem_pthread.dylib         0x00000001bc46bad4 start_wqthread + 8

Đối với những người khác gặp phải những vấn đề này, đây là một số liên kết có liên quan khác:

https://forums.developer.apple.com/thread/123728 https://forums.developer.apple.com/message/384064#384064

Câu trả lời:


4

Dường như dyld3 lưu các tệp clojure được tạo trong thư mục tmp của ứng dụng và nếu bạn sử dụng NSFileProtectionComplete thì các tệp đóng cũng có thuộc tính này.

Để tạo một crahs đóng ứng dụng, hãy khóa điện thoại, gửi một cú đẩy sẽ đánh thức ứng dụng và sau đó sự cố được tạo ra.

Giải pháp có vẻ đơn giản, chỉ cần thay đổi quyền cho ứng dụng tmp direcptry thành NSFileProtectionCompleteUntilFirstUserAuthentication và ứng dụng sẽ không gặp sự cố. Tôi thực sự không biết tại sao táo lại làm điều này.


Xin chào và cảm ơn phản hồi của bạn! Tôi giả sử bằng clojure bạn có nghĩa là đóng cửa? Ứng dụng không có bất kỳ khả năng đẩy nào, do đó, điều đó khiến cho việc thử tái tạo đó trở nên khó khăn.
Lubricin

Thêm vào đó, ứng dụng được tạo bằng cordova, vì vậy tôi hơi bị mắc kẹt khi làm cách nào để thay đổi quyền truy cập thư mục tmp. Tôi sẽ cố gắng nhìn vào nó.
Lubricin

Câu hỏi: Làm thế nào để bạn biết rằng vấn đề là với các tập tin trong thư mục tmp ứng dụng? Làm thế nào để bạn phân tích ra khỏi báo cáo stack / crash?
Lubricin

Tôi tìm thấy vấn đề / bình luận này và cho rằng đó là những gì bạn cũng mô tả? github.com/firebase/firebase-ios-sdk/issues/ từ
Lubricin

1
Chỉ cần thêm cho bất kỳ độc giả nào trong tương lai (từ: forum.developer.apple.com/message/384064 ): Các bước để tạo lại: * Chạy ứng dụng mà không có trình gỡ lỗi được đính kèm (để bật bộ định thời giám sát) * Khóa thiết bị (trong khi ứng dụng ở phía trước ) * Đợi 15 giây * Xoay thiết bị sang ngang trong khi bị khóa (hãy lắc mạnh để bạn biết hướng mới đã được nhận ra) * Thiết bị đánh thức và mở khóa * Ứng dụng đã bị hỏng
Lubricin

2

Tôi luôn có thể tái tạo vấn đề này trong iOS 13.1. Nhưng tôi đã thử nghiệm ngày hôm nay trên iOS13.2 beta 4 và không thể tái tạo vấn đề này nữa. Tôi sẽ đề nghị hoàn nguyên mức bảo vệ tệp để hoàn thành và sau đó thử nghiệm trên bản 13.2 beta mới nhất.


Đúng. Bản sửa lỗi xuất hiện trong 13.2 Beta 3 (xem các bình luận ở trên.) :-)
Lubricin

0

Cập nhật thiết bị lên iOS 13.2 nếu có thể. Tôi đã cài đặt iOS 13.2 và tôi không thể tái tạo vấn đề này nữa. Tôi đã không thay đổi cấp độ bảo vệ tập tin thành NSFileProtectionCompleteUntilFirstUserAuthentication, và nó vẫn hoạt động.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.