Ank*_*ani 7 location background region ios ibeacon
我们正在开发一个应用程序,它应该响应 iBeacon 和后台的圆形区域。
有时它工作得很好,但有时信标和圆形区域进入/退出突然停止。
在应用程序中,我们正在使用(在后台模式下)
任何想法?在我看来,在后台区域检测有时会突然停止工作
这会是问题所在吗?
经过反复试验、测试以及与 Apple 的对话后,我可以确认这不是区域监控的错误,而是Apple 在 iOS 15 中新的预热功能的错误。
简而言之,iOS 15 将在 iOS 认为用户会使用的后台静默半启动应用程序。在我们的测试中,这种情况大约每半小时发生一次。它使应用程序启动感觉更快,因为一堆应用程序已经加载并准备就绪。
如果 Apple 预热您的应用程序,并且用户没有完全启动它,然后区域监视器需要通知您的应用程序,则这种情况不会发生。有时区域监控会提醒您的应用程序,有时则不会。如果你的应用程序“冷”,它就能工作。如果您的应用程序在内存中,它就会运行。如果您的应用程序处于这种预热状态,那么您就已经死在水里了。
我从苹果那里得知,这确实是多个错误,有些已修复,有些尚未修复。iOS 15.2 测试版中的注释还特别提到这也可能会影响 HealthKit。
解决该错误的解决方案是检测main.mApple 何时预热您的应用程序和exit. 这不允许您的应用程序在 Apple 预热时启动,并强制您的应用程序在时机成熟时完全启动。
main()这是 inside方法内部的代码main.m。请注意,添加 iOS 版本检测是谨慎的做法,因此当 Apple 修复此问题时,它最终可能会被逐步淘汰和删除。
double systemVersion = [[UIDevice currentDevice] systemVersion].doubleValue;
if (systemVersion >= 15.0) {
NSDictionary* environment = [[NSProcessInfo processInfo] environment];
BOOL prewarmed = false;
for (NSString *key in environment.allKeys) {
if ([key.lowercaseString containsString:@"prewarm"]) {
prewarmed = true;
break;
}
}
if (prewarmed) {
exit(0);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1738 次 |
| 最近记录: |