# Adhere to the iOS 17+ Privacy Requirements

# Overview

In iOS 17, Apple added some new requirements to protect users from being targeted by finger-printing, a technique to uniquely identify a device even after a reinstall. Bad players used several APIs that are now being flagged when used.

There are currently five categories that are flagged:

  • File timestamp APIs: APIs around file system monitoring, e.g. timestamps.
  • System boot time APIs: APIs around uptime of the device.
  • Disk space APIs: APIs about the remaining space on the device.
  • Active keyboard APIs: APIs about active input modes.
  • User defaults APIs: APIs around storing key-value data across app launches.

Some of the APIs used in Titanium are affected by these changes, e.g. Ti.Filesystem.File.createdAt and Ti.App.Properties / Ti.App.iOS.UserDefaults. When using these APIs, you need to declare the reason(s) for using them inside a new PrivacyInfo.xcprivacy file that can be edited inside Xcode.

# Required Steps

# Existing Apps

For existing apps, you can use the default PrivacyInfo.xcprivacy

<?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>NSPrivacyAccessedAPITypeReasons</key>
              <array>
                  <string>AC6B.1</string>
              </array>
              <key>NSPrivacyAccessedAPIType</key>
              <string>NSPrivacyAccessedAPICategoryUserDefaults</string>
          </dict>
      </array>
  </dict>
</plist>

and place them into the following folder:

  • Alloy apps: app/assets/iphone/
  • Classic apps: Resources/iphone/

That's it! The Titanium build does the rest for you.

# New Apps

For new apps built with Titanium SDK 12.4.0 and later, the default PrivacyInfo.xcprivacy file is generated automatically for you.

# More Details