-Today's Learning Content-

  • PrivacyInfo

1. PrivacyInfo

내용정리

Apple은 개인정보 보호 강화를 위해 PrivacyInfo.xcprivacy 파일을 도입했다. 2024년 5월 1일부터 AppStore에 앱을 제출하려면 특정 API를 사용할 경우 이에 대한 이유를 명시해야 한다.
이번에는 PrivacyInfo의 개념과 서드파티 라이브러리를 사용할 때의 관계와 설정에 대해 작성해보려고 한다.

1) PrivacyInfo란?

1️⃣ Apple의 개인정보 보호 정책

Apple은 앱이 사용자 데이터를 수집하거나 특정 API를 사용할 때 투명성을 높이기 위해 개인정보 보호 관련 사항을 명확히 공개하도록 요구한다.
특히, 일부 API는 Required Reason API로 지정되어, 이를 사용할 경우 사용 목적을 설명해야 한다.

2️⃣ PrivacyInfo의 역할

PrivacyInfo는 앱이 사용되는 개인정보 관련 API 및 데이터 수집 사항을 명시하는 Plist 파일이다.

이 파일에는 다음과 같은 정보가 포함된다.

  • NSPrivacyAccessedAPITypes:

    • 앱이 사용하는 특정 API
    • UserDefaults, DiskSpace API 등
  • NSPrivacyCollectedDataTypes:

    • 앱이 수집하는 데이터 유형
    • 위치 정보, 사용자 ID, 디바이스 정보 등
  • **NSPrivacyTracking:

    • 앱이 데이터 광고 추적 목적으로 사용하는지 여부

2) 외부 라이브러리와 PrivacyInfo

1️⃣ UI 라이브러리

SnapKit과 같은 UI 구성용 라이브러리는 사용자 데이터를 수집하지 않으며, Required Reason API를 사용하지 않는다. 때문에 PrivacyInfoSnapKit과 관련된 정보를 추가할 필요는 없다.

이처럼 UI와 관련된 라이브러리로, 사용자 데이터를 수집하거나 특정 API를 사용하지 않는다면 라이브러리에 관련된 정보를 PrivacyInfo에 추가할 필요는 없다.

2️⃣ 사용자 데이터 처리

Firebase, Google Analytics, Facebook SDK 등과 같이 사용자 데이터를 수집하거나 서버와 통신하는 라이브러리는 PrivacyInfo에 반드시 포함해야 한다.

3) Firebase 사용시 PrivacyInfo 설정

예시로, 프로젝트에서 Firebase를 사용했을 경우 어떻게 설정하면 되는지를 정리해 보았다.

Firebase는 여러 서비스를 제공하는데, 일부 서비스는 사용자 데이터를 수집하고 저장한다.

  • Firestore: 사용자 데이터 저장
  • Firebase Analytics: 사용자 행동 데이터 분석
  • Firebase Authentication: 사용자 로그인 및 인증
  • Firebase Remote Config: 사용자 맞춤 설정 적용

위의 경우 Firebase를 활용하여 데이터를 수집하는 케이스이므로 해당 정보를 PrivacyInfo에 명시해야 한다.

1️⃣ PrivacyInfo에 추가해야 하는 Firebase 관련 정보

a. NSPrivacyAccessedAPITypes (사용하는 API 종류)
Firebase가 내부적으로 사용하는 API 중 Apple이 Required Reason API로 지정한 항목이 있다면 이를 추가해야 한다.

// PrivacyInfo 추가 예시
<key>NSPrivacyAccessedAPITypes</key>
<array>
    <string>NSPrivacyAccessedAPICategoryUserDefaults</string>
    <string>NSPrivacyAccessedAPICategoryDiskSpace</string>
</array>
  • UserDefaults: Firebase Remote Config가 사용자 맞춤 설정을 저장할 때 사용됨
  • DiskSpace: Firebase가 로컬 캐시에 데이터를 저장할 때 사용됨

b. NSPrivacyCollectedDataTypes (수집하는 데이터 유형)

Firebase에서 수집하는 데이터 유형을 명시해야 한다.

