본문 바로가기

공부/iOS

iOS - Requesting Access to Protected Resources(보호 자원에 대한 액세스 요청)

안녕하세요. brody입니다.

이번 시간에는 2020/08/01 - [공부/iOS] - iOS - Protecting the User’s Privacy(유저 개인정보 보호) 글에 이어서 보호자원에 대한 액세스 요청 문서에 대해서 볼게요.

 

그럼 바로 시작할게요!

애플 문서 원문은 아래에서 확인할 수 있어요!

https://developer.apple.com/documentation/uikit/protecting_the_user_s_privacy/requesting_access_to_protected_resources

 


Requesting Access to Protected Resources(보호 자원에 대한 액세스 요청)

보호된 리소스에 액세스해야하는 이유를 사용자에게 설명하는 목적 문자열(purpose string)을 제공해야 합니다.

 

OverView

최신 기기는 사용자에 대한 많은 민감한 정보를 수집하고 저장합니다.

 

많은 앱이 이러한 종류의 데이터와 유용한 하드웨어 작업을 수행하기 위해 이를 생성하는 장치 하드웨어에 의존합니다.

(디바이스에서 탑제되어 있는 하드웨어 센서 같은 거 말하는 거 같아요)

 

예를 들어, 네비게이션 앱은 지도에서 사용자를 찾으려면 사용자의 현재 GPS 좌표가 필요합니다.

 

그러나 모든 앱이 모든 데이터에 액세스 할 필요는 없습니다.

 

동일한 네비게이션 앱에는 사용자의 건강 기록, 카메라 인터페이스 또는 Bluetooth 주변 장치가 필요하지 않습니다.

 

앱은 작업을 수행하는데 필요한 항목만 액세스해야 합니다.

 

이 원칙을 지원하기 위해 Apple 운영체제는 기본적으로 보호된 데이터와 리소스에 대한 액세스를 제한합니다.

(모든 리소스에 대한 것을 막아놓고 필요한 것만 쓸 수 있게끔 지원하고 있죠!)

 

앱은 사례별로 액세스를 요청하여 액세스가 필요한 이유에 대한 설명을 제공합니다.

 

사용자는 요청을 허용할지 또는 거부할지 결정합니다.

 

TIP

사용자에게 리소스 액세스 권한을 요청하는 것 외에도 Entitlements에 설명된 대로 앱에 권한을 추가하여 권한을 별도로 선언해야 하는 경우도 있습니다.

 

 

Provide a Purpose String (목적 문자열 제공)

앱이 처음으로 보호된 리소스에 액세스를 시도할 때 시스템은 사용자에게 권한을 묻는 메시지를 표시합니다.

 

다음 예에서 방향을 제공하는 MyRoute라는 iOS 앱은 사용자 위치에 대한 액세스를 요청하는 프롬프트를 생성합니다.

 

 

사용자가 권한을 부여하면 시스템은 사용자의 선택을 기억하고 다시 묻지 않습니다.

(매번 앱을 킬때마다 혹은 기능을 사용할 때마다 물어보면 짜증 나겠죠?? 아주 좋네요!)

 

사용자가 권한을 거부하면 프롬프트를 시작한 액세스 시도 및 추가 시도가 리소스 별 방식으로 실패합니다.

 

위치 데이터에 액세스하는 특별한 경우 사용자는 한 번 허용을 탭 하여 한 세션에 대해서만 액세스를 허용하도록 선택할 수 있습니다. 

 

시스템은 앱 이름을 포함하는 프롬프트를 자동으로 생성합니다.

 

앱에서 액세스가 필요한 이유를 나타내기 위해 목적 문자열 또는 사용 설명(위 이미지의 Your location is used to provide turn-by-turn directions to your destination)이라는 메시지를 제공합니다.

 

앱이 중요한 데이터에 액세스해야 하는 이유를 사용자에게 정확하고 간결하게 설명하면 사용자는 정보에 근거한 결정을 내리고 액세스 권한을 부여할 가능성을 높일 수 있습니다.

 

(목적문자열이 한글로는 어려운데 purpose String으로 권한 요청받을 때 멘트 넣는 거 말하는 거네요!)

 

 

NOTE

외부 라이브러리 또는 SDK를 사용하는 경우 목적 문자열이 필요한 API를 참조할 수 있습니다.

앱에서 이러한 API를 사용하지 않을 수 있지만 App Review에는 여전히 목적 문자열이 필요합니다.

라이브러리 또는 SDK 개발자에게 문의하여 개발자가 사용하는 보호된 리소스와 그 용도에 대한 정보를 요청하거나 개발자가 API가 포함되지 않은 코드 버전을 릴리스하도록 요청할 수 있습니다.

