[swift] Swift 퍼미션(Permission) 사용 시 허용되지 않은 권한 가져오기.

앱 개발 중에 사용자의 권한을 관리해야 할 때가 있습니다. 사용자로부터 퍼미션(Permission)을 요청하고, 허용되지 않은 권한을 접근하는지 확인해야 할 때가 그런 경우입니다.

이번 글에서는 Swift를 사용하여 앱에서 허용되지 않은 권한을 가져오는 방법에 대해 알아보겠습니다.

Step 1: Info.plist에 권한 추가하기

먼저, Info.plist 파일에 앱에서 사용할 권한을 추가해야 합니다. 예를 들어, 카메라에 접근하기 위해서는 “NSCameraUsageDescription” 키와 해당 권한에 대한 설명을 값을 설정해야 합니다.

<key>NSCameraUsageDescription</key>
<string>카메라를 사용하기 위해 접근 권한이 필요합니다.</string>

다른 권한도 마찬가지로 추가하면 됩니다.

Step 2: 허용되지 않은 권한 확인하기

다음으로, 허용되지 않은 권한을 가져오기 위해 PHPhotoLibrary 클래스를 사용하겠습니다. 이 클래스는 앨범에 접근할 수 있는 권한을 확인할 수 있습니다.

import Photos

func checkPhotoLibraryPermission() {
    let status = PHPhotoLibrary.authorizationStatus()
    switch status {
    case .authorized:
        // 권한이 허용되었을 때의 동작
        break
    case .denied, .restricted:
        // 권한이 거부되었거나 제한되었을 때의 동작
        break
    case .notDetermined:
        // 아직 사용자가 응답하지 않았을 때, 권한 요청
        PHPhotoLibrary.requestAuthorization { status in
            if status == .authorized {
                // 권한이 허용되었을 때의 동작
            } else {
                // 권한이 거부되었거나 제한되었을 때의 동작
            }
        }
    }
}

위의 코드에서는 PHPhotoLibrary.authorizationStatus() 메서드를 사용하여 현재 앨범 권한의 상태를 확인합니다. authorized인 경우에는 권한이 허용되었고, denied 또는 restricted인 경우에는 권한이 거부되었거나 제한되었습니다. 만약 notDetermined인 경우에는 아직 사용자가 응답하지 않았으므로, PHPhotoLibrary.requestAuthorization() 메서드를 사용하여 권한을 요청합니다.

Step 3: 퍼미션 사용 시 주의사항

권한을 요청할 때, 사용자에게 자세한 설명을 제공하여 왜 해당 권한이 필요한지 알려주는 것이 좋습니다. 이는 앱의 Info.plist에 추가한 설명을 활용하면 됩니다.

PHPhotoLibrary.requestAuthorization { status in
    if status == .authorized {
        // 권한이 허용되었을 때의 동작
    } else {
        let alert = UIAlertController(title: "권한 필요", message: "사진 앨범에 접근하기 위해 권한이 필요합니다.", preferredStyle: .alert)
        let settingsAction = UIAlertAction(title: "Settings", style: .default) { _ in
            DispatchQueue.main.async {
                if let settingsUrl = URL(string: UIApplication.openSettingsURLString) {
                    UIApplication.shared.open(settingsUrl)
                }
            }
        }
        let cancelAction = UIAlertAction(title: "Cancel", style: .cancel)
        
        alert.addAction(settingsAction)
        alert.addAction(cancelAction)
        
        self.present(alert, animated: true)
    }
}

위의 코드에서는 권한이 거부된 경우에는 알림창을 표시하고, “Settings” 버튼을 통해 설정 화면에서 권한을 변경할 수 있는 창을 열어줍니다.

결론

앱 개발 중에 사용자의 퍼미션을 관리하는 것은 매우 중요합니다. 앱에서 허용되지 않은 권한을 가져오지 못하도록 예외 처리하는 것은 사용자 경험을 향상시키는 데 도움이 됩니다. Swift를 사용하여 퍼미션 사용 시 허용되지 않은 권한을 가져오는 방법을 익혀두면 앱을 개발하는 데 도움이 될 것입니다.

참고 자료