はじめに
本業のアプリをAppStoreConnectにアップロードした際にリジェクトを喰らいました。
Missing Purpose String in Info.plist File. Your app's code references one or more APIs that access sensitive user data. The app's Info.plist file should contain a NSLocationWhenInUseUsageDescription key with a user-facing purpose string explaining clearly and completely why your app needs the data.
簡単に訳すと、Info.plistにNSLocationWhenInUseUsageDescription keyを追加してくれ!
と書いてます。
NSLocationWhenInUseUsageDescriptionはフォアグラウンドで位置情報を必要とするアプリではInfo.plistに追加しないといけませんが、自分がアップロードしようとしたアプリではそもそも位置情報サービスを必要としていなかったので非常に困りました。
何が原因かを調べていくうちに導入していたOneSignal iOS SDK
が悪さをしてました。
原因
OneSignal iOS SDKを使用するとジオフェンス機能
を用いたプッシュ通知を使用することができるそうで、この部分がアプリが実際に位置情報サービスを使用していない場合でも位置情報サービスを使用するアプリと認識してしまう
そうです。
ジオフェンス機能とは、任意の場所を指定し、その圏内を出入りするとあらかじめ決めていた作業を自動で行なってくれるというものです。
ジオフェンス機能を用いたプッシュ通知では、例えばコンビニの近くを通ったりすると、プッシュ通知でクーポンを受け取ったり出来ます。
解決方法
info.plistにNSLocationWhenInUseUsageDescriptionを追加し、OneSignal.setLocationShared(false)を呼び出すだけです。
OneSignal.setLocationSharedは位置情報の収集を無効または有効にするAPI
でfalseを指定している為、位置情報を使用されることはありません。
最後に
同じようにリジェクトになった方の中には、「Info.plistにNSLocationWhenInUseUsageDescriptionとNSLocationAlwaysUsageDescriptionを追加して下さい
」と言われてました。
なのでもうリジェクトを喰らいたくなかった自分は、念には念という事でNSLocationAlwaysUsageDescriptionも追加してアップロードした所、リジェクトが消えました!
めでたし。
参考にしたもの
Your app "infomobi" (Apple ID: XXX) has one or more issues - on deploy