XXX must be used from main thread only.
问题场景:某游戏在播放视频时闪退。连接 pc 后使用 XCode 运行,最终停在代码段:
并且提示 XXX must be used from main thread only.
该错误会导致 app 闪退,如题,应该将语句放到主线程中执行。
这里使用 dispatch_async 分发线程:
dispatch_async(dispatch_get_main_queue(), ^{ // 代码放这里。 });
最终代码:
// 自動消灯を無効にする void UI_SetIdleTimerDisabled(bool b) { dispatch_async(dispatch_get_main_queue(), ^{ // 主线程执行。 [[UIApplication sharedApplication] setIdleTimerDisabled:b]; }); }
经过 Apple Developer Enterprise Program 重签的 app 闪退
Apple Developer Enterprise Program 可让大型组织开发内部专属的 app 并向其员工部署。此计划仅适用于需要使用安全的内部系统或经由移动设备管理解决方案,向员工私密地直接分发的特例情况。
一般游戏公司都会使用这个服务,绕过 APP Store 来给测试设备安装 app。我们公司也是,某天发现一个游戏上传到该平台重签后,在手机上出现闪退情况,但是使用 PC 连接真机安装没有问题。
// 报错如下。 Bootstrapping failed for <FBApplicationProcess: 0x10a253640; application<com.xd.collections>:<invalid>> with error: <NSError: 0x28071d920; domain: RBSRequestErrorDomain; code: 5; reason: "Launch failed."> { underlyingError = <NSError: 0x28071d140; domain: NSPOSIXErrorDomain; code: 88>; }
解决方法:关闭 bitcode …
说实话,我确实没往这方面想。。我以为 Apple Developer Enterprise Program 只是单纯的换个证书重签名,就像 apk 重签那样。