我编写了一个简单的应用程序,以测试和监视background fetch功能在iOS7中的工作方式。

首先,我在Info.plist文件中设置了UIBackgroundMode选项。



然后;

我在 AppDelegate.m 中的 application:didFinishLaunchingWithOptions:方法中添加了以下代码:

最后,我实现了应用程序:(UIApplication *)应用程序
performFetchWithCompletionHandler:根据要求使用
方法。

每次我单击 Debug-> Simulate Background Fetch 按钮时,它都会更改应用程序的批号并按预期工作。

但是,当应用程序未运行时(即使不是在后台模式下,也只是未运行),我从未能够使其正常运行。

苹果表示,当应用程序未运行且OS希望分别执行以下方法时:

application:(UIApplication *)application didFinishLaunchingWithOptions:
applicationDidEnterBackground:(UIApplication *)application
application:(UIApplication *)application performFetchWithCompletionHandler:

所以我的问题是,当应用未运行时,是否有一种方法可以测试后台获取?

我正在使用iOS 7.1 在 iPod 5th Gen上对其进行测试。

最佳答案

编辑2:请注意,如果用户从应用程序切换器中终止了该应用程序,则后台提取将不再发生。这按Apple的预期进行。有关详细信息,请参见相关的"Understanding When Your App Gets Launched into the Background"文档:



还有一个旧的开发人员论坛帖子(不幸的是,该链接不再存在)...



您可以向Web服务器发出简单的GET请求,例如:“http://dev.example.org/?ping=1”,然后在Web服务器上grep access.log中的“?ping = 1”

编辑:另一种测试在后台启动的应用程序的方法(例如:不能双击主屏幕按钮并切换到它)是通过创建仅背景的方案来进行的。转到产品->方案->管理方案,然后复制默认方案。

然后编辑新方案,然后单击“选项”选项卡,并选中“由于后台获取事件而启动”-运行应用程序时,它将像正常使用一样直接在后台启动。

10-05 19:41
查看更多