Requesting Access to Protected Resources

Panther·2021년 7월 26일
0
post-custom-banner

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

"Provide a purpose string that explains to the user why you need access to protected resources."

보호된 리소스에 대한 접근이 왜 필요한지 사용자에게 설명하는 목적 스트링을 제공합니다.

Overview

현대 기기는 사용자에 대한 민감한 정보를 수집하고 저장합니다. 많은 앱이 이와 같은 데이터와 유용한 작업을 위해 데이터를 생성하는 기기 하드웨어에 의존합니다. 예를 들어 네비게이션 앱은 지도에서 사용자를 위치시키기 위해 사용자의 현재 GPS 좌표를 요구합니다. 하지만 모든 앱이 모든 데이터에 대한 접근을 요구하지는 않습니다. 네비게이션 앱이 사용자의 건강 정보, 카메라 인터페이스, 블루투스 주변기기를 요구하지는 않습니다.

앱은 수행할 기능에 대한 필요한 정보만 접근해야 합니다. 이 원칙을 지원하기 위해 애플의 운영체제는 기본값으로 보호된 데이터와 리소스에 대한 접근을 제한합니다. 앱은 상황과 맥락에 기반해 접근을 요청할 수 있습니다. 왜 접근이 필요한지에 대한 설명을 제공하면서 접근을 다룹니다. 사용자는 요청을 승인할지 거부할지를 결정합니다.

Tip
사용자에게 리소스 접근 허가를 묻는 것과 더불어 Entitlements에 설명된 것처럼 앱에 entitlement를 추가하는 것을 통해 의도를 분리해서 선언해야 합니다.

Provide a Purpose String

앱이 보호된 리소스에 처음으로 접근하길 시도하는 경우 시스템은 이에 대한 승인 여부를 알려줍니다. 아래 예시에서 보이는 것처럼 방향을 제공하는 MyRoute가 호출된 iOS 앱은 사용자의 위치에 대한 접근 요청을 보여줍니다.

만약 사용자가 승인하면, 시스템은 사용자의 선택을 기억하고 다시 요청에 대한 알림을 보내지 않습니다. 만약 사용자가 거절하면, 프롬프트와 다른 시도를 초기화한 접근 시도는 resource-specific way로 실패합니다. 위치 데이터에 대한 특정 케이스의 경우 사용자는 Allow Once를 탭함으로써 오직 한 번의 세션에서만 접근 허용을 선택할 수도 있습니다.

시스템은 앱의 이름을 포함해 프롬프트의 타이틀을 자동으로 생성합니다. 이 경우 앱에서 접근이 필요한 이유를 나타내기 위해 목적 스트링 혹은 사용 설명—이 경우 "당신의 위치는 목적지에 도착할 수 있도록 턴 바이 턴 방향을 제공하기 위해 사용됩니다."—이라고 부르는 메시지를 제공하게 될 것입니다. 사용자에게 왜 앱이 민감한 데이터에 접근할 필요가 있는지를 정확하고 간결하게 설명하는 것은 사용자가 정보를 갖춘 상태에서 의사결정을 내릴 수 있도록 도와주고, 접근을 허용할 가능성을 높여줍니다.

Note
외부 라이브러리 혹은 SDK를 사용하는 경우 목적 스트링을 요구하는 레퍼런스 API일 것입니다. 앱이 이 API를 사용하지 않는다고 해도 목적 스트링은 앱 리뷰에 요청될 것입니다. 라이브러리 혹은 SDK의 개발자에게 연락해서 개발자가 사용하는 보호된 리소스와 목적에 대한 정보를 요청할 수 있습니다. 혹은 API가 초함되지 않은 버전의 코드를 릴리즈하도록 요청할 수도 있습니다. 외부 SDK와 라이브러리 접근을 포함해 보호되는 리소스에 대한 모든 접근을 책임져야 합니다.

앱의 Information Property List에 추가하는 resource-specific key를 스트링 값으로 설정함으로써 사용 설명을 제공해야 합니다. 예를 들어 앞서 본 메시지는 NSLocationWhenInUseUsageDescription 키에 연관된 스트링입니다. Xcode에 내장된 property list editor를 사용해 Info.plist 파일을 수정하시기 바랍니다.

Important
만약 앱이 보호되는 리소스를 사용하는 경우 항상 사용 스트링을 제공해야 합니다. 그렇게 하지 않는다면, 리소스 접근 시도는 실패하게 되고, 앱에서 충돌이 발생할 수 있습니다.

앱 리뷰는 보호되는 리소스의 사용을 확인하고, 목적 스트링이 없는 채로 이와 같은 리소스에 접근하려는 코드를 포함한 앱을 허용하지 않습니다. 예를 들어 연락처에 접근하려는 앱은 NSContactsUsageDescription 키가 제공되어야 한다는 요구사항에 요구사항 정보를 담는, 아래와 같은 앱 리뷰를 받게 될 것입니다.

ITMS-90683: Missing Purpose String in Info.plist - Your app’s code references
one or more APIs that access sensitive user data. The app’s Info.plist file
should contain a NSContactsUsageDescription key with a user-facing purpose
string explaining clearly and completely why your app needs the data.

이 이슈를 해결하려면 앱이 왜 민감한 정보를 요구하는지 설명하는 목적 스트링을 제공해야 합니다. 혹은 리소스에 접근하려는 코드를 삭제해야 합니다.

Check for Authorization

보호되는 리소스에 접근을 제공하는 많은 시스템 프레임워크는 리소스를 사용하기 위한 authorization 확인 및 요청을 위한 전용 API가 있습니다. 이는 현재 접근이 갖는 것에 따라 앱의 작동을 조정할 수 있도록 해줍니다. 예를 들어 사용자가 앱 허용을 거절하면, UI로부터 관련 요소를 제거할 수 있습니다.

사용자가 설정을 사용해 어느 시점이라도 authorization을 변경시킬 수 있기 때문에 이에 접근하기 전 기능의 authorization 상태를 항상 확인하시기 바랍니다. 전용 API가 없는 경우 접근 실패를 처리할 준비가 되어야 합니다.

Reset Authorization Access

보호되는 리소스에 대해 첫 번째 시도 이후의 접근이 시도될 때, 시스템은 사용자의 허용 선택을 기억하고 다시 프롬프트를 보내지 않습니다. 사용자에게 다시 프롬프트를 보내려면 기기 혹은 시스템에 대해 이 리소스들의 접근을 리셋해야 합니다.

iOS 앱에서 보호되는 리소스에 대한 접근 허용을 리셋하려면, 설정 > 일반 > 재설정 > 위치 및 개인정보 재설정 순으로 탭해야 합니다.

Important
위치 & 개인정보 재설정을 사용하는 것은 기기에 대한 모든 서비스에 위치와 개인정보 설정을 리셋합니다.

macOS 앱에서 특정 서비스에 대한 허용을 리셋하려면, tccutil reset 커맨드를 터미널에서 실행해야 합니다. 예를 들어 애플이벤트에 대한 모든 허용을 리셋하려면 아래와 같이 입력해야 합니다.

$ tccutil reset AppleEvents

이 커맨드는 보호되는 리소스를 사용하는 모든 앱의 authorization 접근을 리셋합니다. 주소록, 캘린더, 리마인더, 혹은 다른 서비스에 대해서도 개별적으로 리셋할 수 있습니다.

post-custom-banner

0개의 댓글