見出し画像

AVFoundationを使用した写真撮影機能の実装方法

AVFoundationを使用して写真撮影機能を実装する方法についてまとめる。


権限リクエスト

アプリ内でiPhoneのカメラを使用して、撮影した写真を写真アルバムに保存するためには、カメラを使用する権限と、写真アルバムにアクセスするための権限が必要。

Info.plistファイルの編集

カメラを使用する権限をリクエストするためには、

  • Privacy - Camera Usage Description (NSCameraUsageDescription)

写真アルバムにアクセスする権限をリクエストするためには、

  • Privacy - Photo Library Usage Description (NSPhotoLibraryUsageDescription)

の各キーとリクエスト理由をInfo.plistファイルに追加する。

カメラを使用する権限のリクエスト

var isAuthorizedCamera: Bool {
    get async {
        let status = AVCaptureDevice.authorizationStatus(for: .video)
        var isAuthorized = status == .authorized
        if status == .notDetermined {
            isAuthorized = await AVCaptureDevice.requestAccess(for: .video)
        }
        
        return isAuthorized
    }
}
  • AVCaptureDevice.authorizationStatus(for: .video) でカメラを使用する権限ステータスを確認

  • AVCaptureDevice.requestAccess(for: .video) でカメラを使用する権限をリクエスト

AVCaptureDevice.authorizationStatus(for: .video) でカメラを使用する権限ステータスを確認する。
アプリ内で一度も権限リクエスト処理を行っていない時 (status が .notDetermined の時)は、 AVCaptureDevice.requestAccess(for: .video) でカメラを使用する権限のリクエストを行う。

写真アルバムにアクセスする権限のリクエスト

var isAuthorizedPhotos: Bool {
    get async {
        let status = PHPhotoLibrary.authorizationStatus(for: .readWrite)
        var isAuthorized = status == .authorized
        if status == .notDetermined {
            isAuthorized = await PHPhotoLibrary.requestAuthorization(for: .readWrite) == .authorized
        }
        
        return isAuthorized
    }
}
  • PHPhotoLibrary.authorizationStatus(for: .readWrite) で写真アルバムにアクセスする権限ステータスを確認

  • PHPhotoLibrary.requestAuthorization(for: .readWrite) で写真アルバムにアクセスする権限をリクエスト

PHPhotoLibrary.authorizationStatus(for: .readWrite) で写真アルバムにアクセスする権限ステータスを確認する。
アプリ内で一度も権限リクエスト処理を行っていない時 (status が .notDetermined の時)は、PHPhotoLibrary.requestAuthorization(for: .readWrite) で写真アルバムにアクセスする権限のリクエストを行う。

Task 内で上記各プロパティにアクセスすることで、カメラを使用する権限、写真アルバムにアクセスする権限ステータスを確認することができる。

Task {
    guard await isAuthorizedCamera else { return }
    guard await isAuthorizedPhotos else { return }
}

キャプチャセッションの構築

キャプチャセッションは、カメラやマイクなどの入力デバイスと、写真や動画といった出力情報を繋げる役割を担うクラス。写真や動画を撮影するために、キャプチャセッションを構築する。

カメラデバイス取得ユーティリティ列挙型

キャプチャセッションの構築を行う前に、以下のコードのようなカメラデバイスを簡単に取得することができるユーティリティ列挙型を用意しておくと、後々カメラアプリの機能を拡張する時に役立つ。

ここから先は

8,231字 / 1画像

¥ 200

最後まで記事をお読みいただきありがとうございます! 記事が参考になればフォロー・♥いただけると凄く励みになります🥳