[AltStoreCore] Adds Permissions.plist with definitions for most known permissions

Simpler to update over time as a separate plist rather than in source code.
This commit is contained in:
Riley Testut
2023-05-26 17:00:00 -05:00
committed by Magesh K
parent 7f9ee81150
commit f9bd65a1b5
3 changed files with 909 additions and 20 deletions

View File

@@ -351,6 +351,7 @@
D52EF2BE2A0594550096C377 /* AppDetailCollectionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D52EF2BD2A0594550096C377 /* AppDetailCollectionViewController.swift */; }; D52EF2BE2A0594550096C377 /* AppDetailCollectionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D52EF2BD2A0594550096C377 /* AppDetailCollectionViewController.swift */; };
D533E8B72727841800A9B5DD /* libAppleArchive.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = D533E8B62727841800A9B5DD /* libAppleArchive.tbd */; settings = {ATTRIBUTES = (Weak, ); }; }; D533E8B72727841800A9B5DD /* libAppleArchive.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = D533E8B62727841800A9B5DD /* libAppleArchive.tbd */; settings = {ATTRIBUTES = (Weak, ); }; };
D533E8BE2727BBF800A9B5DD /* libcurl.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D533E8BD2727BBF800A9B5DD /* libcurl.a */; }; D533E8BE2727BBF800A9B5DD /* libcurl.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D533E8BD2727BBF800A9B5DD /* libcurl.a */; };
D53D84022A2158FC00543C3B /* Permissions.plist in Resources */ = {isa = PBXBuildFile; fileRef = D53D84012A2158FC00543C3B /* Permissions.plist */; };
D54058B92A1D6269008CCC58 /* AppPermissionProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = D54058B82A1D6269008CCC58 /* AppPermissionProtocol.swift */; }; D54058B92A1D6269008CCC58 /* AppPermissionProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = D54058B82A1D6269008CCC58 /* AppPermissionProtocol.swift */; };
D54058BB2A1D8FE3008CCC58 /* UIColor+AltStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = D54058BA2A1D8FE3008CCC58 /* UIColor+AltStore.swift */; }; D54058BB2A1D8FE3008CCC58 /* UIColor+AltStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = D54058BA2A1D8FE3008CCC58 /* UIColor+AltStore.swift */; };
D540E93828EE1BDE000F1B0F /* ErrorDetailsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D540E93728EE1BDE000F1B0F /* ErrorDetailsViewController.swift */; }; D540E93828EE1BDE000F1B0F /* ErrorDetailsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D540E93728EE1BDE000F1B0F /* ErrorDetailsViewController.swift */; };
@@ -917,6 +918,7 @@
D533E8B82727B61400A9B5DD /* fragmentzip.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = fragmentzip.h; sourceTree = "<group>"; }; D533E8B82727B61400A9B5DD /* fragmentzip.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = fragmentzip.h; sourceTree = "<group>"; };
D533E8BB2727BBEE00A9B5DD /* libfragmentzip.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libfragmentzip.a; path = Dependencies/fragmentzip/libfragmentzip.a; sourceTree = SOURCE_ROOT; }; D533E8BB2727BBEE00A9B5DD /* libfragmentzip.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libfragmentzip.a; path = Dependencies/fragmentzip/libfragmentzip.a; sourceTree = SOURCE_ROOT; };
D533E8BD2727BBF800A9B5DD /* libcurl.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libcurl.a; path = Dependencies/libcurl/libcurl.a; sourceTree = SOURCE_ROOT; }; D533E8BD2727BBF800A9B5DD /* libcurl.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libcurl.a; path = Dependencies/libcurl/libcurl.a; sourceTree = SOURCE_ROOT; };
D53D84012A2158FC00543C3B /* Permissions.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Permissions.plist; sourceTree = "<group>"; };
D54058B82A1D6269008CCC58 /* AppPermissionProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppPermissionProtocol.swift; sourceTree = "<group>"; }; D54058B82A1D6269008CCC58 /* AppPermissionProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppPermissionProtocol.swift; sourceTree = "<group>"; };
D54058BA2A1D8FE3008CCC58 /* UIColor+AltStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIColor+AltStore.swift"; sourceTree = "<group>"; }; D54058BA2A1D8FE3008CCC58 /* UIColor+AltStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIColor+AltStore.swift"; sourceTree = "<group>"; };
D540E93728EE1BDE000F1B0F /* ErrorDetailsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ErrorDetailsViewController.swift; sourceTree = "<group>"; }; D540E93728EE1BDE000F1B0F /* ErrorDetailsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ErrorDetailsViewController.swift; sourceTree = "<group>"; };
@@ -1665,6 +1667,7 @@
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
BFCB9206250AB2120057B44E /* Colors.xcassets */, BFCB9206250AB2120057B44E /* Colors.xcassets */,
D53D84012A2158FC00543C3B /* Permissions.plist */,
); );
path = Resources; path = Resources;
sourceTree = "<group>"; sourceTree = "<group>";
@@ -2402,6 +2405,7 @@
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
BFCB9207250AB2120057B44E /* Colors.xcassets in Resources */, BFCB9207250AB2120057B44E /* Colors.xcassets in Resources */,
D53D84022A2158FC00543C3B /* Permissions.plist in Resources */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };

