[iOS9]MPMediaLibraryAuthorizationのavailableに惑わされた件


この記事について

iOS 8からiOS 10のあたりってApple Musicが発表されたり、メディアライブラリへのパーミッション設定が必須になったりと音楽関係のライブラリが大きく変わっているタイミングなんですよね。

それもあってかiOS 9.3.5の環境の動作がゴチャってました。
だいぶ今更感もありますが、パーミッション部分の整理しました。

参考

[iOS] iOS 9.3 の新機能を使用して Apple Music の曲の再生とライブラリへの追加を行う
[iOS 10] 各種ユーザーデータへアクセスする目的を記述することが必須になるようです

結論

 もう面倒だし、対応バージョンiOS 10以降でいいんじゃね?
 パーミッションの差異を気をつけつつ、バージョンに合った動作をさせましょう。
 - MPMediaLibraryAuthorization(ミュージックライブラリを参照したい場合)
  → iOS 10以降からチェックする。(iOS 9.3系ではチェックしない)
 - SKCloudServiceAuthorizationStatusAuthorized(AppleMusicを扱いたい場合)
  → iOS 9.3以降からチェックする。

事象

 MPMediaLibraryAuthorization@available(iOS 9.3, *)なのでiOS 9環境でもパーミッション確認を出すことができます。

 しかし、パーミッションの設定に関係なく、ライブラリが参照できます。

 そのため、許可してないのにライブラリ全部表示されてしまい、小一時間苦悩しました。。
 加えて、パーミッションの設定画面も「MEDIA_LIBRARY」と書かれており、明らかにローカライズが準備されてない表示です。。

最後に

 iOS 9.3.0 〜 iOS9.3.5というかなり限定的なバージョンのお話になってしまいましたが、
 流石にiOS9のマイナーバージョンアップは無いでしょうし、アプリケーション側でカバーしてあげる必要があります。
 正直致命的でもないですし、下位互換性の気遣いあるアプリを作るという面で少しでもお役に立てたら幸いです。

 んーでも、やっぱり対応バージョンをiOS 10以降にした方がよくね。