質問: 現在ヘルスケアアプリを作っており、アプリ起動中にCoreMotionで取得したデータをHealthKitのある場所に数値のデータとして格納するといったことをしています。これをアプリ起動中ではなく常にバックグラウンドで行いたいのですがどうすればいいでしょうか。
回答: 趣味プログラマです。 間違ってたら申し訳ないですが、自分の勉強のためにも調べたので、回答させていただきます。 swift 2.2 ========= ネットで調べたところ、 日本語ではswift2.2でのバックグラウンドでの処理の継続の仕方が見つかりました。 AppDelegate.swiftに数行書くだけで、 本体の処理プログラム自体に紐付けしなくても実現できるとはすごいですね。 NSTimer利用で自分の環境(swift2.2)でうまく動く事を確認済みです。 swift 3.0 ========= 自分の環境ではないので、少し自信が減りますが、 詳しく解説してある英語のサイトによると、、、 希望の機能になると、 1CoreLocation利用(ページ内「Receiving Location Updates」) 2全ての場合に利用できる(ページ内「Perform finite-length tasks: 」) のいずれかであると推測しました。 1の場合、 1.アプリtopのtargetを選びCapabilitiesの中から - ページ中「Back in Xcode, do the following:」以下) 2.BackGroundをOnにし、開き、中のLocation updatesにチェックを入れる 3.Info.plistにNSLocationAlwaysUsageDescriptionキーを追加する - あれ?これってGPS取得するのに必要な基本的なものですよね? と記載されています。 2の場合は、 ページ内「Performing Finite-Length Tasks... or, Whatever」以下 正確にはバックグラウンド処理ではなく、APIとのことです。 手順は 1.5つのpropertiesを処理を行うviewに追加 2. と続けたいものの、 あとは細くなるので、実際のページを何とか読んでもらうか コードをコピーするか、サンプルコードをDLして、動かしてみるなどで、 なんとか理解してもらえると助かります。 ちなみにこのページで再三バックグラウンド処理に関して、 電池の消耗などの点で本当に必要かどうか、安易に使用しないように、 再度検討する事、審査でも厳しくなるとされていますので、 リリースアプリとするなら、コードの際は方法に注意や工夫が必要かもしれません。 最後の方は答えになってなく申し訳ないです。 助けになれば幸いです。