외부 SDK 및 라이브러리 액세스를 포함하여 보호된 리소스에 대한 모든 액세스는 귀하의 책임입니다.

(아마도... 외부 라이브러리에서 지도 기능을 사용할 때 앱에서 목적 문자열을 입력해줘야 된다는 거 같은데요..? 자세히는 이해가 안 되네요..)

 

 

앱의 정보 속성 목록 파일(information property list file)에 추가하는 리소스 별 키의 문자열 값을 설정하여 사용 설명에 제공합니다.

 

예를 들어 위에 표시된 메시지는 LSNSLocationWhenInUseUsageDescription와 관련된 문자열입니다.

 

Xcode에 내장된 속성 목록 편집기를 사용하여 Info.plist 파일을 수정하세요.

 

 

IMPORTANT

앱에서 보호된 리소스를 사용하는 경우 항상 사용 문자열을 제공해야 합니다.

그렇지 않으면 리소스에 액세스 하려는 시도가 실패하고 앱이 중단될 수 있습니다.

 

App Review는 보호된 리소스 사용을 확인하고, 목적 문자열 없이 해당 리소스에 액세스 하는 코드가 포함 된 앱을 거부합니다.

 

예를 들어 연락처에 액세스 하는 앱은 NSContactsUsageDescription 키가 있어야 한다는 요구 사항에 대한 App Review로 부터 다음 정보를 수신할 수 있습니다.

 

 

이 문제를 해결하려면 앱이 이 중요한 정보에 액세스해야 하는 이유를 설명하는 목적 문자열을 제공하거나 리소스에 액세스하는 코드를 제거해야 합니다.

(쓰고 싶으면 사용하는 이유와 목적을 꼭 사용자에게 알리고 동의를 받아야 해요!)

 

Check for Authorization(인증 확인)

보호된 리소스에 대한 액세스를 제공하는 많은 시스템 프레임워크에는 해당 리소스 사용 권한을 확인하고 요청하기 위한 전용 API가 있습니다.

 

이를 통해 현재 액세스 권한에 따라 앱의 동작을 조정할 수 있습니다.

 

예를 들어, 사용자가 앱에 대한 작업 권한을 거부하는 경우 사용자 인터페이스에서 관련 요소를 제거할 수 있습니다.

 

사용자는 설정을 사용하여 언제든지 권한을 변경할 수 있으므로 기능에 액세스 하기 전에 항상 기능의 권한 상태를 확인해야 합니다.

 

전용 API가 없는 경우 액세스 실패를 정상적으로 처리할 수 있도록 준비해야 합니다.

 

 

Reset Authorization Access(인증 액세스 재설정)

위에서 말했듯이 앱이 보호된 리소스에 액세스 할 때 사용 용도 메시지와 함께 사용자 동의를 구합니다. 그리고 만약 동의를 했다면 다음부터는 사용 권한 선택을 기억하고 다시 확인하지 않습니다.

 

사용자에게 다시 메시지를 표시하려면 장치 또는 시스템에서 이러한 지원에 대한 액세스를 재설정해야 합니다.

 

iOS 앱에서 보호된 리소스에 대한 권한 액세스를 재설정하려면 기기에서 

설정 > 일반 > 재설정 > 위치 및 개인 정보 재설정을 누릅니다.

 

IMPORTANT

위에 나온 위치 및 개인 정보 재설정을 사용하면 장치의 모든 서비스에 대한 위치 및 개인 정보 설정이 재설정됩니다.

 

macOS 앱에서 특정 서비스에 대한 권한을 재설정하려면 터미널에서 tccutil reset <service name> 명령을 실행하십시오.

 

예를 들어 AppleEvents에 대한 모든 권한을 재설정하려면 다음과 같이 입력하세요.

 

 

이 명령은 보호된 리소스를 사용하는 모든 앱에 대한 권한 부여 액세스를 재설정합니다.

 

주소록, 캘린더, 알림 또는 기타 서비스를 비슷하게 지정하여 개별적으로 재설정할 수 있습니다.

 


오늘은 Requesting Access to Protected Resources에 대해서 알아봤는데요.

 

역시 애플이 보안에 신경을 많이 쓰고 있구나...라고 생각이 드네요.

 

원래 앱을 개발할 때 당연하다고 생각하고 했던 것들을 문서로 보니까 좀 신기하네요.. 

 

애플 문서를 보면 엄청 방대해서 조금씩 알아가는 재미가 있네요!

 

UIKit의 끝이 보이지 않지만 계속 공부해볼게요!

 

그럼 오늘은 여기까지 ~

 

ㅅㄱㄹ!