ObjecTips

Swift & Objective-C で iOS とか macOS とか

iOS 8.3 to iOS 9.0 API Differences CoreLocation

iOS 9 での CoreLocation の変更点

関連記事は以下
iOS 8.3 to iOS 9.0 API Differences Core Image - ObjecTips
iOS 8.3 to iOS 9.0 API Differences オーディオ周り - ObjecTips
iOS 8.3 to iOS 9.0 API Differences ネットワークとWeb周り - ObjecTips
iOS 8.3 to iOS 9.0 API Differences CoreLocation - ObjecTips
iOS 8.3 to iOS 9.0 API Differences CoreTelephony - ObjecTips

CoreLocation

CLLocationManager
@property(assign, nonatomic) BOOL allowsBackgroundLocationUpdates __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_9_0) __WATCHOS_PROHIBITED;

Info.plist の UIBackgroundModes に location を指定してユーザがアプリ内でバックグラウンドでの位置情報の使用を許可すると CLLocationManager でのバックグラウンドでの位置情報の更新が可能になるが、その際にはこのプロパティを YES にするのが必須との事。

逆にこれを NO に設定する事で(バックグラウンドでの位置情報が許可されたアプリでも)バックグラウンドで位置情報を使用しないようにアプリ内で動作の切り替え行う事もできる。
おそらくそれと同等の機能を自前で実装しようとすると UIApplication の通知を受け取ってアプリがバックグラウンドにいく際に CLLocationManager を停止して、アプリがフォアグラウンドに来た時に再度スタートさせるといった処理が必要になる。

次にこのメソッド

- (void)requestLocation __OSX_AVAILABLE_STARTING(__MAC_NA, __IPHONE_9_0);

これまでは位置情報の取得を開始すると位置情報の更新 delegate メソッドが継続的に呼ばれる仕組みだったのが、このメソッドでは単発で位置情報をリクエストする事ができるようになった!
このメソッドはこれまでの継続的な位置情報取得を開始する startUpdatingLocation メソッドとは同時には使用できない。また startUpdatingLocation を使用した時と同じく stopUpdatingLocation メソッドでリクエストをキャンセルする事が可能。

このメソッドiOS と watchOS で実行する事ができる。

CLPlacemark
@property (nonatomic, readonly, copy) NSTimeZone *timeZone NS_AVAILABLE(10_11,9_0);

タイムゾーンが取得可能に


  • SNSアプリで位置情報付きの写真の投稿する
  • メッセージングアプリで相手へ自分の位置情報を伝える

こういったケースでは継続的な位置情報は必要なく、今現在の位置情報が取得できればいいので requestLocation での単発の位置情報取得が便利に使える。

  • スポーツ・フィットネス系アプリでコースをロギングをする

このようなケースでは従来の startUpdatingLocation での継続的な位置情報の取得を行う。

watchOS では requestLocation とリクエスト停止のための stopUpdatingLocation メソッドが利用可能だが、継続的な位置情報の取得とそのメソッド startUpdatingLocationiOS の方でしか利用できない。
watchOS から継続的な位置情報の取得を開始するには WatchConnectivity を利用して watchOS から iOSstartUpdatingLocation を実行するためのトリガー情報を送り(プロトコルは自前で作る) iOS側でメソッドを呼び出して位置情報の継続的な取得を開始する。
そしてiOS側で取得した位置情報をまた WatchConnectivity を使って watchOS 側へ送信してやる。
iOSアプリは起動していない前提なのでバックグラウンドでの位置情報の利用が必須となる。

この実装例は WWDC2015 Apple SampleCode の PotLoc で確認できる。
https://developer.apple.com/sample-code/wwdc/2015/


参考

WWDC2015 Session 714 What’s New in Core Location のビデオのURLはこちら
https://developer.apple.com/videos/wwdc/2015/?id=714

今現在おそらくミスでPDFのダウンロードリンクが存在していないがPDFは以下のURLからダウンロードできる。
PDFリンク http://devstreaming.apple.com/videos/wwdc/2015/714tqy593v/714/714_whats_new_in_core_location.pdf?dl=1


Apple に BugReport を送ったら10日程で連絡が来て、PDFリンクが表示されるようになった。