私のアプリでは、バックグラウンドフェッチをオンにしてバックグラウンドモードを有効にしており、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リリースノートには修正の記載はありません。 :-(
これが、バックグラウンドフェッチをテストするために見つけた唯一の方法です。
XCodeリリースノートをご覧ください。 https://developer.Apple.com/library/ios/releasenotes/DeveloperTools/RN-Xcode/Chapters/Introduction.html
「Xcodeメニューコマンドシミュレータバックグラウンドフェッチが機能しません。
代わりに、iOSシミュレータのメニューコマンドを使用してください。 (20145602)」
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
アプリのその他のオプション:
_ 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'
_
Xcode 8.3.2では、この問題は存在しません。 デバッグ->バックグラウンドフェッチのシミュレーションは、その仕事をします。シミュレーターでも動作します。
このメソッドが呼び出されます。
func application(_ application: UIApplication, performFetchWithCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
}
completionHandlerの後に@escapingを書くのを忘れた