7

In my game engine, I have an option to enable the multithreaded rendering. In iOS 12 (and below) my app did not crash.

I have not changed anything in my code, but it crashes on iOS 13.

2019-10-02 11:36:07.931 SimpleGame[293:11150] ---> (Inner Exception #0) Foundation.MonoTouchException: Objective-C exception thrown.  Name: NSInternalInconsistencyException Reason: threading violation: expected the main thread

Oct  2 09:57:48 GL04207-MT SimpleGame[923] <Notice>:    0   CoreFoundation                      0x00000001aace1c44 97285ACB-7B21-393A-ABF6-03F1DBB5D2A2 + 1256516
Oct  2 09:57:48 GL04207-MT SimpleGame[923] <Notice>:    1   libobjc.A.dylib                     0x00000001aa9fc0c8 objc_exception_throw + 60
Oct  2 09:57:48 GL04207-MT SimpleGame[923] <Notice>:    2   CoreFoundation                      0x00000001aabde75c 97285ACB-7B21-393A-ABF6-03F1DBB5D2A2 + 194396
Oct  2 09:57:48 GL04207-MT SimpleGame[923] <Notice>:    3   Foundation                          0x00000001ab01f960 672CF0CB-4951-3B91-89DF-55E953AEA00F + 571744
Oct  2 09:57:48 GL04207-MT SimpleGame[923] <Notice>:    4   FrontBoardServices                  0x00000001afe9791c 124B166D-3905-3F51-A46A-646AE3424213 + 366876
Oct  2 09:57:48 GL04207-MT SimpleGame[923] <Notice>:    5   FrontBoardServices                  0x00000001afe4a288 124B166D-3905-3F51-A46A-646AE3424213 + 49800
Oct  2 09:57:48 GL04207-MT SimpleGame[923] <Notice>:    6   UIKitCore                           0x00000001ae51a87c 55D60569-DBB7-3BC9-8A97-DCAC95C64D4B + 1915004
Oct  2 09:57:48 GL04207-MT SimpleGame[923] <Notice>:    7   UIKitCore                           0x00000001ae517554 55D60569-DBB7-3BC9-8A97-DCAC95C64D4B + 1901908
Oct  2 09:57:48 GL04207-MT SimpleGame[923] <Notice>:    8   UIKitCore                           0x00000001ae5177b4 55D60569-DBB7-3BC9-8A97-DCAC95C64D4B + 1902516
Oct  2 09:57:48 GL04207-MT SimpleGame[923] <Notice>:    9   UIKitCore                           0x00000001aeface14 55D60569-DBB7-3BC9-8A97-DCAC95C64D4B + 13000212
Oct  2 09:57:48 GL04207-MT SimpleGame[923] <Notice>:    10  UIKitCore                           0x00000001aedaf02c 55D60569-DBB7-3BC9-8A97-DCAC95C64D4B + 10911788
Oct  2 09:57:48 GL04207-MT SimpleGame[923] <Notice>:    11  UIKitCore                           0x00000001aedaff00 55D60569-DBB7-3BC9-8A97-DCAC95C64D4B + 10915584
Oct  2 09:57:48 GL04207-MT SimpleGame[923] <Notice>:    12  
Oct  2 09:57:48 GL04207-MT SimpleGame[923] <Notice>:    22  SimpleGame                   0x000000010487c2a4 World_FlushRenderWorkQueue_private + 2577804
Oct  2 09:57:48 GL04207-MT SimpleGame[923] <Notice>:    23  SimpleGame                   0x00000001048b45e8 World_FlushRenderWorkQueue_private + 2808016
Oct  2 09:57:48 GL04207-MT SimpleGame[923] <Notice>:    24  SimpleGame                   0x00000001048b54c0 World_FlushRenderWorkQueue_private + 2811816
Oct  2 09:57:48 GL04207-MT SimpleGame[923] <Notice>:    25  SimpleGame                   0x00000001051d7198 World_FlushRenderWorkQueue_private + 12387456
Oct  2 09:57:48 GL04207-MT SimpleGame[923] <Notice>:    26  SimpleGame                   0x000000010503c058 World_FlushRenderWorkQueue_private + 10703680
Oct  2 09:57:48 GL04207-MT SimpleGame[923] <Notice>:    27  SimpleGame                   0x000000010503b774 World_FlushRenderWorkQueue_private + 10701404
Oct  2 09:57:48 GL04207-MT SimpleGame[923] <Notice>:    28  SimpleGame                   0x00000001051d5400 World_FlushRenderWorkQueue_private + 12379880
Oct  2 09:57:48 GL04207-MT SimpleGame[923] <Notice>:    29 SimpleGame                   0x000000010487d904 World_FlushRenderWorkQueue_private + 2583532
Oct  2 09:57:48 GL04207-MT SimpleGame[923] <Notice>:    30  SimpleGame                   0x000000010487c2a4 World_FlushRenderWorkQueue_private + 2577804
Oct  2 09:57:48 GL04207-MT SimpleGame[923] <Notice>:    31  SimpleGame                   0x000000010487c038 World_FlushRenderWorkQueue_private + 2577184
Oct  2 09:57:48 GL04207-MT SimpleGame[923] <Notice>:    32  SimpleGame                   0x000000010487da00 World_FlushRenderWorkQueue_private + 2583784
Oct  2 09:57:48 GL04207-MT SimpleGame[923] <Notice>:    33  SimpleGame                   0x00000001047081a8 World_FlushRenderWorkQueue_private + 1053840
Oct  2 09:57:48 GL04207-MT SimpleGame[923] <Notice>:    34  SimpleGame                   0x0000000105bb1434 World_FlushRenderWorkQueue_private + 22718236
Oct  2 09:57:48 GL04207-MT SimpleGame[923] <Notice>:    35  SimpleGame                   0x0000000105c18dd4 World_FlushRenderWorkQueue_private + 23142588
Oct  2 09:57:48 GL04207-MT SimpleGame[923] <Notice>:    36  PSimpleGame                   0x0000000105c44080 World_FlushRenderWorkQueue_private + 23319400
Oct  2 09:57:48 GL04207-MT SimpleGame[923] <Notice>:    37  libsystem_pthread.dylib             0x00000001aa9ecd5c _pthread_start + 128
Oct  2 09:57:48 GL04207-MT SimpleGame[923] <Notice>:    38  libsystem_pthread.dylib             0x00000001aa9f4c84 thread_start + 8

When I disable the multithreaded rendering option, it did not crash. There must be a change in the threading system in iOS 13, but could not find anything from their documetation.

신한슬
  • 189
  • 12
  • 2
    If there was a change in iOS 13, it was a change that no longer allowed your program to get away with some unsafe behavior. An existing error in your code is now causing a crash. Have you tried enablling Runtime Sanitization in the Diagnostics section of your project? https://developer.apple.com/documentation/code_diagnostics/address_sanitizer/enabling_the_address_sanitizer – Gene Z. Ragan Oct 02 '19 at 17:02

1 Answers1

9

As Gene said, the issue is that previous versions of iOS wouldn’t stop when you incorrectly interacted with the UI from a background thread. iOS 13 will.

To help identifying the issue, go to “Editor” » “Scheme” » “Edit Scheme...” and then check “Main Thread Checker”. If you tap on the right arrow next to this, it will even create a breakpoint for issues, where it will stop execution at the line at which you are trying to update the UI from a background thread:

enter image description here

Rob
  • 415,655
  • 72
  • 787
  • 1,044
  • You saved my day. You were on the spot. I was actually updating UIWindow from the background thread. I just dispatched it to the mainThread and It's working now. Thanx again – 신한슬 Oct 02 '19 at 20:40