.NET Library with useful Apple/Xcode tool wrappers and implementations for developers including a global .NET CLI tool
Install the global CLI tool:
dotnet tool install -g AppleDev.ToolInstall the library packages:
# Core Apple development tools
dotnet add package AppleDev
# App Store Connect API client
dotnet add package AppStoreConnectClient
# IDB (iOS Development Bridge) client
dotnet add package AppleDev.FbIdbThe apple command provides comprehensive tooling for Apple development workflows:
Manage iOS, watchOS, tvOS, and visionOS simulators.
Lists simulators with powerful filtering options.
Options:
--booted- Show only running simulators--available- Show only available simulators--unavailable- Show only unavailable simulators (e.g., unsupported runtime)--name <name>- Filter by simulator name--udid <udid>- Filter by UDID--runtime <runtime>- Filter by runtime (e.g., "iOS 18.3", "tvOS 18.2")--device-type <type>- Filter by device type (e.g., "iPhone 16 Pro")--product-family <family>- Filter by product family (e.g., "iPhone", "Apple TV")--format <format>- Output format: table (default), json, or verbose--verbose- Show additional details--include-screen-info- Include device type screen information (size, scale, DPI, pixel dimensions, model identifier)
Examples:
apple simulator list
apple simulator list --available --runtime "iOS 18.4"
apple simulator list --booted --format json
apple simulator list --product-family iPhoneCreates a new simulator.
Arguments:
<name>- Name for the new simulator
Options:
-d, --device-type <type>- Device type identifier (required, e.g., "iPhone 15")-r, --runtime <runtime>- Runtime identifier (optional, uses newest compatible if omitted)
Examples:
apple simulator create "My iPhone 16" --device-type "iPhone 16"
apple simulator create "Test Device" --device-type "iPhone 15 Pro" --runtime "iOS 17.0"Boots a simulator.
Arguments:
<target>- Simulator UDID or name
Options:
--wait- Wait until simulator is fully booted--timeout <seconds>- Timeout for wait (default: 120)
Examples:
apple simulator boot "My iPhone 16"
apple simulator boot --wait --timeout 180 ABCD1234-1234-1234-123456789ABCShuts down running simulators.
Arguments:
<target>- Simulator UDID, name, "booted", or "all"
Examples:
apple simulator shutdown "My iPhone 16"
apple simulator shutdown booted
apple simulator shutdown allErases simulator content and settings (factory reset).
Arguments:
<target>- Simulator UDID, name, "booted", or "all"
Examples:
apple simulator erase "My iPhone 16"
apple simulator erase allPermanently deletes simulators.
Arguments:
<target>- Simulator UDID, name, "unavailable", or "all"
Examples:
apple simulator delete "Old Test Device"
apple simulator delete unavailable
apple simulator delete allCaptures a screenshot from a running simulator.
Arguments:
<target>- Simulator UDID or name-o, --output <path>- Output file or directory path
Examples:
apple simulator screenshot "My iPhone 16"
apple simulator screenshot --output ~/Desktop/screenshot.png "My iPhone 16"Installs an app (.app bundle) on a simulator.
Arguments:
<target>- Simulator UDID or name<app-path>- Path to .app bundle
Examples:
apple simulator app install "My iPhone 16" ~/MyApp.app
apple simulator app install booted /path/to/MyApp.appUninstalls an app from a simulator.
Arguments:
<target>- Simulator UDID or name<bundle-id>- Bundle identifier of the app
Examples:
apple simulator app uninstall "My iPhone 16" com.mycompany.myapp
apple simulator app uninstall booted com.example.appLaunches an installed app on a simulator.
Arguments:
<target>- Simulator UDID or name<bundle-id>- Bundle identifier of the app
Examples:
apple simulator app launch "My iPhone 16" com.mycompany.myapp
apple simulator app launch booted com.example.appTerminates a running app on a simulator.
Arguments:
<target>- Simulator UDID or name<bundle-id>- Bundle identifier of the app
Examples:
apple simulator app terminate "My iPhone 16" com.mycompany.myapp
apple simulator app terminate booted com.example.appLists all installed apps on a simulator.
Arguments:
<target>- Simulator UDID or name--format <format>- Output format: table (default), json, or verbose--verbose- Show additional details
Examples:
apple simulator app list "My iPhone 16"
apple simulator app list booted --format json
apple simulator app list --verboseOpens the Simulator.app, optionally to a specific simulator.
Arguments:
[udid]- Optional simulator UDID (if omitted, just opens Simulator.app)
Examples:
apple simulator open
apple simulator open ABCD1234-1234-1234-123456789ABCOpens a URL on a simulator (for deep linking and URL scheme testing).
Arguments:
<target>- Simulator UDID or name<url>- URL to open
Examples:
apple simulator open-url "My iPhone 16" "myapp://profile/123"
apple simulator open-url booted "https://example.com"Retrieves and displays logs from a simulator.
Arguments:
<target>- Simulator UDID or name--predicate <predicate>- NSPredicate filter for logs (e.g., "eventMessage contains 'error'")--start <timestamp>- Start timestamp for logs (e.g., "2025-10-30 10:00:00")--format <format>- Output format: table (default), json, or verbose--verbose- Show additional details
Examples:
apple simulator logs "My iPhone 16"
apple simulator logs booted --predicate "eventMessage contains 'error'"
apple simulator logs "My iPhone 16" --start "2025-10-30 10:00:00"
apple simulator logs "My iPhone 16" --format json
apple simulator logs booted --verboseLists available simulator device types and runtime versions with optional screen information.
Options:
--format <format>- Output format: table (default), json, or verbose--verbose- Show additional details--include-screen-info- Include device type screen information (size, scale, DPI, pixel dimensions, model identifier, product class)
Screen Information:
When --include-screen-info is specified, the following additional columns are shown:
- Screen Size - Width and height in points (e.g., "1206x2622")
- Scale - Display scale factor (e.g., "3" for @3x Retina displays)
- Pixel Size - Physical pixel dimensions (calculated as width * scale)
- DPI - Display dots per inch for width and height
- Model Identifier - Device model code (e.g., "iPhone17,1")
- Product Class - Product class code (e.g., "D93")
- Colorspace - Display colorspace (e.g., "DisplayP3" for Vision Pro)
Examples:
apple simulator device-types
apple simulator device-types --include-screen-info
apple simulator device-types --format json
apple simulator device-types --verboseCreates a new simulator.
Arguments:
<name>- Name for the new simulator
Options:
-d, --device-type <type>- Device type identifier (required, e.g., "iPhone 15")-r, --runtime <runtime>- Runtime identifier (optional, uses newest compatible if omitted)
Examples:
apple simulator create "My iPhone 16" --device-type "iPhone 16"
apple simulator create "Test Device" --device-type "iPhone 15 Pro" --runtime "iOS 17.0"Boots a simulator.
Arguments:
<target>- Simulator UDID or name
Options:
--wait- Wait until simulator is fully booted--timeout <seconds>- Timeout for wait (default: 120)
Examples:
apple simulator boot "My iPhone 16"
apple simulator boot --wait --timeout 180 ABCD1234-1234-1234-1234-123456789ABCShuts down running simulators.
Arguments:
<target>- Simulator UDID, name, "booted", or "all"
Examples:
apple simulator shutdown "My iPhone 16"
apple simulator shutdown booted
apple simulator shutdown allErases simulator content and settings (factory reset).
Arguments:
<target>- Simulator UDID, name, "booted", or "all"
Examples:
apple simulator erase "My iPhone 16"
apple simulator erase allPermanently deletes simulators.
Arguments:
<target>- Simulator UDID, name, "unavailable", or "all"
Examples:
apple simulator delete "Old Test Device"
apple simulator delete unavailableCaptures a screenshot from a running simulator.
Arguments:
<target>- Simulator UDID or name
Options:
-o, --output <path>- Output file or directory path
Examples:
apple simulator screenshot "My iPhone 16"
apple simulator screenshot --output ~/Desktop/screenshot.png "My iPhone 16"Installs an app (.app bundle) on a simulator.
Arguments:
<target>- Simulator UDID or name<app-path>- Path to .app bundle
Examples:
apple simulator app install "My iPhone 16" ~/MyApp.app
apple simulator app install booted /path/to/MyApp.appUninstalls an app from a simulator.
Arguments:
<target>- Simulator UDID or name<bundle-id>- Bundle identifier of the app
Examples:
apple simulator app uninstall "My iPhone 16" com.mycompany.myapp
apple simulator app uninstall booted com.example.appLaunches an installed app on a simulator.
Arguments:
<target>- Simulator UDID or name<bundle-id>- Bundle identifier of the app
Examples:
apple simulator app launch "My iPhone 16" com.mycompany.myapp
apple simulator app launch booted com.example.appTerminates a running app on a simulator.
Arguments:
<target>- Simulator UDID or name<bundle-id>- Bundle identifier of the app
Examples:
apple simulator app terminate "My iPhone 16" com.mycompany.myapp
apple simulator app terminate booted com.example.appLists all installed apps on a simulator.
Arguments:
<target>- Simulator UDID or name
Options:
--format <format>- Output format: table (default), json, or verbose--verbose- Show additional details
Examples:
apple simulator app list "My iPhone 16"
apple simulator app list booted --format jsonOpens the Simulator.app, optionally to a specific simulator.
Arguments:
[udid]- Optional simulator UDID (if omitted, just opens Simulator.app)
Examples:
apple simulator open
apple simulator open ABCD1234-1234-1234-1234-123456789ABCLists available simulator device types and runtimes.
Options:
--format <format>- Output format: table (default), json, or verbose--verbose- Show additional details
Examples:
apple simulator device-types
apple simulator device-types --format jsonOpens a URL on a simulator (for deep linking and URL scheme testing).
Arguments:
<target>- Simulator UDID or name<url>- URL to open
Examples:
apple simulator open-url "My iPhone 16" "myapp://profile/123"
apple simulator open-url booted "https://example.com"Retrieves and displays logs from a simulator.
Arguments:
<target>- Simulator UDID or name
Options:
--predicate <predicate>- NSPredicate filter for logs (e.g., "eventMessage contains 'error'")--start <timestamp>- Start timestamp for logs (e.g., "2025-10-30 10:00:00")--format <format>- Output format: table (default), json, or verbose--verbose- Show additional details
Examples:
apple simulator logs "My iPhone 16"
apple simulator logs booted --predicate "eventMessage contains 'error'"
apple simulator logs booted --start "2025-10-30 10:00:00"
apple simulator logs "My iPhone 16" --format jsonLists connected iOS, watchOS, tvOS, and visionOS devices.
Options:
-t, --timeout <seconds>- Timeout to search for network devices (default: 5)-d, --devices-only- Show devices only, exclude simulators--format <format>- Output format: table (default), json, or verbose--verbose- Show additional details
Examples:
apple device list
apple device list --devices-only --format json
apple device list --timeout 10 --verboseCreates a new keychain file.
Options:
-k, --keychain <keychain>- Keychain path (required)-p, --password <password>- Keychain password (required)
Examples:
apple keychain create --keychain build.keychain --password buildpass
apple keychain create --keychain ~/Library/Keychains/ci-temp.keychain-db --password temp1234Deletes a keychain file.
Options:
-k, --keychain <keychain>- Keychain path (required)
Examples:
apple keychain delete --keychain ~/Library/Keychains/ci-temp.keychain-dbUnlocks a keychain for automated access.
Options:
-k, --keychain <keychain>- Keychain path (default: login.keychain-db)-p, --password <password>- Keychain password (required)
Examples:
apple keychain unlock --keychain build.keychain --password buildpass
apple keychain unlock --keychain ~/Library/Keychains/login.keychain-db --password mypassImports a PKCS#12 certificate (.p12/.pfx) into a keychain.
Arguments:
<certificate_file>- Path to certificate file
Options:
-k, --keychain <keychain>- Keychain path (default: login.keychain-db)-p, --passphrase <passphrase>- Certificate passphrase--allow-any-app-read- Allow any app to read the certificate
Examples:
apple keychain import ios-cert.p12 --keychain build.keychain
apple keychain import ~/certificates/distribution.pfx --passphrase certpass --allow-any-app-readSets the default keychain for the current user.
Options:
-k, --keychain <keychain>- Keychain path (required)
Examples:
apple keychain default --keychain ~/Library/Keychains/login.keychain-db
apple keychain default --keychain build.keychainLists App Store Connect provisioning profiles.
Options:
-t, --type <type>- Filter by profile type (e.g., IOS_APP_DEVELOPMENT, IOS_APP_STORE)-a, --active- Show only active profiles-d, --download- Download and install profiles locally--download-path <directory>- Override default download directory-b, --bundle-id <bundle-id>- Filter by bundle identifier--format <format>- Output format: table (default), json, or verbose--verbose- Show additional details- App Store Connect API options (see App Store Connect Authentication)
Examples:
apple provisioning list --active
apple provisioning list --download --type IOS_APP_DEVELOPMENT
apple provisioning list --bundle-id com.myapp.* --format jsonLists locally installed provisioning profiles.
Options:
--format <format>- Output format: table (default), json, or verbose--verbose- Show additional details
Examples:
apple provisioning installed
apple provisioning installed --format json --verboseParses and displays information from a .mobileprovision file.
Arguments:
<file>- Path to .mobileprovision file
Options:
--format <format>- Output format: table (default), json, or verbose--verbose- Show additional details
Examples:
apple provisioning parse MyApp_Development.mobileprovision
apple provisioning parse ~/Downloads/AppStore.mobileprovision --format jsonCreates a new provisioning profile via App Store Connect.
Options:
--name <name>- Name for the new provisioning profile (required)--type <type>- Profile type (required): IOS_APP_DEVELOPMENT, IOS_APP_STORE, IOS_APP_ADHOC, etc.--bundle-id <id>- Bundle identifier ID from App Store Connect (required)--certificates <ids>- Certificate ID(s), comma-separated (required)--devices <ids>- Device ID(s), comma-separated (optional, for specific devices)--all-devices- Include all enabled devices for the platform (alternative to --devices)--download- Download the profile after creation- App Store Connect API options (see App Store Connect Authentication)
Examples:
# Create dev profile with specific devices
apple provisioning create \
--name "My Dev Profile" \
--type IOS_APP_DEVELOPMENT \
--bundle-id BNDL123 \
--certificates CERT456 \
--devices DEV789,DEV012
# Create dev profile with ALL enabled devices
apple provisioning create \
--name "My Dev Profile" \
--type IOS_APP_DEVELOPMENT \
--bundle-id BNDL123 \
--certificates CERT456 \
--all-devices
# Create App Store profile (no devices needed)
apple provisioning create \
--name "App Store Profile" \
--type IOS_APP_STORE \
--bundle-id BNDL123 \
--certificates CERT789 \
--downloadDeletes a provisioning profile from App Store Connect.
Arguments:
<id>- Provisioning profile ID
Options:
- App Store Connect API options (see App Store Connect Authentication)
Examples:
apple provisioning delete PROF123456Lists App Store Connect bundle identifiers (app IDs).
Options:
--platform <platform>- Filter by platform (IOS, MAC_OS)--id <id>- Filter by ID--identifier <identifier>- Filter by identifier pattern--seed-id <seedid>- Filter by seed ID--format <format>- Output format: table (default), json, or verbose--verbose- Show additional details- App Store Connect API options (see App Store Connect Authentication)
Examples:
apple bundleids list
apple bundleids list --platform IOS --format json
apple bundleids list --identifier com.mycompany.*Creates a new bundle identifier (app ID) in App Store Connect.
Arguments:
<name>- Display name for the bundle ID<identifier>- Bundle identifier (e.g., com.mycompany.myapp)<platform>- Platform (IOS or MAC_OS)
Options:
- App Store Connect API options (see App Store Connect Authentication)
Examples:
apple bundleids create "My App" com.mycompany.myapp IOS
apple bundleids create "My Mac App" com.mycompany.macapp MAC_OSUpdates an existing bundle identifier in App Store Connect.
Arguments:
<id>- Bundle identifier ID (from App Store Connect)
Options:
--name <name>- New display name (required)- App Store Connect API options (see App Store Connect Authentication)
Examples:
apple bundleids update BUNDLEID123 --name "Updated App Name"Deletes a bundle identifier from App Store Connect.
Arguments:
<id>- Bundle identifier ID (from App Store Connect)
Options:
- App Store Connect API options (see App Store Connect Authentication)
Examples:
apple bundleids delete BUNDLEID123Creates a new signing certificate via App Store Connect.
Options:
-t, --type <type>- Certificate type: DEVELOPMENT, DISTRIBUTION, etc. (default: DEVELOPMENT)-c, --common-name <name>- Common name for CSR (optional)--passphrase <passphrase>- Passphrase for output .pfx file (optional)-o, --output <path>- Output path (file or directory)- App Store Connect API options (see App Store Connect Authentication)
Examples:
apple certificate create --type DISTRIBUTION
apple certificate create --output ~/certificates/ --type DEVELOPMENT
apple certificate create --type IOS_DISTRIBUTION --passphrase mypassLists signing certificates from App Store Connect.
Options:
-t, --type <type>- Filter by certificate type (IOS_DEVELOPMENT, IOS_DISTRIBUTION, etc.)--format <format>- Output format: table (default), json, or verbose--verbose- Show additional details- App Store Connect API options (see App Store Connect Authentication)
Examples:
apple certificate list
apple certificate list --type IOS_DISTRIBUTION --format jsonRevokes a certificate in App Store Connect.
Arguments:
<id>- Certificate ID (from App Store Connect)
Options:
- App Store Connect API options (see App Store Connect Authentication)
Examples:
apple certificate revoke CERT123456App Store Connect commands for managing devices, bundle IDs, certificates, and provisioning profiles.
Lists registered devices from App Store Connect.
Options:
--name <name>- Filter by device name--platform <platform>- Filter by platform (IOS, MAC_OS)--status <status>- Filter by status (ENABLED, DISABLED)--udid <udid>- Filter by UDID--format <format>- Output format: table (default), json, or verbose--verbose- Show additional details- App Store Connect API options (see App Store Connect Authentication)
Examples:
apple devices list
apple devices list --platform IOS --status ENABLED
apple devices list --format jsonRegisters a new device with App Store Connect.
Arguments:
<name>- Device name<udid>- Device UDID<platform>- Platform (IOS or MAC_OS)
Options:
--format <format>- Output format: table (default), json, or verbose- App Store Connect API options (see App Store Connect Authentication)
Examples:
apple devices register "My iPhone" 00008030-001234567890ABCD IOS
apple devices register "My Mac" ABCD1234-5678-90AB-CDEF-1234567890AB MAC_OSUpdates a registered device in App Store Connect.
Arguments:
<id>- Device ID (from App Store Connect)
Options:
-n, --name <name>- New device name-s, --status <status>- New status (ENABLED or DISABLED)--format <format>- Output format: table (default), json, or verbose- App Store Connect API options (see App Store Connect Authentication)
Examples:
apple devices update DEV123456 --name "Updated iPhone Name"
apple devices update DEV123456 --status DISABLEDLists all installed Xcode versions.
Options:
--format <format>- Output format: table (default), json, or verbose--verbose- Show additional details
Examples:
apple xcode list
apple xcode list --format jsonFinds the currently selected Xcode installation.
Options:
--best- Show best available (highest version if none selected)--format <format>- Output format: table (default), json, or verbose
Examples:
apple xcode locate
apple xcode locate --best --format jsonReads and displays Info.plist metadata from an app bundle.
Arguments:
<app-path>- Path to .app bundle
Options:
--format <format>- Output format: table (default), json, or verbose--verbose- Show additional details
Examples:
apple app-info ~/MyApp.app
apple app-info /path/to/MyApp.app --format jsonUploads an app to App Store Connect / TestFlight.
Arguments:
<app-path>- Path to .app or .ipa file
Options:
-t, --type <type>- App type (required): ios, macos, watchos, tvos, visionos--format <format>- Output format: table (default), json, or verbose- App Store Connect API options (see App Store Connect Authentication)
Examples:
apple upload ~/MyApp.ipa --type ios
apple upload ~/MyMacApp.app --type macosValidates an app before uploading to App Store Connect.
Arguments:
<app-path>- Path to .app or .ipa file
Options:
-t, --type <type>- App type (required): ios, macos, watchos, tvos, visionos--format <format>- Output format: table (default), json, or verbose- App Store Connect API options (see App Store Connect Authentication)
Examples:
apple validate ~/MyApp.ipa --type ios
apple validate ~/MyMacApp.app --type macos --format jsonStreamlined commands for continuous integration environments.
Sets up CI environment with certificates, keychain, and provisioning profiles.
Options:
--certificate <value>- Base64 certificate data, file path, or environment variable name--certificate-passphrase <passphrase>- Certificate passphrase--keychain <keychain>- Keychain name (default: "build")--keychain-password <password>- Keychain password (default: same as keychain name)--keychain-allow-any-app-read- Allow any app read permission (default: true)--keychain-disallow-any-app-read- Disallow any app read permission--bundle-identifier <id>- Bundle identifier(s) to match profiles for (can specify multiple)--profile-type <type>- Provisioning profile type(s) to download (can specify multiple)--profile-path <directory>- Override default profile install directory--install-api-private-key- Install App Store Connect private key to disk--api-private-key-dir <directory>- Directory for API private key (default: ~/private_keys/)- App Store Connect API options (see App Store Connect Authentication)
Examples:
# Basic certificate import
apple ci provision --certificate $IOS_CERT_BASE64 --certificate-passphrase $CERT_PASS
# Full CI provisioning with profiles
apple ci provision \
--certificate $IOS_CERT_BASE64 \
--bundle-identifier com.myapp.id \
--api-key-id $ASC_KEY_ID \
--api-issuer-id $ASC_ISSUER_ID \
--api-private-key $ASC_PRIVATE_KEY
# Multiple bundle IDs and profile types
apple ci provision \
--certificate cert.p12 \
--bundle-identifier com.myapp.main \
--bundle-identifier com.myapp.widget \
--profile-type IOS_APP_DEVELOPMENT \
--profile-type IOS_APP_ADHOCCleans up CI environment (removes temporary keychain).
Options:
--keychain <keychain>- Keychain to delete (default: "build")
Examples:
apple ci deprovision
apple ci deprovision --keychain ci-build.keychainConverts certificates/keys to base64 for secure CI storage.
Options:
--from-certificate <file>- Certificate file (.p12/.pfx)--from-private-key <file>- Private key file (.p8)--from-keystore <file>- Keystore file (.keystore)--from-pepk <file>- Google PEPK key file (.pepk)--from-text-file <file>- Text file--from-binary-file <file>- Binary file--output-file <file>- Save output to file
Examples:
apple ci secret --from-certificate ios-distribution.p12
apple ci secret --from-private-key AuthKey_ABC123.p8 --output-file key.txt
apple ci secret --from-certificate cert.pfx > secret.txtDecodes base64 data to file (from environment variable or string).
Options:
--base64 <value>- Base64 string or environment variable name (required)--output-file <file>- Output file path (required)
Examples:
apple ci base64-to-file --base64 $IOS_CERT_BASE64 --output-file cert.p12
apple ci base64-to-file --base64 "aGVsbG8=" --output-file decoded.txtWrites environment variable value directly to file.
Options:
-e, --env-var <name>- Environment variable name (required)--decode-base64- Decode base64 before writing--output-file <file>- Output file path (required)
Examples:
apple ci env-to-file --env-var APP_STORE_CONNECT_API_KEY --output-file AuthKey.p8
apple ci env-to-file --env-var CERT_BASE64 --decode-base64 --output-file cert.p12Commands that interact with App Store Connect require API credentials:
Options:
--api-key-id <key_id>- App Store Connect Key ID (or setAPP_STORE_CONNECT_KEY_IDenv var)--api-issuer-id <issuer_id>- App Store Connect Issuer ID (or setAPP_STORE_CONNECT_ISSUER_IDenv var)--api-private-key <key>- Private key (.p8) file path, contents, or env var name (or setAPP_STORE_CONNECT_PRIVATE_KEYenv var)
Example:
export APP_STORE_CONNECT_KEY_ID="ABC123DEF4"
export APP_STORE_CONNECT_ISSUER_ID="12345678-1234-1234-1234-123456789012"
export APP_STORE_CONNECT_PRIVATE_KEY="$(cat AuthKey_ABC123DEF4.p8)"
apple provisioning list --active
apple bundleids list
apple certificate createMost commands support multiple output formats via the --format option:
- table (default) - Human-readable table format
- json - JSON output for scripting and automation
- verbose - Additional
--verboseflag shows extended information
Example:
apple simulator list --format json
apple device list --verbose
apple provisioning list --format json --verbose- Xcode: Locate installations and get version information
- XCRun: Find command line tools and manage AuthKeys
- XCDevice: List connected devices with real-time monitoring
- SimCtl: Complete simulator management and app lifecycle control
- ALTool: Upload and validate apps to App Store Connect
- AppStoreConnectClient: Complete API wrapper for provisioning profiles, certificates, bundle IDs, and device registration with filtering and automatic installation support.
- Keychain: Create, manage, and import certificates to keychains
- ProvisioningProfiles: Parse and install .mobileprovision files
- AppBundleReader: Extract metadata from .app bundles
- CertificateRequestGenerator: Generate CSRs and RSA key pairs
- macOS: Required for Xcode-dependent features
- .NET 8.0+: Required runtime
- Xcode: Required for simulator/device management
- App Store Connect API Key: Required for ASC integration
Contributions welcome! Submit issues, feature requests, or pull requests.
The test suite includes tests for App Store Connect API integration. To run these tests:
-
Copy
.env.exampleto.envin the project root:cp .env.example .env
-
Edit
.envand add your App Store Connect API credentials:APP_STORE_CONNECT_KEY_ID=your_key_id_here APP_STORE_CONNECT_ISSUER_ID=your_issuer_id_here APP_STORE_CONNECT_PRIVATE_KEY=your_base64_encoded_private_key_here -
Run the tests:
dotnet test
Tests that require credentials will be automatically skipped if the .env file is not present or credentials are not configured. See AppleDev.Test/README.md for more details.
See the LICENSE file for license information.
