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 }
}
キャプチャセッションの構築
キャプチャセッションは、カメラやマイクなどの入力デバイスと、写真や動画といった出力情報を繋げる役割を担うクラス。写真や動画を撮影するために、キャプチャセッションを構築する。
カメラデバイス取得ユーティリティ列挙型
キャプチャセッションの構築を行う前に、以下のコードのようなカメラデバイスを簡単に取得することができるユーティリティ列挙型を用意しておくと、後々カメラアプリの機能を拡張する時に役立つ。
ここから先は
¥ 200
最後まで記事をお読みいただきありがとうございます! 記事が参考になればフォロー・♥いただけると凄く励みになります🥳