Swift(스위프트): 카메라 및 사진 라이브러리 권한 물어보기 + UIImagePickerController를 이용한 사진 추가 (스토리보드)

기본적으로 아래 글과 동일한 내용이나 사용성이 개선되었습니다.

 

코드 목록

코드에 대한 설명은 밑에 있습니다.

절차

0. info.plist에서 권한 허용을 묻는 메시지를 설정합니다.

 

1. 위의 코드 중 PhotoAuth.swift 파일을 프로젝트에 추가합니다.
  • 이 파일을 추가하면 권한 설정을 자동으로 처리하고 클로저의 내용을 실행하는 아래 함수를 이용할 수 있습니다.
    • func authPhotoLibrary(_ viewController: UIViewController, completion: @escaping () -> ())
    • func authDeviceCamera(_ viewController: UIViewController, completion: @escaping () -> ())
  • simpleAlert(...) 함수는 경고창을 실행하는 함수입니다. 필요한 경우 추가해서 사용하면 됩니다.
  • 권한 여부에 따른 메시지를 따로 작성할 수 있도록 변수로 빼놨습니다.

 

2. 스토리보드에서 UI를 생성하고, 컨트롤러 파일과 연결합니다.

 

3. 위의 코드 목록 중 PhotoViewController.swift 파일을 참고하여 사진 선택 기능을 구현합니다.
  1. 이미지 피커 컨트롤러(UIImagePickerController)를 멤버 변수 목록에 추가합니다.
    • 참고로 사진 라이브러리에서 이미지 피커 컨트롤러는 deprecated 되고, 애플은 iOS 14이상부터는 PHPickerViewController 사용을 권장하고 있지만 일단 iOS 15에서도 이미지 피커는 사용 가능합니다.
    • 이미지 피커와 비교하면, PHPickerViewController는 복수 사진 선택 가능(이미지 피커는 한 개만 가능), 일부의 사진에만 권한 부여 가능(이미지 피커는 이 부분이 정상 작동하지 않습니다), 사진 선택시 편의 기능 추가 등의 차이가 있습니다.
  2. viewDidLoad()에서 이미지 피커에 딜리게이트(delegate)를 할당합니다.
  3. 이미지 피커를 사용하기 위해 UIImagePickerControllerDelegate, UINavigationControllerDelegate 를 구현하는 extension을 추가합니다.
  4. 카메라 또는 사진 라이브러리에서 사진을 찍거나 선택했을 경우 실행할 내용을 func imagePickerController(.....didFinishPickingMediaWithInfo:.....) 함수 내에 구현합니다.
    • 사진이 선택된 경우 info[.originalImage] as? UIImage 에 이미지가 담기게 되며, 이 이미지를 imgView.image에 할당하면 앱 화면에 선택한 이미지가 표시됩니다.
  5. 버튼을 누르면 실행되는 함수에 authDeviceCamera(...) 또는 authPhotoLibrary(...) 를 추가합니다.
    • 이 함수를 추가하면 권한 관련 작업을 먼저 실행하고, 권한 정보가 없거나 거부되었다면 그에 맞는 작업을 우선 실행합니다.
    • 권한이 허용되었다면 클로저 함수를 실행합니다.

 

실행 화면

앱 설치 후 최초 실행 시 권한을 묻는 화면이 나타납니다.

 

 

시스템의 설정 앱에서 사진 접근 권한을 거부한 경우

 

 

사진을 선택하고자 하는 경우 경고창이 뜨면서 권한 설정 변경을 유도합니다. Yes를 클릭하면 시스템의 설정 앱으로 이동합니다.

 

 

권한 허용된 경우 사진 선택창이 나타납니다.

 

 

꽃 사진을 선택하면 화면에 표시됩니다.