IOS application failed to start on time 0x000000008badf00d - delay in application DidBecomeActive

I put the whole didFinishLaunchingWithOptions with the minimal code that is here:

  [UIApplication sharedApplication].idleTimerDisabled = YES; m_bDataLoadingNeeded = YES; return YES; 

As a result, I had to put critical initialization in applicationDidBecomeActive . However, I get the above error.

All the links that I will talk about mention the completion of didFinishLaunchingWithOptions before I did it. Is validation required for applicationDidBecomeActive ?

My crash log is here (anyway, I cannot symbolize it with all dsym and applications in place, so I cannot figure out which operator is the exact culprit. But everyone can see that it definitely did not do didFinishLaunchingWithOptions )

 Exception Type: 00000020 Exception Codes: 0x000000008badf00d Highlighted Thread: 0 Application Specific Information: <MyBundleID> failed to launch in time Elapsed total CPU time (seconds): 1.600 (user 1.600, system 0.000), 4% CPU Elapsed application CPU time (seconds): 0.438, 1% CPU Thread 0 name: Dispatch queue: com.apple.main-thread Thread 0: 0 libsystem_kernel.dylib 0x3c66f0fc 0x3c65e000 + 69884 1 libsystem_c.dylib 0x3c5b8124 0x3c5b7000 + 4388 2 SystemConfiguration 0x360d43ca 0x360c0000 + 82890 3 MyApp 0x001cd406 0xf9000 + 869382 4 MyApp 0x001ccb78 0xf9000 + 867192 5 MyApp 0x001cd148 0xf9000 + 868680 6 MyApp 0x001d77e4 0xf9000 + 911332 7 MyApp 0x001d7ed0 0xf9000 + 913104 8 MyApp 0x001cd908 0xf9000 + 870664 9 MyApp 0x001d46e0 0xf9000 + 898784 10 MyApp 0x000fb870 0xf9000 + 10352 11 UIKit 0x36177af6 0x36102000 + 482038 12 UIKit 0x3615d9bc 0x36102000 + 375228 13 UIKit 0x36105c34 0x36102000 + 15412 14 UIKit 0x361056c8 0x36102000 + 14024 15 UIKit 0x36105116 0x36102000 + 12566 16 GraphicsServices 0x37dfb5a0 0x37df5000 + 26016 17 GraphicsServices 0x37dfb1ce 0x37df5000 + 25038 18 CoreFoundation 0x342d2170 0x3423b000 + 618864 19 CoreFoundation 0x342d2112 0x3423b000 + 618770 20 CoreFoundation 0x342d0f94 0x3423b000 + 614292 21 CoreFoundation 0x34243eb8 0x3423b000 + 36536 22 CoreFoundation 0x34243d44 0x3423b000 + 36164 23 UIKit 0x3615c480 0x36102000 + 369792 24 UIKit 0x361592fc 0x36102000 + 357116 25 MyApp 0x000fb4be 0xf9000 + 9406 26 MyApp 0x000fb474 0xf9000 + 9332 

Given that applicationDidBecomeActive indeed the culprit:

I can transfer the initialization of applicationDidBecomeActive inside the background thread - something quite simplistic like this , but I'm not sure what else I need to do, because this initialization code, in turn, spawns more threads internally. I use AFNetworking, Reachability, and other block-based frameworks. I don’t know if I can finish so many changes in the already built architecture and general code.

I'm pretty confused how to deal with this best and shortest way.

+6
source share
1 answer

I suspect that your program creates a bunch of network requests in the main thread before it becomes usable - blocking the user due to interaction for several seconds.

Backtrace is not always (required / required) - your application is killed after a certain time.

Perhaps you can just run this in the Tools and see where you are doing something that can take a lot of time; I / O, network requests - transfer them from the main thread and execute them asynchronously . Also rate processor hot spots. The initial launch time should not be so close.

+5
source

Source: https://habr.com/ru/post/952668/


All Articles