티스토리 뷰

2024.04.18 - [iOS개발/기타] - [실험] Privacy manifests 를 제출해보자 - 3탄

 

[실험] Privacy manifests 를 제출해보자 - 3탄

자 이제 마지막 시리즈 입니다. 정확히는 제출후 애플에게 어떤 메일이 오는지 확인하고 그에 맞는 대응을 하는 단계입니다. 2024.04.03 - [iOS개발/기타] - [실험] Privacy manifests 를 알아보자 - 1탄 2024.

world-of-larooly.tistory.com

사실 여기서 조금 언급했는데 

얼마 전 Apple 공식에 글이 올라왔습니다. 

(5월 1일부터 바꾼다면서 이제서야....)

 

바로 아래 글입니다. 

앱 개발하시는 분들은 한번씩 읽으시는게 좋아보여요.

https://www.msclb.store/documentation/bundleresources/privacy_manifest_files/adding_a_privacy_manifest_to_your_app_or_third-party_sdk 

 

Adding a privacy manifest to your app or third-party SDK | Apple Developer Documentation

Report the data you collect and required reasons API you use in your app or third-party SDK.

www.msclb.store

* 무슨 내용인가요?

- 위 사이트에는 각 형태별로 Privacy Manifest를 추가하는 법(위치)을 적어놨습니다. (무려 Apple이)

- 크게 App / Framework / Swift Package / Static Library / xcframework 확인 사항(?) 으로 나뉩니다. 

- 급하게 저도 확인한 내용이라 해석이 정확하지 않을 수 있습니다.

- 대부분 Manifest 의 위치를 예로 보여주는 형식입니다.

- 각 항목별 파일을 만드는 방법은 위 사이트에서 확인이 가능합니다. 

 

* App

- Info.plist 가 있는 위치에 넣는걸 권장하는 걸로 보입니다. 

- Sample.app/PrivacyInfo.xcprivacy 

Sample.app/
    Info.plist
    Sample
    PrivacyInfo.xcprivacy 
    ...

-  맥 OS 앱의 경우에는 아래 위치를 예시로 보여줍니다.  

- MacSample.app/Contents/Resources/PrivacyInfo.xcprivacy

MacSample.app/
    Contents/
        Info.plist
        MacOS/
            MacSample
        Resources/
            PrivacyInfo.xcprivacy
        ...

 

* Framework

- 마찬가지로 위치에 관해 적혀있습니다. 

- SampleFramework.framework/PrivacyInfo.xcprivacy

SampleFramework.framework/
    Info.plist 
    SampleFramework
    PrivacyInfo.xcprivacy 
    ...

- MacOS 앱의 Manifest 위치를 예시로 보여줍니다.   

- MacSampleFramework.framework/Versions/A/Resources/PrivacyInfo.xcprivacy

MacSampleFramework.framework/
    MacSampleFramework -> Versions/Current/MacSampleFramework
    Resources -> Versions/Current/Resources
    Versions/
        Current -> A
        A/
            MacSampleFramework
            Resources/
                Info.plist 
                PrivacyInfo.xcprivacy
            ...
    ...

 

* Swift Package

- 여기는 조금 다르게 적혀있습니다. 

- 만약 아래 위치에 Manifest 를 추가했다면 

SamplePackage/
    README.md
    Package.swift
    Sources/
        SomeLibrary/
            SomeLibrary.swift
            Product.swift
            PrivacyInfo.xcprivacy
            ...
    Tests/
        ...

- 아래처럼 Package.swift 를 쓰면 된다는 걸로 해석됩니다.

targets: [
    .target(
        name: "SomeLibrary",
        resources: [
            .process("PrivacyInfo.xcprivacy")]
    ),
]

- 마찬가지로 아래 위치에 추가했다면 

SamplePackage/
    README.md
    Package.swift
    Sources/
        SomeLibrary/
            SomeLibrary.swift
            Product.swift
            ...
            Resources/
                PrivacyInfo.xcprivacy
                ...
    Tests/
        ...

- Package.swift 를 아래처럼 작성해 달라고 되어있습니다.

targets: [
    .target(
        name: "SomeLibrary",
        resources: [
            .process("Resources")]
    ),
]

 

* Static Library (.a 파일)

- .... 여긴 좀 당황스러워서 번역 통으로 보여드리면

