CtrlK
BlogDocsLog inGet started
Tessl Logo

dpearson2699/swift-ios-skills

Agent skills for iOS, iPadOS, Swift, SwiftUI, and modern Apple framework development.

71

Quality

89%

Does it follow best practices?

Impact

No eval scenarios have been run

SecuritybySnyk

Advisory

Suggest reviewing before use

Overview
Quality
Evals
Security
Files

privacy-manifest.mdskills/app-store-review/references/

Privacy Manifest Reference

Contents

  • When a Privacy Manifest Is Required
  • Privacy Manifest Structure
  • Required API Reason Codes
  • Privacy Manifest Keys Reference
  • Third-Party SDK Manifests
  • Collected Data Types Declaration

When a Privacy Manifest Is Required

A PrivacyInfo.xcprivacy file is required if your app or any dependency uses these API categories:

  • File timestamp APIs (NSPrivacyAccessedAPICategoryFileTimestamp)
  • System boot time APIs (NSPrivacyAccessedAPICategorySystemBootTime)
  • Disk space APIs (NSPrivacyAccessedAPICategoryDiskSpace)
  • User defaults (NSPrivacyAccessedAPICategoryUserDefaults) when storing user-identifiable data
  • Active keyboard APIs (NSPrivacyAccessedAPICategoryActiveKeyboards)

Privacy Manifest Structure

<!-- 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>NSPrivacyTracking</key>
    <false/>
    <key>NSPrivacyTrackingDomains</key>
    <array/>
    <key>NSPrivacyCollectedDataTypes</key>
    <array>
        <!-- Declare every data type you collect -->
    </array>
    <key>NSPrivacyAccessedAPITypes</key>
    <array>
        <dict>
            <key>NSPrivacyAccessedAPIType</key>
            <string>NSPrivacyAccessedAPICategoryUserDefaults</string>
            <key>NSPrivacyAccessedAPITypeReasons</key>
            <array>
                <string>CA92.1</string>
            </array>
        </dict>
    </array>
</dict>
</plist>

Required API Reason Codes

API CategoryCodeReason
FileTimestampC617.1Access files inside app container
FileTimestamp3B52.1Access user-selected files
FileTimestamp0A2A.1Third-party SDK accessed on behalf of user
SystemBootTime35F9.1Measure elapsed time between events
DiskSpaceE174.1Check available space before writes
UserDefaultsCA92.1Access within your own app
UserDefaults1C8F.1Access within same app group
ActiveKeyboards3EC4.1Customize UI based on active keyboards

Privacy Manifest Keys Reference

KeyTypePurpose
NSPrivacyTrackingBooleanWhether the app tracks users (triggers ATT requirement)
NSPrivacyTrackingDomainsArray of stringsDomains used for tracking (connected only after ATT consent)
NSPrivacyCollectedDataTypesArray of dictsEach data type collected, its purpose, and whether it is linked to identity
NSPrivacyAccessedAPITypesArray of dictsEach required-reason API used and the justification codes

Third-Party SDK Manifests

  • Verify each SDK contains PrivacyInfo.xcprivacy in its bundle
  • Ensure SDK reason codes match actual usage
  • Update SDK versions when manifests are missing

Collected Data Types Declaration

Each NSPrivacyCollectedDataTypes entry must specify:

  • NSPrivacyCollectedDataType (category)
  • NSPrivacyCollectedDataTypeLinked (linked to identity)
  • NSPrivacyCollectedDataTypeTracking (used for tracking)
  • NSPrivacyCollectedDataTypePurposes (purposes array)

Apple cross-references manifests with privacy nutrition labels and network traffic. Mismatches cause rejection.

skills

CHANGELOG.md

README.md

tile.json