ObjecTips

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

Photos.framework でカメラロールを取得する

Photos.framework でカメラロールを取得する方法が分かり辛かったので備忘


fetchAssetCollectionsWithType:subtype:options: メソッドの引数の type で
PHAssetCollectionTypeAlbum を指定した場合、写真アプリで作成したものとiTunesで同期したアルバムの一覧が取得できる。
PHAssetCollectionTypeSmartAlbum ではバースト、カメラロール、最後に追加した項目などのシステム作成のアルバム一覧が取得できる。
PHAssetCollectionTypeMoment では時間と位置情報にもとづくグループ(モーメント)が取得できる。

写真アプリの「アルバム」タブにはバースト、カメラロール、人々、自分で作成したアルバムとフォルダ等々がまとめて表示されているので、PHAssetCollectionTypeAlbumPHAssetCollectionTypeSmartAlbum の混合が表示されている事になる。「アルバム」という名称に惑わされてこの点がちょっと分かり辛かった。

PHAssetCollectionTypeSmartAlbum で利用可能な subtype は以下のようになる。

PHAssetCollectionSubtype localizedTitle Available iOS
PHAssetCollectionSubtypeSmartAlbumGeneric *1
PHAssetCollectionSubtypeSmartAlbumPanoramas パノラマ
PHAssetCollectionSubtypeSmartAlbumVideos ビデオ
PHAssetCollectionSubtypeSmartAlbumFavorites お気に入り
PHAssetCollectionSubtypeSmartAlbumTimelapses タイムラプス
PHAssetCollectionSubtypeSmartAlbumAllHidden 非表示
PHAssetCollectionSubtypeSmartAlbumRecentlyAdded 最後に追加した項目
PHAssetCollectionSubtypeSmartAlbumBursts バースト
PHAssetCollectionSubtypeSmartAlbumSlomoVideos スローモーション
PHAssetCollectionSubtypeSmartAlbumUserLibrary カメラロール*2
PHAssetCollectionSubtypeSmartAlbumSelfPortraits セルフィー 9.0
PHAssetCollectionSubtypeSmartAlbumScreenshots スクリーンショット 9.0
PHAssetCollectionSubtypeSmartAlbumDepthEffect ポートレート 10.2
PHAssetCollectionSubtypeSmartAlbumLivePhotos Live Photos 10.3
PHAssetCollectionSubtypeSmartAlbumAnimated アニメーション 11.0
PHAssetCollectionSubtypeSmartAlbumLongExposures 長時間露光 11.0

*1:ドキュメントには A smart album of no more specific subtype. This subtype applies to smart albums synced to the device from iPhoto. との記載があるが、iPhoto から同期したスマートアルバムは PHAssetCollectionTypeAlbum と PHAssetCollectionSubtypeAlbumSyncedAlbum の組み合わせで取得できるようになっていて、PHAssetCollectionSubtypeSmartAlbumGeneric では取得できない。

*2:iCloud フォトライブラリを利用時は「カメラロール」ではなく「すべての写真」となる