iOS Question ITMS-91053: Missing API declaration

Alex_197

Well-Known Member
Licensed User
Longtime User
Hi all.

Today I uploaded my app and received this email. It looks like this isi something new.
My app is using a document picker.

App Store Connect
Hello,
We noticed one or more issues with a recent submission for App Store review for the following app:​
  • HCMS-EVV
  • Version 2.0.36
  • Build 2.0.36

Although submission for App Store review was successful, you may want to correct the following issues in your next submission for App Store review. Once you've corrected the issues, upload a new binary to App Store Connect.
ITMS-91053: Missing API declaration - Your app’s code in the “HCMS-EVV” 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/documen...t_files/describing_use_of_required_reason_api.
Apple Developer Relations​
 
Last edited:

voxel

Member
Licensed User
Same, I received this email after a new update of my app.

We noticed one or more issues with a recent submission for App Store review for the following app:

  • LYZO
  • Version 1.0.7
  • Build 1.0.7
Although submission for App Store review was successful, you may want to correct the following issues in your next submission for App Store review. Once you've corrected the issues, upload a new binary to App Store Connect.

ITMS-91053: Missing API declaration - Your app’s code in the “LYZO” 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/documen...t_files/describing_use_of_required_reason_api.

ITMS-91053: Missing API declaration - Your app’s code in the “LYZO” file references one or more APIs that require reasons, including the following API categories: NSPrivacyAccessedAPICategoryUserDefaults. 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/documen...t_files/describing_use_of_required_reason_api.

Apple Developer Relations
 
Upvote 0

aminoacid

Active Member
Licensed User
Longtime User
Yes, I just received it this morning for an App update. The App is still "waiting for review". Let's see if they approve the App submission. The only change in the update was the inclusion of WebView.

[edit]
My App was approved as expected. Here is my "ITMS-91053". I have highlighted the API in question. I don't think there's anywhere in my code that I access a file time stamp. I do save a setting in a file stored in "File.DirLibrary" and then restore it on startup. That's about it.


ITMS-91053: Missing API declaration - Your app’s code in the “Weathernow” 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/documen...t_files/describing_use_of_required_reason_api.
 
Last edited:
Upvote 0

gglaz

Member
Licensed User
Longtime User
Hello,
The information is not included in the plist.
A privacy mainfest is needed here.
From Xcode 15 I create it via New File -> Resource -> App Privacy.
Attached is an example of NSPrivacyAccessedAPICategoryUserDefaults. (remove .txt)
Further values for the justifications:

The question is how can I create this file in B4i?
 

Attachments

  • PrivacyInfo.xcprivacy.txt
    633 bytes · Views: 177
Upvote 0

softmicro

Member
Licensed User
Longtime User
Hi.
In my case I have received:

Although submission for TestFlight review was successful, you may want to correct the following issues in your next submission for TestFlight review. Once you've corrected the issues, upload a new binary to App Store Connect.

ITMS-91053: Missing API declaration - Your app’s code in the “WiComPG” file references one or more APIs that require reasons, including the following API categories: NSPrivacyAccessedAPICategoryDiskSpace. 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/documen...t_files/describing_use_of_required_reason_api.

ITMS-91053: Missing API declaration - Your app’s code in the “WiComPG” 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/documen...t_files/describing_use_of_required_reason_api.

Apple Developer Relations

I have added the suggested file in this thread and just uploaded it to app store conect and now waiting for the response.
I will comment on the response obtained.
 
Upvote 0

Erel

B4X founder
Staff member
Licensed User
Longtime User
Upvote 0

Alex_197

Well-Known Member
Licensed User
Longtime User
The suggestion file includes description for NSPrivacyAccessedAPICategoryUserDefaults.
You need descriptions for NSPrivacyAccessedAPICategoryFileTimestamp and NSPrivacyAccessedAPICategoryDiskSpace.

The possible values are listed here: https://developer.apple.com/documen...bing_use_of_required_reason_api?language=objc
Please take a look - my app is using document picker. Is it correct?

In your NSPrivacyAccessedAPITypeReasons array, supply the relevant values from this list.

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.
B4X:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<!--
   PrivacyInfo.xcprivacy
   MY App

   Created by MYCompany Sandra on 20.03.24.
   Copyright (c) 2024 Sandra Sandra . All rights reserved.
-->
<plist version="1.0">
<dict>
 <key>NSPrivacyAccessedAPITypes</key>
 <array>
  <dict>
   <key>NSPrivacyAccessedAPIType</key>
   <string>NSPrivacyAccessedAPICategoryUserDefaults</string>
   <key>NSPrivacyAccessedAPITypeReasons</key>
   <array>
    <string>3B52.1</string>
   </array>
  </dict>
 </array>
</dict>
</plist>
 
Upvote 0

Alex_197

Well-Known Member
Licensed User
Longtime User
Hello,
The information is not included in the plist.
A privacy mainfest is needed here.
From Xcode 15 I create it via New File -> Resource -> App Privacy.
Attached is an example of NSPrivacyAccessedAPICategoryUserDefaults. (remove .txt)
Further values for the justifications:

The question is how can I create this file in B4i?
How to create it if I don't have XCode on my computer?
 
Upvote 0

Alex_197

Well-Known Member
Licensed User
Longtime User
Based on the message from the first post, you need to add a description for: NSPrivacyAccessedAPICategoryFileTimestamp
The string value looks correct but you need to replace NSPrivacyAccessedAPICategoryUserDefaults with NSPrivacyAccessedAPICategoryFileTimestamp.

You don't need Xcode to create this file.
Sorry for might be a dumb question - replace with what?

And second question - do I need to add #PlistExtra line into my code or do I need just to put a manifest file into Files/Special?

Thank you.
 
Upvote 0

Erel

B4X founder
Staff member
Licensed User
Longtime User
B4X:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
 <key>NSPrivacyAccessedAPITypes</key>
 <array>
  <dict>
   <key>NSPrivacyAccessedAPIType</key>
   <string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
   <key>NSPrivacyAccessedAPITypeReasons</key>
   <array>
    <string>3B52.1</string>
   </array>
  </dict>
 </array>
</dict>
</plist>
 
Upvote 0

marcick

Well-Known Member
Licensed User
Longtime User
Me too received this email this mornig.

B4X:
 ITMS-91053: Missing API declaration - Your app’s code in the file references one or more APIs that require reasons, including the following API categories: NSPrivacyAccessedAPICategoryFileTimestamp. 

ITMS-91053: Missing API declaration - Your app’s code in the file references one or more APIs that require reasons, including the following API categories: NSPrivacyAccessedAPICategorySystemBootTime. 

ITMS-91053: Missing API declaration - Your app’s code in the  file references one or more APIs that require reasons, including the following API categories: NSPrivacyAccessedAPICategoryUserDefaults. 

ITMS-91053: Missing API declaration - Your app’s code in the  file references one or more APIs that require reasons, including the following API categories: NSPrivacyAccessedAPICategoryDiskSpace.

Reading the above posts, sorry it is not clear to me what to do ....
 
Upvote 0
Top