google-ai-edge / mediapipe

Cross-platform, customizable ML solutions for live and streaming media.
https://mediapipe.dev
Apache License 2.0
26.76k stars 5.08k forks source link

Missing API declaration Warning from Apple App Store Connect #5351

Open stephandue opened 4 months ago

stephandue commented 4 months ago

I have build an App and used the MediaPipeTasksVision SDK: pod 'MediaPipeTasksVision', '0.10.12'

After I have uploaded my App to App Store Connect I get these warnings:

ITMS-91053: Missing API declaration - Your app’s code in the “PoseLandmarker” file references one or more APIs that require reasons, including the following API categories: NSPrivacyAccessedAPICategorySystemBootTime. While no action is required at this time, starting May 1, 2024, when you upload a new app or app update, you must include a NSPrivacyAccessedAPITypes array in your app’s privacy manifest to provide approved reasons for these APIs used by your app’s code. For more details about this policy, including a list of required reason APIs and approved reasons for usage, visit: https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_use_of_required_reason_api.

ITMS-91053: Missing API declaration - Your app’s code in the “PoseLandmarker” file references one or more APIs that require reasons, including the following API categories: NSPrivacyAccessedAPICategoryFileTimestamp. While no action is required at this time, starting May 1, 2024, when you upload a new app or app update, you must include a NSPrivacyAccessedAPITypes array in your app’s privacy manifest to provide approved reasons for these APIs used by your app’s code. For more details about this policy, including a list of required reason APIs and approved reasons for usage, visit: https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_use_of_required_reason_api.

I cannot find the reason why the MediaPipe iOS SDK is using both those API´s. From my understanding you have to give Apple an approved reason otherwise your app cannot be in the App Store.

Many Thanks Stephan

kuaashish commented 4 months ago

Hi @stephandue,

Thank you for bringing this issue to our attention. We appreciate your patience. Rest assured, we will work on resolving it and provide you with an update soon.

schmidt-sebastian commented 4 months ago

We will investigate if we can use a different API here.

schmidt-sebastian commented 4 months ago

This is going to take us a while since we have to update a lot of our dependencies. Hopefully we can resolve this soon though.

stephandue commented 4 months ago

Thanks for the update and for fixing this, Sebastain

stephandue commented 3 months ago

Any update?

mbrenon commented 3 months ago

Hi @stephandue,

Thanks for your patience. We are still working on this, and expecting it will take a few weeks until we can get a new release out with calls to these APIs removed.

stephandue commented 2 months ago

Hi Maxime, I was wondering if there is an update here? We would be ready to ship our app soon and get a bit nervous that we have developed something we cannot ship. Many Thanks Stephan

stephandue commented 1 month ago

Am I the only one who would like to actually use the library in an iOS App which goes to the AppStore?

stephandue commented 1 month ago

@mbrenon ?

stephandue commented 3 weeks ago

@mbrenon @schmidt-sebastian Could you please provide the reasons for using these two API´s from the apple documentation: https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_use_of_required_reason_api

Here are the valid reasons from the documentation:

System boot time APIs

35F9.1 Declare this reason to access the system boot time in order to measure the amount of time that has elapsed between events that occurred within the app or to perform calculations to enable timers. Information accessed for this reason, or any derived information, may not be sent off-device. There is an exception for information about the amount of time that has elapsed between events that occurred within the app, which may be sent off-device. 8FFB.1 Declare this reason to access the system boot time to calculate absolute timestamps for events that occurred within your app, such as events related to the UIKit or AVFAudio frameworks. Absolute timestamps for events that occurred within your app may be sent off-device. System boot time accessed for this reason, or any other information derived from system boot time, may not be sent off-device. 3D61.1 Declare this reason to include system boot time information in an optional bug report that the person using the device chooses to submit. The system boot time information must be prominently displayed to the person as part of the report. Information accessed for this reason, or any derived information, may be sent off-device only after the user affirmatively chooses to submit the specific bug report including system boot time information, and only for the purpose of investigating or responding to the bug report.

File timestamp APIs

DDA9.1 Declare this reason to display file timestamps to the person using the device. Information accessed for this reason, or any derived information, may not be sent off-device. C617.1 Declare this reason to access the timestamps, size, or other metadata of files inside the app container, app group container, or the app’s CloudKit container. 3B52.1 Declare this reason to access the timestamps, size, or other metadata of files or directories that the user specifically granted access to, such as using a document picker view controller. 0A2A.1 Declare this reason if your third-party SDK is providing a wrapper function around file timestamp API(s) for the app to use, and you only access the file timestamp APIs when the app calls your wrapper function. This reason may only be declared by third-party SDKs. This reason may not be declared if your third-party SDK was created primarily to wrap required reason API(s). Information accessed for this reason, or any derived information, may not be used for your third-party SDK’s own purposes or sent off-device by your third-party SDK.