应用程序未运行时iOS 7后台获取

我已经写了一个简单的应用程序,以testing和监控iOS7中的后台获取function的工作原理。

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

在这里输入图像说明

然后;

我将下面的代码添加到AppDelegate.m中的application:didFinishLaunchingWithOptions:方法中:

在这里输入图像说明

最后,我已经实现了应用程序:(UIApplication *)应用程序performFetchWithCompletionHandler:方法请求。

在这里输入图像说明

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

但是,当应用程序没有运行时,我从来没有能够使它工作(即使在后台模式下,只是没有运行)。

苹果说,当应用程序没有运行,操作系统要分别执行下列方法:

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

所以我的问题是,有没有办法testing应用程序不运行时的后台获取?

我正在使用iOS 7.1在我的iPod 5 Gen上进行testing。

编辑2:请注意,如果用户从应用程序切换器中杀死应用程序,则后台提取将不会再发生。 这是苹果计划的工作。 有关详细信息,请参阅相关的“理解您的应用程序启动到后台”文档:

在大多数情况下,系统在用户强制退出后不会重新启动应用程序。 位置应用程序是一个例外,iOS 8和更高版本在用户强制退出后重新启动。

和一个旧的开发者论坛post(链接不幸不再存在)…

“如果你从多任务UI中杀死一个应用程序,系统将不会再自动启动应用程序,这里的逻辑是,如果用户杀了你的应用程序,他们可能希望它停止。

你可以做一个简单的GET请求,例如:“ http://dev.example.org/?ping=1 ”到你的Web服务器,然后grep在Web服务器上访问“。ping = 1”

编辑:另一种方法来testing在后台启动的应用程序(例如:不能双击主页button,切换到它)是通过创build一个只有背景的scheme。 转至产品 – >scheme – >pipe理scheme,然后复制您的默认scheme。

方案设置

然后编辑新的scheme,然后单击选项选项卡,并选中“由于后台提取事件启动” – 当你运行你的应用程序,它将直接启动到后台,就像通过正常的使用。

启动后台提取