// PrivacyInfo 추가 예시
<key>NSPrivacyCollectedDataTypes</key>
<array>
    <dict>
        <key>NSPrivacyCollectedDataType</key>
        <string>Email</string>
        <key>NSPrivacyCollectedDataTypeLinked</key>
        <true/>
        <key>NSPrivacyCollectedDataTypeTracking</key>
        <false/>
    </dict>
    <dict>
        <key>NSPrivacyCollectedDataType</key>
        <string>Location</string>
        <key>NSPrivacyCollectedDataTypeLinked</key>
        <true/>
        <key>NSPrivacyCollectedDataTypeTracking</key>
        <false/>
    </dict>
</array>
  • Email: Firebase Authentication에서 로그인 정보로 수집 가능
  • Location: Firebase Analytics에서 사용자의 위치 기반 데이터를 분석할 때 수집 가능

c. NSPrivacyCollectedDataTypeLinked (사용자와 데이터 연결 여부)

  • true: 데이터를 사용자 계정과 직접 연결하는 경우
  • false: 익명 데이터로 저장되는 경우

d. NSPrivacyCollectedDataTypeTracking (데이터 추적 여부)

  • true: 데이터를 광고 또는 추적 목적으로 사용하는 경우
  • false: 단순 분석 및 운영 목적일 경우

5) PrivacyInfo 예제

<?xml version="1.0" encoding="UTF-8"?>
<plist version="1.0">
<dict>
    <key>NSPrivacyTracking</key>
    <false/>
    
    <key>NSPrivacyAccessedAPITypes</key>
    <array>
        <string>NSPrivacyAccessedAPICategoryUserDefaults</string>
        <string>NSPrivacyAccessedAPICategoryDiskSpace</string>
    </array>

    <key>NSPrivacyCollectedDataTypes</key>
    <array>
        <dict>
            <key>NSPrivacyCollectedDataType</key>
            <string>Email</string>
            <key>NSPrivacyCollectedDataTypeLinked</key>
            <true/>
            <key>NSPrivacyCollectedDataTypeTracking</key>
            <false/>
        </dict>
        <dict>
            <key>NSPrivacyCollectedDataType</key>
            <string>Location</string>
            <key>NSPrivacyCollectedDataTypeLinked</key>
            <true/>
            <key>NSPrivacyCollectedDataTypeTracking</key>
            <false/>
        </dict>
    </array>
</dict>
</plist>

6) 주의사항

  1. Firebase를 사용하는 경우 PrivacyInfo를 반드시 업데이트해야 함

    • Firestore, Analytics, Authentication 등의 기능
      을 사용할 때 개인정보 보호 사항을 명확히 명시해야 함
  2. Apple의 개인정보 보호 정책을 준수하지 않으면 앱 심사에서 거절될 수 있음

    • 2024년 5월 1일부터 PrivacyInfo.xcprivacy가 없으면 App Store 심사를 통과할 수 없음
  3. 앱에서 수집하는 데이터를 정확히 기재해야 함

    • Firebase를 통한 데이터 수집이 포함된 경우, 사용자의 데이터 활용 방식과 관련 API 사용 이유를 투명하게 공개해야 함

7) 결론

PrivacyInfo는 Apple이 요구하는 개인정보 보호 문서이다. 프로젝트에서 사용하는 API나 유저 데이터를 수집하는 코드가 있는 경우, 반드시 PrivacyInfo에 적용해 주어야 한다.

이 때, SnapKit 같은 UI 라이브러리는 사용 상황을 명시해 줄 필요가 없지만, Firebase처럼 사용자의 데이터를 수집하는 경우 PrivacyInfo에 어떻게 사용하는지 명시를 해줘야 한다.

이를 제대로 설정하지 않으면 AppStore 심사에서 거절될 가능성이 있기 때문에 주의해야 한다.

-Today's Lesson Review-

앱 배포를 하기 위해 많은 것을 알아야 하는 것을 알게되었다...
profile
이유있는 코드를 쓰자!!

0개의 댓글