我的应用程序启用了背景模式,并选中了后台获取功能,并且我验证了plist包含适当的获取模式。
我还按如下方式配置了间隔:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
application.setMinimumBackgroundFetchInterval(UIApplicationBackgroundFetchIntervalMinimum);
return true;
}
我已经按如下方式添加了处理程序:
func application(application: UIApplication, performFetchWithCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {
// Get some new data here
completionHandler(UIBackgroundFetchResult.NewData);
}
我尝试过调试 - >模拟背景提取,但无论它从未进入performFetchWithCompletionHandler
。我还尝试在一个方案下运行应用程序,该方案选中了“由于后台获取事件而启动”选项。在此方案下运行只需在模拟器中照常启动应用程序,而无需调用performFetchWithCompletionHandler
。
有什么想法吗?
谢谢!
编辑:这似乎也影响了我的应用的发布版本,因此它可能无法与模拟器隔离。我正在运行Swift 1.2。
编辑2:我的错误报告刚刚关闭,因为它是另一个错误报告的副本,概述了同样的问题。仍然没有确认问题与模拟器隔离的信息。
编辑3:未提及Xcode 6.4 Beta 2发行说明中的修复程序。 : - (
答案 0 :(得分:27)
这是我发现测试后台获取的唯一方法。
答案 1 :(得分:3)
查看XCode发行说明:https://developer.apple.com/library/ios/releasenotes/DeveloperTools/RN-Xcode/Chapters/Introduction.html
“Xcode菜单命令Simulator Background Fetch不起作用。
使用iOS模拟器中的菜单命令。 (20145602)“
答案 2 :(得分:2)
您可以通过Houston
为您的真实设备创建自己的后台抓取推送通知sudo gem install houston
func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData)
常用推送通知:apn push "<your_device_token>" -c /path/to/apple_push_notification.pem -m "Hello from the command line!"
用于后台抓取推送通知:apn push "<your_device_token>" -c /path/to/apple_push_notification.pem -n
apn
app的更多选项:
c.option '-m', '--alert ALERT', 'Body of the alert to send in the push notification'
c.option '-b', '--badge NUMBER', 'Badge number to set with the push notification'
c.option '-s', '--sound SOUND', 'Sound to play with the notification'
c.option '-y', '--category CATEGORY', 'Category of notification'
c.option '-n', '--[no]-newsstand', 'Indicates content available for Newsstand'
c.option '-d', '--data KEY=VALUE', Array, 'Passes custom data to payload (as comma-delimited "key=value" declarations)'
c.option '-P', '--payload PAYLOAD', 'JSON payload for notifications'
c.option '-e', '--environment ENV', [:production, :development], 'Environment to send push notification (production or development (default))'
c.option '-c', '--certificate CERTIFICATE', 'Path to certificate (.pem) file'
c.option '-p', '--[no]-passphrase', 'Prompt for a certificate passphrase'
答案 3 :(得分:2)
调用此方法。
func application(_ application: UIApplication, performFetchWithCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
}
你忘了在completionHandler
之后写@escaping答案 4 :(得分:0)
在 Xcode 8.3.2 中,此问题不存在。 调试 - &gt;模拟后台提取完成其工作。它甚至可以在模拟器上运行。