+ (void)load 的坑

说出来都是泪

之前总是在 + (void)load 方法里面初始化某些代码,直到最近一次遇到一个棘手的 bug,在 iOS8上,app 突然会启动不了,一直卡在 launch 页面,15秒后被系统杀死,然后一直循环。

解决方案

刚好公司有个 iOS8的手机,试了各种工具,都没有任何用,抓日志,也是显示15秒后被系统 kill,覆盖安装正式版也没有用,突然发现既然覆盖解决不了这个问题,那就可以试试 debug 了,一试果然可以,但是初步并没有什么鸟用,仍然启动不了,还是没头绪,打个断点看看,有没有进

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

发现并没有走断点,突然看到上方的+ (void)load,还有想到类似的 swift 项目不会出现这个问题,果断在+ (void)load打断点,果然在

    SCNetworkReachabilityScheduleWithRunLoop(self.networkReachability, CFRunLoopGetMain(), kCFRunLoopCommonModes);

这个地方卡住了,疑问:监听网络太早了?修改一下试试,果然可以运行了。
至此,此 bug 解决。

Note 错误日志像这样的

Entitlement com.apple.multitasking.termination required to kill applications.
kernel symbolicator unable to open /mach.release.t7000
Gesture EnabledForTopCLient: 0, EnabledInDaemonSettings: 0
Device Info Service was unable to create symbolicator for the kernel
SecTrustEvaluate  [leaf AnchorTrusted]

你可能感兴趣的:(+ (void)load 的坑)