View File

@@ -8,9 +8,9 @@
import AltSign import AltSign
public extension ALTAppPermissionType extension ALTAppPermissionType
{ {
var localizedName: String? { public var localizedName: String? {
switch self switch self
{ {
case .unknown: return NSLocalizedString("Permission", comment: "") case .unknown: return NSLocalizedString("Permission", comment: "")
@@ -19,25 +19,78 @@ public extension ALTAppPermissionType
default: return nil default: return nil
} }
} }
fileprivate var knownPermissionsKey: String? {
switch self
{
case .unknown: return nil
case .entitlement: return "entitlements"
case .privacy: return "privacy"
default: return nil
}
}
} }
public protocol ALTAppPermission: RawRepresentable<String>, Hashable public protocol ALTAppPermission: RawRepresentable<String>, Hashable
{ {
var type: ALTAppPermissionType { get } var type: ALTAppPermissionType { get }
var symbolName: String? { get }
var localizedName: String? { get }
var synthesizedName: String? { get } // Kupo! var synthesizedName: String? { get } // Kupo!
// Default implementations
var localizedName: String? { get }
var localizedDescription: String? { get } var localizedDescription: String? { get }
var symbolName: String? { get }
// Convenience properties with default implementations. // Convenience properties (also with default implementations).
// Would normally just be in extension, except that crashes Swift 5.8 compiler ¯\_()_/¯ // Would normally just be in extension, except that crashes Swift 5.8 compiler ¯\_()_/¯
var isKnown: Bool { get } var isKnown: Bool { get }
var effectiveSymbolName: String { get } var effectiveSymbolName: String { get }
var localizedDisplayName: String { get } var localizedDisplayName: String { get }
} }
private struct KnownPermission: Decodable
{
var localizedName: String
var localizedDescription: String
var rawValue: String
var symbolName: String
private enum CodingKeys: String, CodingKey
{
case localizedName = "name"
case localizedDescription = "description"
case rawValue = "key"
case symbolName = "symbol"
}
}
private let knownPermissions: [String: [String: KnownPermission]] = {
guard let fileURL = Bundle(for: DatabaseManager.self).url(forResource: "Permissions", withExtension: "plist"),
let data = try? Data(contentsOf: fileURL),
let propertyList = try? PropertyListDecoder().decode([String: [String: KnownPermission]].self, from: data)
else {
fatalError("Could not decode Permissions.plist.")
}
return propertyList
}()
public extension ALTAppPermission
{
private var knownPermission: KnownPermission? {
guard let key = self.type.knownPermissionsKey,
let permissions = knownPermissions[key]
else { return nil }
let knownPermission = permissions[self.rawValue]
return knownPermission
}
var localizedName: String? { self.knownPermission?.localizedName }
var localizedDescription: String? { self.knownPermission?.localizedDescription }
var symbolName: String? { self.knownPermission?.symbolName }
}
public extension ALTAppPermission public extension ALTAppPermission
{ {
var isKnown: Bool { var isKnown: Bool {
@@ -50,10 +103,7 @@ public extension ALTAppPermission
var localizedDisplayName: String { var localizedDisplayName: String {
return self.localizedName ?? self.synthesizedName ?? self.rawValue return self.localizedName ?? self.synthesizedName ?? self.rawValue
} }
}
public extension ALTAppPermission
{
func isEqual(_ permission: any ALTAppPermission) -> Bool func isEqual(_ permission: any ALTAppPermission) -> Bool
{ {
guard let permission = permission as? Self else { return false } guard let permission = permission as? Self else { return false }
@@ -69,13 +119,8 @@ public extension ALTAppPermission
public struct UnknownAppPermission: ALTAppPermission public struct UnknownAppPermission: ALTAppPermission
{ {
public var type: ALTAppPermissionType { .unknown } public var type: ALTAppPermissionType { .unknown }
public var symbolName: String? { nil }
public var localizedName: String? { nil }
public var synthesizedName: String? { nil } public var synthesizedName: String? { nil }
public var localizedDescription: String? { nil }
public var rawValue: String public var rawValue: String
public init(rawValue: String) public init(rawValue: String)
@@ -87,9 +132,6 @@ public struct UnknownAppPermission: ALTAppPermission
extension ALTEntitlement: ALTAppPermission extension ALTEntitlement: ALTAppPermission
{ {
public var type: ALTAppPermissionType { .entitlement } public var type: ALTAppPermissionType { .entitlement }
public var symbolName: String? { nil }
public var localizedName: String? { nil }
public var synthesizedName: String? { public var synthesizedName: String? {
// Attempt to convert last component of entitlement to human-readable string. // Attempt to convert last component of entitlement to human-readable string.
@@ -108,8 +150,6 @@ extension ALTEntitlement: ALTAppPermission
let synthesizedName = words.joined(separator: " ") let synthesizedName = words.joined(separator: " ")
return synthesizedName return synthesizedName
} }
public var localizedDescription: String? { nil }
} }
extension ALTAppPrivacyPermission: ALTAppPermission extension ALTAppPrivacyPermission: ALTAppPermission

View File

@@ -0,0 +1,845 @@
<?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>entitlements</key>
<dict>
<key>autofill credential provider</key>
<dict>
<key>name</key>
<string>AutoFill Credential Provider</string>
<key>description</key>
<string>Allows app to provide user names and passwords for AutoFill</string>
<key>key</key>
<string>com.apple.developer.authentication-services.autofill-credential-provider</string>
<key>symbol</key>
<string>wallet.pass</string>
</dict>
<key>applesignin</key>
<dict>
<key>name</key>
<string>Sign in with Apple</string>
<key>description</key>
<string>Allows sign in with Apple.</string>
<key>key</key>
<string>com.apple.developer.applesignin</string>
<key>symbol</key>
<string>apple.logo</string>
</dict>
<key>parent-application-identifiers</key>
<dict>
<key>name</key>
<string>Parent Application Identifiers</string>
<key>description</key>
<string>Allows app to use App Clips</string>
<key>key</key>
<string>com.apple.developer.parent-application-identifiers</string>
<key>symbol</key>
<string>appclip</string>
</dict>
<key>associated-appclip-app-identifiers</key>
<dict>
<key>name</key>
<string>Associated App Clip Identifiers</string>
<key>description</key>
<string>Allows app to use App Clips with other apps.</string>
<key>key</key>
<string>com.apple.developer.associated-appclip-app-identifiers</string>
<key>symbol</key>
<string>appclip</string>
</dict>
<key>on-demand-install-capable</key>
<dict>
<key>name</key>
<string>On-Demand Install Capable</string>
<key>description</key>
<string>App can install App Clips</string>
<key>key</key>
<string>com.apple.developer.on-demand-install-capable</string>
<key>symbol</key>
<string>appclip</string>
</dict>
<key>carplay-audio</key>
<dict>
<key>name</key>
<string>CarPlay Audio</string>
<key>description</key>
<string>Allows the app to provide audio content for CarPlay.</string>
<key>key</key>
<string>com.apple.developer.carplay-audio</string>
<key>symbol</key>
<string>car</string>
</dict>
<key>carplay-charging</key>
<dict>
<key>name</key>
<string>CarPlay Charging</string>
<key>description</key>
<string>Allows charging capabilities for CarPlay.</string>
<key>key</key>
<string>com.apple.developer.carplay-charging</string>
<key>symbol</key>
<string>car</string>
</dict>
<key>carplay-communication</key>
<dict>
<key>name</key>
<string>CarPlay Communication</string>
<key>description</key>
<string>Allows the app to make and receive phone calls, messages, and other communications through CarPlay.</string>
<key>key</key>
<string>com.apple.developer.carplay-communication</string>
<key>symbol</key>
<string>car</string>
</dict>
<key>carplay-maps</key>
<dict>
<key>name</key>
<string>CarPlay Maps</string>
<key>description</key>
<string>Allows the app to provide maps and navigation services for CarPlay.</string>
<key>key</key>
<string>com.apple.developer.carplay-maps</string>
<key>symbol</key>
<string>car</string>
</dict>
<key>carplay-parking</key>
<dict>
<key>name</key>
<string>CarPlay Parking</string>
<key>description</key>
<string>Allows the app to provide parking-related services for CarPlay.</string>
<key>key</key>
<string>com.apple.developer.carplay-parking</string>
<key>symbol</key>
<string>car</string>
</dict>
<key>carplay-quick-ordering</key>
<dict>
<key>name</key>
<string>CarPlay Quick Ordering</string>
<key>description</key>
<string>Allows the app to provide quick ordering capabilities for CarPlay.</string>
<key>key</key>
<string>com.apple.developer.carplay-quick-ordering</string>
<key>symbol</key>
<string>car</string>
</dict>
<key>carplay-messaging</key>
<dict>
<key>name</key>
<string>CarPlay Messaging</string>
<key>description</key>
<string>Allows the app to send and receive messages through CarPlay.</string>
<key>key</key>
<string>com.apple.developer.carplay-messaging</string>
<key>symbol</key>
<string>car</string>
</dict>
<key>automated-device-enrollment.add-devices</key>
<dict>
<key>name</key>
<string>Automated Device Enrollment</string>
<key>description</key>
<string>Grants access to add a device to Automated Device Enrollment.</string>
<key>key</key>
<string>com.apple.developer.automated-device-enrollment.add-devices</string>
<key>symbol</key>
<string>macbook.and.iphone</string>
</dict>
<key>ClassKit-environment</key>
<dict>
<key>name</key>
<string>ClassKit</string>
<key>description</key>
<string>Grants access to the ClassKit development or production environment for an education app that works with the Schoolwork app.</string>
<key>key</key>
<string>com.apple.developer.ClassKit-environment</string>
<key>symbol</key>
<string>books.vertical</string>
</dict>
<key>automatic-assessment-configuration</key>
<dict>
<key>name</key>
<string>Automatic Assessment Configuration</string>
<key>description</key>
<string>Allows app to create an assessment session.</string>
<key>key</key>
<string>com.apple.developer.automatic-assessment-configuration</string>
<key>symbol</key>
<string>books.vertical</string>
</dict>
<key>mail-client</key>
<dict>
<key>name</key>
<string>Mail Client</string>
<key>description</key>
<string>Allows app to act as a user&apos;s default email client.</string>
<key>key</key>
<string>com.apple.developer.mail-client</string>
<key>symbol</key>
<string>envelope</string>
</dict>
<key>exposure-notification</key>
<dict>
<key>name</key>
<string>Exposure Notification</string>
<key>description</key>
<string>App may use exposure notification.</string>
<key>key</key>
<string>com.apple.developer.exposure-notification</string>
<key>symbol</key>
<string>microbe.fill</string>
</dict>
<key>family-controls</key>
<dict>
<key>name</key>
<string>Family Controls</string>
<key>description</key>
<string>App can request or revoke authorization to provide parental controls.</string>
<key>key</key>
<string>com.apple.developer.family-controls</string>
<key>symbol</key>
<string>figure.and.child.holdinghands</string>
</dict>
<key>fileprovider.testing-mode</key>
<dict>
<key>name</key>
<string>Testing Mode</string>
<key>description</key>
<string>App can enter testing mode.</string>
<key>key</key>
<string>com.apple.developer.fileprovider.testing-mode</string>
<key>symbol</key>
<string>testtube.2</string>
</dict>
<key>com.apple.developer.game-center</key>
<dict>
<key>name</key>
<string>Game Center</string>
<key>description</key>
<string>App may see and compare achievements on a leaderboard, invite friends, and start multiplayer games.</string>
<key>key</key>
<string>com.apple.developer.game-center</string>
<key>symbol</key>
<string>gamecontroller</string>
</dict>
<key>group-session</key>
<dict>
<key>name</key>
<string>Group Activities</string>
<key>description</key>
<string>Allows the app to schedule and participate in group activities.</string>
<key>key</key>
<string>com.apple.developer.group-session</string>
<key>symbol</key>
<string>person.3</string>
</dict>
<key>com.apple.developer.healthkit</key>
<dict>
<key>name</key>
<string>Health</string>
<key>description</key>
<string>Allows the app to access your Health data.</string>
<key>key</key>
<string>com.apple.developer.healthkit</string>
<key>symbol</key>
<string>heart.text.square</string>
</dict>
<key>healthkit.background-delivery</key>
<dict>
<key>name</key>
<string>Health - Background Updates</string>
<key>description</key>
<string>App may receive health updates while running in the background.</string>
<key>key</key>
<string>com.apple.developer.healthkit.background-delivery</string>
<key>symbol</key>
<string>heart.text.square</string>
</dict>
<key>com.apple.developer.healthkit.recalibrate-estimates</key>
<dict>
<key>name</key>
<string>Health - Recalibrate</string>
<key>description</key>
<string>App may recalibrate Health data.</string>
<key>key</key>
<string>com.apple.developer.healthkit.recalibrate-estimates</string>
<key>symbol</key>
<string>heart.text.square</string>
</dict>
<key>homekit</key>
<dict>
<key>name</key>
<string>HomeKit - Matter</string>
<key>description</key>
<string>Allows app to provide the setup of a Matter device.</string>
<key>key</key>
<string>com.apple.developer.homekit</string>
<key>symbol</key>
<string>house</string>
</dict>
<key>com.apple.security.hypervisor</key>
<dict>
<key>name</key>
<string>Hypervisor</string>
<key>description</key>
<string>Allows app to create and manage virtual machines.</string>
<key>key</key>
<string>com.apple.security.hypervisor</string>
<key>symbol</key>
<string>externaldrive.connected.to.line.below</string>
</dict>
<key>com.apple.vm.device-access</key>
<dict>
<key>name</key>
<string>Device Access</string>
<key>description</key>
<string>App can capture USB devices and uses them in the guest-operating system.</string>
<key>key</key>
<string>com.apple.vm.device-access</string>
<key>symbol</key>
<string>mediastick</string>
</dict>
<key>com.apple.vm.networking</key>
<dict>
<key>name</key>
<string>Networking</string>
<key>description</key>
<string>App can manage virtual network interfaces without escalating privileges to the root user.</string>
<key>key</key>
<string>com.apple.vm.networking</string>
<key>symbol</key>
<string>network</string>
</dict>
<key>com.apple.security.virtualization</key>
<dict>
<key>name</key>
<string>Virtualization</string>
<key>description</key>
<string>App can use the Virtualization framework.</string>
<key>key</key>
<string>com.apple.security.virtualization</string>
<key>symbol</key>
<string>server.rack</string>
</dict>
<key>com.apple.developer.icloud-container-development-container-identifiers</key>
<dict>
<key>name</key>
<string>iCloud Container Development Container Identifiers</string>
<key>description</key>
<string>App can use iCloud containers for testing environments.</string>
<key>key</key>
<string>com.apple.developer.icloud-container-development-container-identifiers</string>
<key>symbol</key>
<string>icloud</string>
</dict>
<key>com.apple.developer.icloud-container-environment</key>
<dict>
<key>name</key>
<string>iCloud Container Environment</string>
<key>description</key>
<string>App can set up iCloud testing environment.</string>
<key>key</key>
<string>com.apple.developer.icloud-container-environment</string>
<key>symbol</key>
<string>icloud</string>
</dict>
<key>com.apple.developer.icloud-container-identifiers</key>
<dict>
<key>name</key>
<string>iCloud Container Identifiers</string>
<key>description</key>
<string>App can set up iCloud identifiers used for testing environments.</string>
<key>key</key>
<string>com.apple.developer.icloud-container-identifiers</string>
<key>symbol</key>
<string>icloud</string>
</dict>
<key>com.apple.developer.icloud-services</key>
<dict>
<key>name</key>
<string>iCloud Services Entitlement</string>
<key>description</key>
<string>Grants access to iCloud services.</string>
<key>key</key>
<string>com.apple.developer.icloud-services</string>
<key>symbol</key>
<string>icloud</string>
</dict>
<key>com.apple.developer.ubiquity-kvstore-identifier</key>
<dict>
<key>name</key>
<string>iCloud Key-Value Store Entitlement</string>
<key>description</key>
<string>The container identifier to use for iCloud key-value storage.</string>
<key>key</key>
<string>com.apple.developer.ubiquity-kvstore-identifier</string>
<key>symbol</key>
<string>icloud</string>
</dict>
<key>com.apple.developer.location.push</key>
<dict>
<key>name</key>
<string>Location Sharing Push Notifications</string>
<key>description</key>
<string>Enables location-sharing app to query someones location in response to a push notification.</string>
<key>key</key>
<string>com.apple.developer.location.push</string>
<key>symbol</key>
<string>location</string>
</dict>
<key>com.apple.developer.media-device-discovery-extension</key>
<dict>
<key>name</key>
<string>Media Device Discovery Extension</string>
<key>description</key>
<string>App extension that adds a third-party media receiver to a system device-picker UI.</string>
<key>key</key>
<string>com.apple.developer.media-device-discovery-extension</string>
<key>symbol</key>
<string>display.2</string>
</dict>
<key>com.apple.developer.avfoundation.multitasking-camera-access</key>
<dict>
<key>name</key>
<string>Multitasking Camera Access</string>
<key>description</key>
<string>App may continue using the camera at the same time as another foreground app.</string>
<key>key</key>
<string>com.apple.developer.avfoundation.multitasking-camera-access</string>
<key>symbol</key>
<string>camera.on.rectangle</string>
</dict>
<key>com.apple.developer.kernel.increased-memory-limit</key>
<dict>
<key>name</key>
<string>Increased Memory Limit</string>
<key>description</key>
<string>Allows app to perform better with a higher memory limit on supported devices.</string>
<key>key</key>
<string>com.apple.developer.kernel.increased-memory-limit</string>
<key>symbol</key>
<string>memorychip</string>
</dict>
<key>com.apple.developer.kernel.extended-virtual-addressing</key>
<dict>
<key>name</key>
<string>Extended Virtual Addressing</string>
<key>description</key>
<string>App may access an extended address space.</string>
<key>key</key>
<string>com.apple.developer.kernel.extended-virtual-addressing</string>
<key>symbol</key>
<string>memorychip</string>
</dict>
<key>com.apple.developer.networking.networkextension</key>
<dict>
<key>name</key>
<string>Network Extensions</string>
<key>description</key>
<string>App can customize networking features.</string>
<key>key</key>
<string>com.apple.developer.networking.networkextension</string>
<key>symbol</key>
<string>network</string>
</dict>
<key>com.apple.developer.networking.vpn.api</key>
<dict>
<key>name</key>
<string>Personal VPN</string>
<key>description</key>
<string>App can create and control a custom system VPN configuration.</string>
<key>key</key>
<string>com.apple.developer.networking.vpn.api</string>
<key>symbol</key>
<string>network</string>
</dict>
<key>com.apple.developer.associated-domains</key>
<dict>
<key>name</key>
<string>Associated Domains</string>
<key>description</key>
<string>The associated domains for specific services, such as shared web credentials, universal links, and App Clips.</string>
<key>key</key>
<string>com.apple.developer.associated-domains</string>
<key>symbol</key>
<string>network</string>
</dict>
<key>com.apple.developer.networking.multicast</key>
<dict>
<key>name</key>
<string>Multicast</string>
<key>description</key>
<string>App can send or receive IP multicast traffic.</string>
<key>key</key>
<string>com.apple.developer.networking.multicast</string>
<key>symbol</key>
<string>network</string>
</dict>
<key>com.apple.developer.associated-domains.applinks.read-write</key>
<dict>
<key>name</key>
<string>Applinks</string>
<key>description</key>
<string>Grants app read/write access to Applinks</string>
<key>key</key>
<string>com.apple.developer.associated-domains.applinks.read-write</string>
<key>symbol</key>
<string>network</string>
</dict>
<key>com.apple.developer.networking.manage-thread-network-credentials</key>
<dict>
<key>name</key>
<string>ThreadNetwork</string>
<key>description</key>
<string>Grants access to the ThreadNetwork API.</string>
<key>key</key>
<string>com.apple.developer.networking.manage-thread-network-credentials</string>
<key>symbol</key>
<string>network</string>
</dict>
<key>aps-environment</key>
<dict>
<key>name</key>
<string>Push Notifications</string>
<key>description</key>
<string>App can send push notifications.</string>
<key>key</key>
<string>aps-environment</string>
<key>symbol</key>
<string>platter.filled.top.and.arrow.up.iphone</string>
</dict>
<key>com.apple.developer.usernotifications.filtering</key>
<dict>
<key>name</key>
<string>Notification Filtering</string>
<key>description</key>
<string>App can receive notifications without displaying them to the user.</string>
<key>key</key>
<string>com.apple.developer.usernotifications.filtering</string>
<key>symbol</key>
<string>platter.filled.top.and.arrow.up.iphone</string>
</dict>
<key>com.apple.developer.device-information.user-assigned-device-name</key>
<dict>
<key>name</key>
<string>Device Name</string>
<key>description</key>
<string>Grants access to the user-assigned device name instead of a generic device name.</string>
<key>key</key>
<string>com.apple.developer.device-information.user-assigned-device-name</string>
<key>symbol</key>
<string>ipad.and.iphone</string>
</dict>
<key>com.apple.developer.severe-vehicular-crash-event</key>
<dict>
<key>name</key>
<string>Crash Detection</string>
<key>description</key>
<string>Grants access to Crash Detection events.</string>
<key>key</key>
<string>com.apple.developer.severe-vehicular-crash-event</string>
<key>symbol</key>
<string>car.side.and.exclamationmark</string>
</dict>
<key>com.apple.security.application-groups</key>
<dict>
<key>name</key>
<string>App Groups</string>
<key>description</key>
<string>Allows app to share files with other apps and app extensions in same App Group.</string>
<key>key</key>
<string>com.apple.security.application-groups</string>
<key>symbol</key>
<string>rectangle.3.group</string>
</dict>
<key>keychain-access-groups</key>
<dict>
<key>name</key>
<string>Keychain</string>
<key>description</key>
<string>Allows app to read and write secure data to the system&apos;s keychain.</string>
<key>key</key>
<string>keychain-access-groups</string>
<key>symbol</key>
<string>key.horizontal</string>
</dict>
<key>com.apple.developer.default-data-protection</key>
<dict>
<key>name</key>
<string>Data Protection</string>
<key>description</key>
<string>App can set the level of data protection for sensitive user data when accessed on a device.</string>
<key>key</key>
<string>com.apple.developer.default-data-protection</string>
<key>symbol</key>
<string>lock.doc</string>
</dict>
<key>com.apple.developer.devicecheck.appattest-environment</key>
<dict>
<key>name</key>
<string>App Attest Environment</string>
<key>description</key>
<string>Allows app to use the App Attest service to validate itself.</string>
<key>key</key>
<string>com.apple.developer.devicecheck.appattest-environment</string>
<key>symbol</key>
<string>app.badge.checkmark</string>
</dict>
<key>com.apple.security.smartcard</key>
<dict>
<key>name</key>
<string>Smart Card Access</string>
<key>description</key>
<string>Grants access to smart card slots and smart cards.</string>
<key>key</key>
<string>com.apple.security.smartcard</string>
<key>symbol</key>
<string>greetingcard</string>
</dict>
<key>com.apple.developer.sensorkit.reader.allow</key>
<dict>
<key>name</key>
<string>Sensor Data</string>
<key>description</key>
<string>Grants access to sensor data that&apos;s required by your app&apos;s preapproved research study.</string>
<key>key</key>
<string>com.apple.developer.sensorkit.reader.allow</string>
<key>symbol</key>
<string>sensor</string>
</dict>
<key>com.apple.developer.siri</key>
<dict>
<key>name</key>
<string>Siri</string>
<key>description</key>
<string>Allows app to handle Siri requests.</string>
<key>key</key>
<string>com.apple.developer.siri</string>
<key>symbol</key>
<string>mic</string>
</dict>
<key>com.apple.developer.storekit.external-link.account</key>
<dict>
<key>name</key>
<string>External Website Account Linking</string>
<key>description</key>
<string>App can link to an external website for account creation or management.</string>
<key>key</key>
<string>com.apple.developer.storekit.external-link.account</string>
<key>symbol</key>
<string>link.badge.plus</string>
</dict>
<key>com.apple.developer.storekit.external-purchase</key>
<dict>
<key>name</key>
<string>External Purchases</string>
<key>description</key>
<string>App can offer external purchases.</string>
<key>key</key>
<string>com.apple.developer.storekit.external-purchase</string>
<key>symbol</key>
<string>dollarsign.circle</string>
</dict>
<key>com.apple.developer.storekit.external-purchase-link</key>
<dict>
<key>name</key>
<string>External Purchase Website Link</string>
<key>description</key>
<string>App can include a link that directs users to a website to make an external purchase.</string>
<key>key</key>
<string>com.apple.developer.storekit.external-purchase-link</string>
<key>symbol</key>
<string>link.badge.plus</string>
</dict>
<key>com.apple.developer.video-subscriber-single-sign-on</key>
<dict>
<key>name</key>
<string>Subscriber Single Sign-On</string>
<key>description</key>
<string>Allows app to use single sign on</string>
<key>key</key>
<string>com.apple.developer.video-subscriber-single-sign-on</string>
<key>symbol</key>
<string>rectangle.and.pencil.and.ellipsis</string>
</dict>
<key>com.apple.smoot.subscriptionservice</key>
<dict>
<key>name</key>
<string>Subscription</string>
<key>description</key>
<string>Allows app to check for subscription</string>
<key>key</key>
<string>com.apple.smoot.subscriptionservice</string>
<key>symbol</key>
<string>person.crop.circle.badge.checkmark</string>
</dict>
<key>com.apple.developer.pass-type-identifiers</key>
<dict>
<key>name</key>
<string>Pass Type</string>
<key>description</key>
<string>Allows app to check for passes in Apple Wallet</string>
<key>key</key>
<string>com.apple.developer.pass-type-identifiers</string>
<key>symbol</key>
<string>wallet.pass</string>
</dict>
<key>com.apple.developer.in-app-payments</key>
<dict>
<key>name</key>
<string>In-App Payments</string>
<key>description</key>
<string>Allows app to use Apple Pay</string>
<key>key</key>
<string>com.apple.developer.in-app-payments</string>
<key>symbol</key>
<string>dollarsign.circle</string>
</dict>
<key>com.apple.developer.in-app-identity-presentment</key>
<dict>
<key>name</key>
<string>In-App Identity Presentment</string>
<key>description</key>
<string>Allows app to verify user for Apple Pay</string>
<key>key</key>
<string>com.apple.developer.in-app-identity-presentment</string>
<key>symbol</key>
<string>dollarsign.circle</string>
</dict>
<key>com.apple.developer.in-app-identity-presentment.merchant-identifiers</key>
<dict>
<key>name</key>
<string>In-App Identity Presentment (Merchant Identifiers)</string>
<key>description</key>
<string>Allows app to verify merchant for Apple Pay</string>
<key>key</key>
<string>com.apple.developer.in-app-identity-presentment.merchant-identifiers</string>
<key>symbol</key>
<string>dollarsign.circle</string>
</dict>
<key>com.apple.developer.weatherkit</key>
<dict>
<key>name</key>
<string>Weather Data</string>
<key>description</key>
<string>Allows app to use WeatherKit</string>
<key>key</key>
<string>com.apple.developer.weatherkit</string>
<key>symbol</key>
<string>cloud.sun</string>
</dict>
<key>com.apple.developer.web-browser</key>
<dict>
<key>name</key>
<string>Default Web Browser</string>
<key>description</key>
<string>Allows app to be used as the user&apos;s default web browser.</string>
<key>key</key>
<string>com.apple.developer.web-browser</string>
<key>symbol</key>
<string>globe.europe.africa</string>
</dict>
<key>com.apple.developer.web-browser.public-key-credential</key>
<dict>
<key>name</key>
<string>Public Key Credential</string>
<key>description</key>
<string>Allows app to access passkeys</string>
<key>key</key>
<string>com.apple.developer.web-browser.public-key-credential</string>
<key>symbol</key>
<string>key.viewfinder</string>
</dict>
<key>com.apple.developer.networking.wifi-info</key>
<dict>
<key>name</key>
<string>Wi-Fi Information Access</string>
<key>description</key>
<string>Allows app to access information about the connected Wi-Fi network.</string>
<key>key</key>
<string>com.apple.developer.networking.wifi-info</string>
<key>symbol</key>
<string>wifi</string>
</dict>
<key>com.apple.external-accessory.wireless-configuration</key>
<dict>
<key>name</key>
<string>Wireless Accessory Configuration</string>
<key>description</key>
<string>App may configure MFi Wi-Fi accessories.</string>
<key>key</key>
<string>com.apple.external-accessory.wireless-configuration</string>
<key>symbol</key>
<string>wifi</string>
</dict>
<key>com.apple.developer.networking.multipath</key>
<dict>
<key>name</key>
<string>Multipath Support</string>
<key>description</key>
<string>App may use Multipath protocols to seamlessly transition between Wi-Fi and cellular networks.</string>
<key>key</key>
<string>com.apple.developer.networking.multipath</string>
<key>symbol</key>
<string>antenna.radiowaves.left.and.right</string>
</dict>
<key>com.apple.developer.networking.HotspotConfiguration</key>
<dict>
<key>name</key>
<string>Hotspot Configuration</string>
<key>description</key>
<string>App can use the hotspot manager to configure Wi-Fi networks.</string>
<key>key</key>
<string>com.apple.developer.networking.HotspotConfiguration</string>
<key>symbol</key>
<string>personalhotspot</string>
</dict>
<key>com.apple.developer.nfc.readersession.formats</key>
<dict>
<key>name</key>
<string>NFC Tag Reader Session Formats</string>
<key>description</key>
<string>The Near Field Communication data formats an app can read.</string>
<key>key</key>
<string>com.apple.developer.nfc.readersession.formats</string>
<key>symbol</key>
<string>iphone.gen1.radiowaves.left.and.right.circle</string>
</dict>
<key>get-task-allow</key>
<dict>
<key>name</key>
<string>Debuggable</string>
<key>description</key>
<string>Allows developers to attach a debugger to this app. This permission is required for JIT to work.</string>
<key>key</key>
<string>get-task-allow</string>
<key>symbol</key>
<string>hammer</string>
</dict>
<key>inter-app-audio</key>
<dict>
<key>name</key>
<string>Inter-App Audio</string>
<key>description</key>
<string>Allows sharing real-time audio between apps.</string>
<key>key</key>
<string>inter-app-audio</string>
<key>symbol</key>
<string>hifispeaker.2</string>
</dict>
<key>com.apple.developer.healthkit.access</key>
<dict>
<key>name</key>
<string>Sensitive Health Data</string>
<key>description</key>
<string>Allows the app to access your sensitive Health data.</string>
<key>key</key>
<string>com.apple.developer.healthkit.access</string>
<key>symbol</key>
<string>heart.text.square</string>
</dict>
</dict>
</dict>
</plist>