정적 라이브러리는 .a 파일 확장자를 가진 객체 파일의 아카이브이다. 프라이버시 매니페스트와 같은 리소스는 지원하지 않는다. 정적 라이브러리를 SDK로 배포하고 Xcode에 프라이버시 매니페스트를 포함하도록 업데이트하려면 정적 라이브러리의 모든 소스 파일과 리소스를 포함하는 새로운 정적 프레임워크 대상을 만든 다음 대상의 리소스에 프라이버시 매니페스트를 추가한다.

- 간단히 말하면 추가가 불가능하다는 겁니다. 

- 추가하고 싶으면 기존 .a 파일을 .framework 로 바꿔서 그안에 넣으라는 겁니다.(;;;;)

=> 자 여기서부터는 제 개인적인 의견입니다. 

사실 애플 심사를 이전 편에서 했을때 나온 결과로 보면 라이브러리 단위로 검사하는게 아니라 앱단위로 검사하는 걸로 추측됩니다. 
그래서 제가 생각하기에는 두가지 방법이 있을걸로 보입니다. 

1. .a 파일을 .framework 로 다시 제작 후 배포 (Apple 권고 사항)

2. 앱 자체의 Privacy Manifest 에 해당 내용을 같이 작성 후 제출 (제 생각입니다.)
=> 라이브러리에 있는 내용을 알면 그냥 추가를 하면 되겠지만 
=> 모르는 경우 앱 리젝을 한번 당할 걸 각오하고 넣는 방법이긴 합니다. 
=> 앱 심사는 Manifest에 어떤 부분을 사용했고 어떤 부분이 누락되었는지를 가장 잘 알려주기때문에 
=> 피드백이 오면 그걸 반영해 제출하는 방법입니다. 
=> 무엇보다 애플에서 공식적으로 애는 추가가 불가능하다고 말했으니 추가 안해도 욕은 안먹는다는 거죠

=> 앱심사 피드백을 받고 수정하는 것 만큼 정확한게 없기 때문에 개인적으로는 이 방법도 나쁘지 않다고 생각합니다.   

- 일단 저는 2번 방법으로 앱을 배포하고 있긴 합니다. (심사 통과)

(라이브러리 다시 만들어달라고 요청하기 애매)

(어떻게 이세상 .a 파일을 다 바꾸겠어요)

(추가해달라는 것만 해줬는데 더 이상 피드백이 안옵니다.)

 

* XCframework 확인 사항 

- 특이하게 특정 위치가 아니라 이 부분을 확인해달라고 적혀있습니다.

- 보통 xcframework 를 사용할 때 아래 명령어를 사용하실텐데 

xcodebuild -create-xcframework 
-archive MyArchives/SampleFramework-iOS.xcarchive -framework SampleFramework.framework
-archive MyArchives/SampleFramework-macOS.xcarchive -framework SampleFramework.framework
-archive MyArchives/SampleFramework-iOS_Simulator.xcarchive -framework SampleFramework.framework 
-archive MyArchives/SampleFramework-Mac_Catalyst.xcarchive -framework SampleFramework.framework 
-output xcframeworks/SampleFramework.xcframework

- 이때 쓰이는 각각의 .framework 안에 Privacy Manifest 가 있는지 확인해달라고 적혀있습니다. 

SampleFramework.xcframework/
    Info.plist
    ios-arm64/
       dSYMs/
           ...
       SampleFramework.framework/
           Info.plist
           SampleFramework
           PrivacyInfo.xcprivacy 
           ...
    macos-arm64_x86_64/
        dSYMs/
            ...
        SampleFramework.framework/
            SampleFramework -> Versions/Current/SampleFramework
            Resources -> Versions/Current/Resources
            Versions/
                Current -> A
                A/
                    SampleFramework
                    Resources/
                        Info.plist
                        PrivacyInfo.xcprivacy
                    ...
            ...
    ios-arm64_x86_64-simulator/
        dSYMs/
            ...
        SampleFramework.framework/
            Info.plist
            SampleFramework
            PrivacyInfo.xcprivacy 
            ...
    ios-arm64_x86_64-maccatalyst/
        dSYMs/
           ...
        SampleFramework.framework/
            SampleFramework -> Versions/Current/SampleFramework
            Resources -> Versions/Current/Resources
            Versions/
                Current -> A
                A/
                    SampleFramework
                    Resources/
                        Info.plist 
                        PrivacyInfo.xcprivacy
                    ...
            ...

 

하나(static library) 빼고는 그렇게 충격적인 내용은 아닌 것 같아요.

(아마도)

 

아무튼 이러쿵저러쿵 말이 많긴 한데 

후.... 얼마 남지도 않았는데 난리네요. 

 

저처럼 고민되실분들을 위해 올려봅니다. 

 

오늘도 힘내세요~

댓글