В моем приложении для iOS используется IBMMobileFirstPlatformFoundation client sdk. Я сталкиваюсь со странной проблемой в определенный момент. Мы хотим протестировать сценарий принудительного обновления. Поскольку мы помечаем любую опубликованную версию приложения iOS как устаревшую, мы хотим, чтобы наши клиенты обновляли установленную версию iOS из магазина приложений.
Для этого мы просто отмечаем, что MFP application
версия (worklight console
) устарела. Как только мы сделаем это, и как только приложение iOS запустится, мы начнем получать сообщение об принудительном обновлении вместе с URL-адресом загрузки (я убедился, что это предупреждение запускается из самой библиотеки WLClient, и у нас нет доступа к этому коду). Но здесь проблема в том, что наше приложение падает после этого оповещения, как будто мы выполняем какие-либо действия в нашем приложении, например (частота сбоев составляет 7-8 из 10 попыток).
У нас есть экран, на котором у нас несколько МФУвызовы адаптера (так как эти службы вызываются снова, мы получаем одно и то же принудительное оповещение), но после определенных попыток происходит сбой приложения.
Вот некоторые из трассировок стека сбоев.
This application is modifying the autolayout engine from a background thread after the engine was accessed from the main thread. This can lead to engine corruption and weird crashes.
Stack:(
0 Foundation 0x00000001f03a7474 <redacted> + 96
1 Foundation 0x00000001f01bc554 <redacted> + 76
2 Foundation 0x00000001f01bc464 <redacted> + 120
3 Foundation 0x00000001f01bc228 <redacted> + 112
4 UIKitCore 0x000000021c0e31b8 <redacted> + 284
5 UIKitCore 0x000000021c0f5e54 <redacted> + 1292
6 QuartzCore 0x00000001f3cc61f0 <redacted> + 184
7 QuartzCore 0x00000001f3ccb198 <redacted> + 332
8 QuartzCore 0x00000001f3c2e0a8 <redacted> + 348
9 QuartzCore 0x00000001f3c5c108 <redacted> + 640
10 QuartzCore 0x00000001f3c5ccf8 <redacted> + 92
11 CoreFoundation 0x00000001ef7c989c <redacted> + 32
12 CoreFoundation 0x00000001ef7c45c4 <redacted> + 412
13 CoreFoundation 0x00000001ef7c4374 CFRunLoopRunSpecific + 468
14 Foundation 0x00000001f0191fcc <redacted> + 300
15 Foundation 0x00000001f01cd49c <redacted> + 88
16 APP_Name 0x0000000104151f4c +[WLAFURLConnectionOperation networkRequestThreadEntryPoint:] + 308
17 Foundation 0x00000001f02be6e4 <redacted> + 984
18 libsystem_pthread.dylib 0x00000001ef4582c0 <redacted> + 128
19 libsystem_pthread.dylib 0x00000001ef458220 _pthread_start + 44
20 libsystem_pthread.dylib 0x00000001ef45bcdc thread_start + 4
)
2019-10-10 15:33:04.141027+0400 APP_Name[1012:86063] *** Assertion failure in void RemoveVarFromSortedPriorityVectorList(NSISObjectiveLinearExpression *, NSISLinExpVar)(), /BuildRoot/Library/Caches/com.apple.xbs/Sources/Foundation/Foundation-1570.15/Foundation/Layout.subproj/IncrementalSimplex/NSISObjectiveLinearExpression.m:161
2019-10-10 15:33:04.141027+0400 APP_Name[1012:86344] *** Assertion failure in void RemoveVarFromSortedPriorityVectorList(NSISObjectiveLinearExpression *, NSISLinExpVar)(), /BuildRoot/Library/Caches/com.apple.xbs/Sources/Foundation/Foundation-1570.15/Foundation/Layout.subproj/IncrementalSimplex/NSISObjectiveLinearExpression.m:161
2019-10-10 15:33:24.575363+0400 APP_Name[1012:86344] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Missing variable 55 in variablesSortedByPriorityVectors'
*** First throw call stack:
(0x1ef838518 0x1eea139f8 0x1ef752148 0x1f0261f5c 0x1f03b16c8 0x1f0200934 0x1f01fa030 0x1f03ad7e0 0x1f0271130 0x1f03a68f0 0x1f03a5cb8 0x1f03a6c98 0x1f01bc5f4 0x1f01bc464 0x1f01bc228 0x21c0e31b8 0x21c0f5e54 0x1f3cc61f0 0x1f3ccb198 0x1f3c2e0a8 0x1f3c5c108 0x1f3c5ccf8 0x1ef7c989c 0x1ef7c45c4 0x1ef7c4374 0x1f0191fcc 0x1f01cd49c 0x104151f4c 0x1f02be6e4 0x1ef4582c0 0x1ef458220 0x1ef45bcdc)
Uncaught Exception: Engine marked as needing optimization even though it's already in progress.
2019-10-10 16:17:10.853059+0400 ADIB Mobile[1080:95658] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Engine marked as needing optimization even though it's already in progress.'
*** First throw call stack:
(0x1ef838518 0x1eea139f8 0x1ef752148 0x1f02151c8 0x1f01b5190 0x1f01f7548 0x1f01f6a28 0x1f01f6774 0x1f01f6048 0x21c030330 0x21c030790 0x21c030e88 0x1f03b59ec 0x1f01b2b34 0x1f01b1b58 0x21b3fdf80 0x21b3eba00 0x21c0e85d4 0x21b3eb930 0x21b3eb308 0x21b5f70e0 0x21b5f4c2c 0x21bc78fdc 0x21bc67b2c 0x21bc86540 0x1ef7ca10c 0x1ef7c9a10 0x1ef7c4a74 0x1ef7c4354 0x1f19c479c 0x21bc6db68 0x21d757474 0x104fd1820 0x1ef28a8e0)
libc++abi.dylib: terminating with uncaught exception of type NSException
Когда я поставил пару символических контрольных точек. Я узнал, что предупреждение было отображено из вторичного потока (который был запущен из библиотеки WLClient
). Первоначально он не падает, но после повторных попыток он падает.
Любая идея, почему это происходит.