Как исправить 'обрисованное в общих чертах потребление Model?' сбой во время выполнения на Swift 5 - PullRequest
1 голос
/ 26 апреля 2019

Я только что обновил одно из своих приложений до Swift 5, я не сильно изменился и проблем не возникло, поэтому я просто выпустил его в производство (к счастью, в поэтапном выпуске).Через 1 день я начал видеть очень странный сбой Crashlytics, который затрагивает 15% людей, использующих мое приложение.

Это трассировка стека:

Crashed: com.apple.main-thread
0  (Missing)                      0x31698aa1503e0 (Missing)
1  libswiftCore.dylib             0x1afa5ac68 _swift_release_dealloc + 28
2  App                            0x104194c3c outlined consume of MyModel? + 4300033084
3  App                            0x104482cb8 @objc MyController.__ivar_destroyer (<compiler-generated>)
4  libobjc.A.dylib                0x180f267cc object_cxxDestructFromClass(objc_object*, objc_class*) + 148
5  libobjc.A.dylib                0x180f366b8 objc_destructInstance + 68
6  libobjc.A.dylib                0x180f36720 object_dispose + 16
7  UIKitCore                      0x1ae2edac0 -[UIResponder dealloc] + 152
8  UIKitCore                      0x1add173e0 -[UIViewController dealloc] + 1748
9  App                            0x10431d82c BaseViewController.__deallocating_deinit (MyController.swift:56)
10 App                            0x10431d85c @objc BaseViewController.__deallocating_deinit (<compiler-generated>)
11 libobjc.A.dylib                0x180f41b9c (anonymous namespace)::AutoreleasePoolPage::pop(void*) + 672
12 CoreFoundation                 0x181d59f40 _CFAutoreleasePoolPop + 28
13 CoreFoundation                 0x181cd8e00 __CFRunLoopRun + 1932
14 CoreFoundation                 0x181cd8354 CFRunLoopRunSpecific + 436
15 GraphicsServices               0x183ed879c GSEventRunModal + 104
16 UIKitCore                      0x1ae2c3b68 UIApplicationMain + 212
17 App                            0x104108468 main (AppDelegate.swift:21)
18 libdyld.dylib                  0x18179e8e0 start + 4

Я уже искалчто-то в Интернете, но я нахожу только ветку на Swift Forum, не очень связанную с этим.

MyModel на самом деле является структурной моделью, которая вложена в другую модель.MyController - это очень большой контроллер, который управляет моделью.

Кажется, что сбой происходит, очевидно, при извлечении контроллера и когда система пытается освободить все связанные свойства.

Я пытался реплицироватьэто много раз безрезультатно, и я действительно не знал, с чего начать.

У кого-то возникла такая же проблема?

ОБНОВЛЕНИЕ [Частично исправлено]: Казалось, что повреждение стекавызванный Advertising Framework, чтобы исправить это, я переместил MyModel из Struct в Class, теперь он в куче и не может быть дважды освобожден.

...