This skill should be used when the user asks to "request camera permission", "implement privacy manifest", "handle location permissions", "setup Face ID authentication", "create permission UI", "check privacy compliance", or needs guidance on iOS privacy and permission management.
From ios-dev-toolkitnpx claudepluginhub nbkm8y5/claude-plugins --plugin ios-dev-toolkitThis skill uses the workspace's default tool permissions.
references/apple_privacy_requirements.mdreferences/implementation_examples.mdscripts/generate_infoplist_strings.pyscripts/generate_permission_manager.pyscripts/generate_privacy_manifest.pySearches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Searches prompts.chat for AI prompt templates by keyword or category, retrieves by ID with variable handling, and improves prompts via AI. Use for discovering or enhancing prompts.
Guides implementation of event-driven hooks in Claude Code plugins using prompt-based validation and bash commands for PreToolUse, Stop, and session events.
Generate comprehensive privacy and permissions infrastructure for iOS applications.
This skill provides complete privacy and permissions management for iOS apps:
# Generate permission manager and UI
python3 scripts/generate_permission_manager.py ./MyApp/Sources
# Generate privacy manifest for mortgage app
python3 scripts/generate_privacy_manifest.py ./MyApp/PrivacyInfo.xcprivacy --mortgage-app
# Generate Info.plist strings
python3 scripts/generate_infoplist_strings.py --mortgage-app --format xml
This creates production-ready permission infrastructure with 681 lines of code.
Generates comprehensive permission management system.
Usage:
python3 scripts/generate_permission_manager.py <output_dir> [--filename PermissionManager]
Generates:
PermissionManager.swift (389 lines) - Central permission managerPermissionRequestView.swift (292 lines) - Beautiful permission UIFeatures:
Example:
python3 scripts/generate_permission_manager.py ./Sources/Permissions
Creates Apple-required privacy manifest (PrivacyInfo.xcprivacy).
Usage:
python3 scripts/generate_privacy_manifest.py <output_path> [options]
Options:
--tracking Enable tracking (default: False)
--tracking-domains List of tracking domains
--api-types API types: user_defaults, file_timestamp, system_boot_time, disk_space
--data-types Data types: name, email, phone, location, photos
--mortgage-app Preset for mortgage calculator apps
Examples:
# Mortgage calculator app
python3 scripts/generate_privacy_manifest.py ./PrivacyInfo.xcprivacy --mortgage-app
# Custom configuration
python3 scripts/generate_privacy_manifest.py ./PrivacyInfo.xcprivacy \
--api-types user_defaults file_timestamp \
--data-types photos location
# With tracking
python3 scripts/generate_privacy_manifest.py ./PrivacyInfo.xcprivacy \
--tracking \
--tracking-domains example.com analytics.example.com \
--api-types user_defaults
Mortgage App Preset Includes:
Generates Info.plist usage description strings.
Usage:
python3 scripts/generate_infoplist_strings.py --permissions <types> [options]
Options:
--permissions Required: camera, photo_library, location, face_id, contacts, etc.
--output Output file path (optional)
--format xml (snippet) or plist (full file)
--mortgage-app Preset for mortgage apps
Examples:
# Print XML snippet for mortgage app
python3 scripts/generate_infoplist_strings.py --mortgage-app
# Save to file
python3 scripts/generate_infoplist_strings.py --mortgage-app --output ./InfoPlistStrings.xml
# Custom permissions
python3 scripts/generate_infoplist_strings.py \
--permissions camera photo_library location face_id \
--format xml
Supported Permissions:
Complete guide to Apple's privacy requirements:
Read this when:
Complete implementation examples including:
Read this when:
// 1. Add generated files to Xcode project:
// - PermissionManager.swift
// - PermissionRequestView.swift
// 2. Add PrivacyInfo.xcprivacy to project root
// 3. Add usage strings to Info.plist
// 4. Use in your app:
struct MyView: View {
@StateObject private var permissions = PermissionManager.shared
@State private var showCameraRequest = false
var body: some View {
Button("Scan Document") {
requestCamera()
}
.sheet(isPresented: $showCameraRequest) {
PermissionRequestView(permissionType: .camera) { granted in
if granted {
openScanner()
}
}
}
}
private func requestCamera() {
Task {
let status = await permissions.checkCameraStatus()
if status == .notDetermined {
showCameraRequest = true
} else if status == .authorized {
openScanner()
} else {
// Show settings alert
permissions.openAppSettings()
}
}
}
}
// Multi-step permission setup
struct OnboardingView: View {
let requiredPermissions: [PermissionType] = [
.camera,
.photoLibrary,
.notifications
]
var body: some View {
ForEach(requiredPermissions, id: \.self) { permission in
PermissionRequestView(
permissionType: permission,
customTitle: titleFor(permission),
customMessage: messageFor(permission)
)
}
}
}
// Use Face ID/Touch ID for sensitive data
struct SecureView: View {
@StateObject private var permissions = PermissionManager.shared
@State private var isUnlocked = false
var body: some View {
if isUnlocked {
SensitiveContent()
} else {
Button("Unlock with Face ID") {
authenticate()
}
}
}
private func authenticate() {
Task {
do {
let success = try await permissions.authenticateWithBiometrics(
reason: "Access your financial data"
)
isUnlocked = success
} catch {
// Handle error
}
}
}
}
// Show all permission statuses
struct SettingsView: View {
var body: some View {
NavigationStack {
PermissionsDashboardView()
.navigationTitle("Permissions")
}
}
}
❌ Don't: Request all permissions on launch ✅ Do: Request when user needs the feature
❌ Don't: Show system alert immediately ✅ Do: Show custom UI explaining benefit
❌ Don't: Block app functionality ✅ Do: Provide alternatives and settings links
Required:
# Generate complete setup
python3 scripts/generate_permission_manager.py ./Sources
python3 scripts/generate_privacy_manifest.py ./PrivacyInfo.xcprivacy --mortgage-app
python3 scripts/generate_infoplist_strings.py --mortgage-app
Permissions:
Focus:
// Document scanner with permissions
struct DocumentScannerApp: View {
@StateObject private var permissions = PermissionManager.shared
var body: some View {
TabView {
ScannerView()
.tabItem { Label("Scan", systemImage: "camera") }
PermissionsDashboardView()
.tabItem { Label("Settings", systemImage: "gear") }
}
}
}
Focus:
MyApp/
├── Sources/
│ └── Permissions/
│ ├── PermissionManager.swift (389 lines)
│ └── PermissionRequestView.swift (292 lines)
├── PrivacyInfo.xcprivacy (Privacy manifest)
└── Info.plist (Updated with usage strings)
This skill provides:
Generate in minutes what would take hours to build manually!