前提・実現したいこと
CloudKitに関して質問です。
現在、開発中のアプリはバックグラウンドで位置情報を利用しているのですが(画像)、
アプリを開かずとも移動したらレコードを更新する、という処理をしたいです。
発生している問題
バックグラウンドで、位置情報は利用できるがレコードの更新はできない。
アプリを開いている間は、移動するとレコードを更新する処理ができています。
該当のソースコード
#####MapViewController.swift
Swift
1 2@IBOutlet weak var mapView: MKMapView! 3var locationManager: CLLocationManager! 4 5override func viewDidLoad() { 6 super.viewDidLoad() 7 8 mapView.delegate = self 9 10 locationManager = CLLocationManager() 11 locationManager.delegate = self 12 13 // 位置情報取得の許可を得る 14 locationManager.requestAlwaysAuthorization() 15 // 位置情報の更新を指示 16 locationManager.startUpdatingLocation() 17 // バックグラウンドでの位置情報更新を許可 18 locationManager.allowsBackgroundLocationUpdates = true 19 20}
Swift
1// 位置情報更新時 2func locationManager(_ manager: CLLocationManager, didUpdateLocations locations:[CLLocation]) { 3 recordLocation() 4}
Swift
1func recordLocation() { 2 3 let publicDatabase = CKContainer.default().publicCloudDatabase 4 5 let predicate = NSPredicate(format: "accountID == %@", argumentArray: [myID!]) 6 let query = CKQuery(recordType: "Accounts", predicate: predicate) 7 8 // 検索したレコードの値を更新 9 publicDatabase.perform(query, inZoneWith: nil, completionHandler: {(records, error) in 10 11 if let error = error { 12 print("レコードの位置情報更新エラー1: (error)") 13 return 14 } 15 16 for record in records! { 17 18 record["currentLocation"] = self.mapView.userLocation.location 19 20 publicDatabase.save(record, completionHandler: {(record, error) in 21 22 if let error = error { 23 print("レコードの位置情報更新エラー2: (error)") 24 return 25 } 26 print("レコードの位置情報更新成功") 27 }) 28 } 29 }) 30}
現在、レコードが更新されるのはアプリを開いているときのみです。
バックグラウンドで処理する方法がございましたら、どのようにすればいいか教えていただきたいです。
試したこと
CloudKitに関連したバックグラウンドの機能としては、プッシュ通知を実装しています。
補足情報(FW/ツールのバージョンなど)
Xcode 12.2
Swift 4.2
ここまで読んでくださり、ありがとうございます。
質問に至らぬ点があるかもしれませんが、どうぞよろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。