我编写了一个简单的应用程序,以测试和监控{7}}功能在iOS7中的工作方式。
首先,我在Info.plist文件中设置了UIBackgroundMode选项。
然后;
我将以下代码添加到 AppDelegate.m 中的 application:didFinishLaunchingWithOptions:方法中:
最后,我实现了应用程序:( UIApplication *)应用程序 按要求执行performFetchWithCompletionHandler:方法。
每次点击调试 - >模拟后台提取按钮,它都会更改应用程序的批号并按预期工作。
但是,当应用程序未运行时,我甚至无法使其工作(即使在后台模式下也没有运行)。
Apple表示,当应用程序未运行且操作系统要分别执行以下方法时:
application:(UIApplication *)application didFinishLaunchingWithOptions:
applicationDidEnterBackground:(UIApplication *)application
application:(UIApplication *)application performFetchWithCompletionHandler:
所以我的问题是,有没有办法在应用程序未运行时测试后台提取?
我正在使用iOS 7.1 iPod第五代进行测试。
答案 0 :(得分:21)
编辑2 请注意,如果用户从应用切换器中杀死应用,则后台提取将永远不会再次发生。这正如Apple所期望的那样。有关详细信息,请参阅相关的"Understanding When Your App Gets Launched into the Background"文档:
在大多数情况下,系统在强制使用后不会重新启动应用 退出用户。一个例外是位置应用程序,在iOS 8和iOS中 之后被用户强制退出后重新启动。
一个旧的开发者论坛帖子(遗憾的是链接不再存在)......
“如果你从多任务UI中杀死一个应用程序,系统永远不会 再次自动启动应用程序。这里的逻辑是,如果 用户杀了你的应用程序,他们可能希望它保持死亡状态。“
您可以向您的Web服务器发出一个简单的GET请求,例如:“http://dev.example.org/?ping=1”然后grep web服务器上的access.log“?ping = 1”
编辑:测试在后台启动的应用的另一种方法(例如:无法双击主页按钮并切换到它)是通过创建仅后台方案。转到产品 - >方案 - >管理方案,然后复制默认方案。
然后编辑新方案并单击选项选项卡并选中“由于后台获取事件而启动” - 当您运行应用程序时,它将直接启动到后台,就像正常使用一样。