mirror of
https://github.com/rudrankriyam/App-Store-Connect-CLI.git
synced 2026-04-25 15:45:48 +03:00
[GH-ISSUE #565] Profiles: add local install/list/cleanup commands for provisioning profiles #156
Labels
No labels
bug
bug
documentation
enhancement
pull-request
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
starred/App-Store-Connect-CLI#156
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @rudrankriyam on GitHub (Feb 16, 2026).
Original GitHub issue: https://github.com/rudrankriyam/App-Store-Connect-CLI/issues/565
Summary
Add first-class commands for local provisioning profile management:
.mobileprovisionfiles into the standard Xcode locationThis is explicitly about local disk state, not App Store Connect API resources.
Why this matters
Provisioning profiles are frequently the hidden source of build/signing failures:
Current state (verified)
asc profiles download --id "PROFILE_ID" --output "./profile.mobileprovision"exists.asc signing fetchwrites.mobileprovisionfiles into an output directory.asc profiles installor any command that targets:~/Library/MobileDevice/Provisioning Profiles/Proposed UX
Introduce a
localsubcommand group to avoid ambiguity with API-backedprofiles list/get/...:asc profiles local installasc profiles local listasc profiles local cleanInstall
List
Clean
Flags (proposal)
Shared:
--output json|table|markdown(default json)--prettyinstall:--pathlocal.mobileprovisionpath (optional if--idis used)--idprofile ID to download then install (optional if--pathis used)--install-diroverride install directory (default:~/Library/MobileDevice/Provisioning Profiles)--forceoverwrite if the target UUID already exists (default false)list:--install-dir(same default)--bundle-idfilter (best-effort; derived from entitlements)--team-idfilter--expiredshow only expiredclean:--install-dir--expired(phase 1)--dry-runshow deletions without mutating disk--confirmrequired for deletionBehavior requirements
<UUID>.mobileprovision.--force--install-diris not provided and OS is not macOS, return a clear, deterministic error--install-diris provided, allow operation (useful for CI/tests), but document that the default path is macOS-specificParsing requirements
To support list/filtering and correct install naming, parse
.mobileprovision:UUID,Name,TeamIdentifier,ExpirationDate,CreationDateEntitlementsImplementation should not require Keychain UI.
Output model
Install
Return a structured summary:
uuid,name,teamId,expiresAtsource(path or profile ID)installedPathaction:installed,replaced,already_present,skippedList
Return an array of installed profiles with the parsed metadata above + the on-disk path.
Clean
Return:
deleted[](paths + uuid/name)skipped[](reason)Detailed implementation plan (TDD-first)
profiles localsubcommand group underinternal/cli/profiles/.howett.net/plist(already in repo) for plist decode.--forcegating)--dry-runprints plan--confirmrequired to delete<UUID>.mobileprovisioninto--install-dirtemp dir--confirmand respects--dry-runAcceptance criteria
asc profiles local install|list|clean --helpexists and is self-documenting.--force).--confirm.make testpasses with new cmdtest coverage.