Standardmäßig ist der Prompt ausgewählt, der zuerst die Quelle prüft. Sie können zu einem direkten Befehl wechseln oder eine lokale Kopie herunterladen.
Quelldateien prüfen
Lesen Sie SKILL.md und alle von SkillsMP angezeigten Begleitdateien, bevor Sie sich für eine Installation entscheiden.
Mit Codex oder Claude installieren Kopieren Sie diesen Prompt, fügen Sie ihn in Codex, Claude oder einen anderen Assistant ein und lassen Sie die Skill-Seite prüfen und installieren.
Ein direkter Befehl überspringt den Prüf-Prompt. Prüfen Sie die Quelle, bevor Sie ihn ausführen.
Use when implementing privacy manifests, requesting permissions, App Tracking Transparency UX, or preparing Privacy Nutrition Labels - covers just-in-time permission requests, tracking domain management, and Required Reason APIs from WWDC 2023
license
MIT
metadata
{"version":"1.0.0"}
Privacy UX Patterns
Comprehensive guide to privacy-first app design. Apple Design Award Social Impact winners handle data ethically, and privacy-first design is a key differentiator.
Overview
Privacy manifests (PrivacyInfo.xcprivacy) are Apple's framework for transparency about data collection and tracking. Combined with App Tracking Transparency and just-in-time permission requests, they help users make informed choices about their data.
This skill covers creating privacy manifests, requesting system permissions with excellent UX, implementing App Tracking Transparency, managing tracking domains, using Required Reason APIs, and preparing accurate Privacy Nutrition Labels.
Requesting system permissions (Camera, Location, etc.)
Implementing App Tracking Transparency (ATT)
Preparing Privacy Nutrition Labels for App Store Connect
Managing tracking domains to avoid accidental tracking
Using Required Reason APIs (NSFileSystemFreeSize, UserDefaults, etc.)
Explaining data usage to users transparently
Debugging privacy-related App Store rejections
System Requirements
iOS 14.5+ for App Tracking Transparency
iOS 17+ for automatic tracking domain blocking
Xcode 15+ for privacy reports and manifest editing
Spring 2024+ for App Review enforcement
Part 1: Privacy Manifests (WWDC 2023/10060)
Creating a Privacy Manifest
Xcode Navigator:
File → New → File
Choose "App Privacy File"
Name: PrivacyInfo.xcprivacy
Add to app target (or SDK framework)
File structure (Property List):
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plistPUBLIC"-//Apple//DTD PLIST 1.0//EN""http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plistversion="1.0"><dict><key>NSPrivacyTracking</key><false/><key>NSPrivacyCollectedDataTypes</key><array><!-- Data types collected --></array><key>NSPrivacyAccessedAPITypes</key><array><!-- Required Reason APIs used --></array></dict></plist>
NSPrivacyTracking Declaration
Does your app track users?
Tracking = combining user/device data from your app with data from other apps/websites to create a profile for targeted advertising or data broker purposes.
<key>NSPrivacyTracking</key><true/><!-- or false -->
iOS 17 behavior: Network requests to tracking domains automatically blocked if user hasn't granted ATT permission.
NSPrivacyCollectedDataTypes
Declare all data your app collects:
<key>NSPrivacyCollectedDataTypes</key><array><dict><key>NSPrivacyCollectedDataType</key><string>NSPrivacyCollectedDataTypeName</string><key>NSPrivacyCollectedDataTypeLinked</key><true/><!-- Linked to user identity? --><key>NSPrivacyCollectedDataTypeTracking</key><false/><!-- Used for tracking? --><key>NSPrivacyCollectedDataTypePurposes</key><array><string>NSPrivacyCollectedDataTypePurposeAppFunctionality</string><string>NSPrivacyCollectedDataTypePurposeAnalytics</string></array></dict></array>
Track users across apps/websites owned by other companies
Share user data with data brokers
Use third-party SDKs that track (Facebook SDK, Google Analytics, etc.)
You don't need ATT if you only:
Use first-party analytics (no sharing with other companies)
Personalize ads based only on data from your own app
Use fraud detection/security measures
ATTrackingManager.requestTrackingAuthorization
import AppTrackingTransparency
import AdSupport
funcrequestTrackingPermission() {
// Check availability (iOS 14.5+)guard#available(iOS14.5, *) else { return }
// Wait until app is active// Showing alert too early causes auto-denialDispatchQueue.main.asyncAfter(deadline: .now() +1.0) {
ATTrackingManager.requestTrackingAuthorization { status inswitch status {
case .authorized:
// User granted permission// You can now access IDFA and tracklet idfa =ASIdentifierManager.shared().advertisingIdentifier
self.initializeTrackingSDKs(idfa: idfa)
case .denied:
// User denied permission// Do NOT trackself.initializeNonTrackingSDKs()
case .notDetermined:
// User closed dialog without choosing// Treat as deniedself.initializeNonTrackingSDKs()
case .restricted:
// Device doesn't allow tracking (parental controls)self.initializeNonTrackingSDKs()
@unknowndefault:
self.initializeNonTrackingSDKs()
}
}
}
}
Custom ATT Prompt Message
Info.plist:
<key>NSUserTrackingUsageDescription</key><string>This allows us to show you personalized ads and improve your experience</string>
Best practices:
Be honest and specific
Explain user benefit (not company benefit)
Keep it concise (1-2 sentences)
❌ Bad examples:
"We value your privacy" (vague)
"This is required for the app to work" (dishonest)
"To monetize our app" (user doesn't care)
✅ Good examples:
"This helps us show you relevant ads for products you might like"
"Personalized ads help keep this app free"
Pre-Tracking Prompt Design
Show your own dialog before ATT system prompt:
funcshowPreTrackingPrompt() {
let alert =UIAlertController(
title: "Support Free Features",
message: "We use tracking to show you personalized ads, which helps keep advanced features free. You can always change this in Settings.",
preferredStyle: .alert
)
alert.addAction(UIAlertAction(title: "Continue", style: .default) { _inself.requestTrackingPermission()
})
alert.addAction(UIAlertAction(title: "Not Now", style: .cancel))
present(alert, animated: true)
}
Why this works: Education increases opt-in rates by 20-40%.
Graceful Degradation
Always provide value without tracking:
funcinitializeAnalytics() {
let status =ATTrackingManager.trackingAuthorizationStatus
if status == .authorized {
// Full featured analyticsAnalytics.setUserProperty(userID, forName: "user_id")
Analytics.enableCrossAppTracking()
} else {
// Limited, privacy-preserving analyticsAnalytics.setUserProperty("anonymous", forName: "user_id")
Analytics.disableCrossAppTracking()
Analytics.enableOnDeviceConversionTracking()
}
}
E174.1: Check if there's enough space before writing files
7D9E.1: Display storage information to user
B728.1: Include disk space in optional analytics (only if user opted in)
Declaration in manifest:
<key>NSPrivacyAccessedAPITypes</key><array><dict><key>NSPrivacyAccessedAPIType</key><string>NSPrivacyAccessedAPICategoryDiskSpace</string><key>NSPrivacyAccessedAPITypeReasons</key><array><string>E174.1</string><!-- Check space before writing --></array></dict></array>
import CoreLocation
classLocationManager: NSObject, CLLocationManagerDelegate {
let manager =CLLocationManager()
funcrequestPermission() {
manager.delegate =self// Choose one:
manager.requestWhenInUseAuthorization() // Only when app is open// OR
manager.requestAlwaysAuthorization() // Background location
}
}
// Info.plist (iOS 14+)<key>NSLocationWhenInUseUsageDescription</key>
<string>Show nearby restaurants</string><key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>Track your runs even when the app isin the background</string>
Photos
import Photos
PHPhotoLibrary.requestAuthorization(for: .readWrite) { status inswitch status {
case .authorized, .limited: // .limited = selected photos only// Access grantedcase .denied, .restricted:
// Access denied@unknowndefault:
break
}
}
<key>NSPhotoLibraryUsageDescription</key>
<string>Save and share your workout photos</string>
// ❌ Bad - collecting unnecessary datastructUserProfile {
let name: Stringlet email: Stringlet phone: String// Do you really need this?let dateOfBirth: Date// Or this?let socialSecurityNumber: String// Definitely not
}
// ✅ Good - minimal data collectionstructUserProfile {
let name: Stringlet email: String// That's it
}
On-Device Processing
Principle: Process data locally when possible
// ✅ Good - on-device MLimport Vision
funcanalyzePhoto(_image: UIImage) {
let request =VNClassifyImageRequest { request, error in// Results stay on devicelet classifications = request.results as? [VNClassificationObservation]
self.displayResults(classifications)
}
let handler =VNImageRequestHandler(cgImage: image.cgImage!)
try? handler.perform([request])
// No network request, no data leaving device
}
Explaining Value Exchange
Principle: Be transparent about why you need data
// ✅ Good - clear value proposition"We use your location to show nearby restaurants and save your favorite places. Your location is never shared with third parties."
Transparent Data Practices
Principle: Make privacy information easily accessible
// Add Privacy Policy link in Settings screenstructSettingsView: View {
var body: someView {
List {
Section("About") {
Link("Privacy Policy", destination: URL(string: "https://example.com/privacy")!)
Link("Data We Collect", destination: URL(string: "https://example.com/data")!)
}
}
}
}
Common Mistakes
Requesting permissions at launch
// ❌ Wrongfuncapplication(_application: UIApplication,
didFinishLaunchingWithOptions...) -> Bool {
requestAllPermissions() // User has no contextreturntrue
}
// ✅ Correct@objcfunccameraButtonTapped() {
requestCameraPermission() // Just-in-time
}
No explanation before permission dialog
// ❌ WrongAVCaptureDevice.requestAccess(for: .video) { granted in }
// ✅ Correct
showCameraEducation {
AVCaptureDevice.requestAccess(for: .video) { granted in }
}
// ❌ Wrong - privacy manifest declares tracking but no domains<key>NSPrivacyTracking</key>
<true/><!--MissingNSPrivacyTrackingDomains-->// ✅ Correct<key>NSPrivacyTrackingDomains</key>
<array><string>tracking.example.com</string></array>
Incomplete Required Reason declarations
// ❌ Wrong - using UserDefaults without declaring itUserDefaults.standard.set(value, forKey: "setting")
// Privacy manifest has no NSPrivacyAccessedAPITypes entry// ✅ Correct - declared in manifest with approved reason
Timeline
Date
Milestone
WWDC 2023
Privacy manifests announced
Fall 2023
Informational emails begin
Spring 2024
App Review enforcement begins
May 1, 2024
Privacy manifests required for apps with privacy-impacting SDKs