ObjecTips

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

Photos.framework でスクリーンショット画像の一覧を取得する

iOS 9 β2で

PHAssetMediaSubtypePhotoScreenshot NS_AVAILABLE_IOS(9_0) = (1UL << 2)

が追加された。

これを使えば写真ライブラリからスクリーンショット画像のみを取得したり、逆にスクリーンショットを排除した画像一覧を取得する事ができる。
コードは以下

まず全ての画像アセットを取得し、enumarate する際に PHAssetMediaSubtypePhotoScreenshot マスクを使ってスクリーンショットのみを抽出する。
取得した PHAsset から画像データを取得するには PHImageManager を用いる。

実機で試したところ2009年から現在までのスクリーンショットが正しく取得できた。
保存されている画像のメタデータか何かにスクリーンショットであるという情報が入っているのか、それとも何かスクリーンショット判定のロジックが入っているのか?

PHPhotoLibrary の変更通知と合わせればスクリーンショットが撮られた事を検出するのにも使えそう。