Repository navigation
feat: App Store Connect API 4.5 / 4.5.1 (SDK 4.5.1) - #32
Merged
Merged
Conversation
…ix-bug skill Adopt claudebar's business-shaped test naming: names describe what the person, agent or REST client observes, never a method, type or mechanism verb. Add a fix-bug skill (reproduce, find the owning layer, failing `should` test, minimal fix). Fix two misleading examples in tdd-patterns (a test that asserted on its own mock; MockAPIProvider → StubAPIClient). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…K to 4.5.1 App Store Connect API 4.5 added ALL and TWELVE_PLUS to koreaAgeRatingOverride. Our domain enum lacked them, so the mapper's init(rawValue:) turned them into nil: the CLI and REST showed no Korea override and rejected the new values on update. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
App Store Connect API 4.5 added `multiSeatStatus` (ENABLED/DISABLED) and `marketSettings` (APP_STORE/APPLE_SCHOOL/APPLE_BUSINESS) on Subscription. - `asc subscriptions list` (and REST) include both when ASC sends them; omitted when absent. - `asc subscriptions update --multi-seat-status --market-setting` (repeatable) sets them; `create` stays read-only because SubscriptionCreateRequest does not accept them. - New `PATCH /api/v1/subscriptions/:id` route (already advertised by the `update` _link) takes the same keys as the CLI update flags. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s goals and top hotspots One call to App Store Connect's performanceOverviews endpoint (Xcode Organizer overview) now answers "what regressed in the latest version?": regressions and trending-up insights with Apple's summary and impact, each metric's latest value next to Apple's recommended goal, and the top hang, launch and disk-write hotspots with their trend. Optional --device-type narrows it. Also over REST at GET /api/v1/apps/:appId/perf-overview?device-type=, and every app now advertises getPerfOverview in its affordances / _links. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…me Center over REST - asc game-center score-moderations list|block|unblock, blocked-players list, players block|unblock (new GameCenterModerationRepository, SDK adapter with pagination and included-player mapping) - GameCenterDetail/GameCenterLeaderboard migrated to structuredAffordances + Presentable; add listBlockedPlayers / listScoreModerations affordances - GameCenterController serves detail, leaderboards, delete, score moderation and player routes; _gameCenterRoutes registered in RESTPathResolver - docs/features/game-center updated with moderation workflow and REST table Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts: # Sources/Domain/Shared/RESTPathResolver.swift # Tests/ASCCommandTests/Commands/Web/RESTRoutesTests.swift
The Game Center detail's REST _links pointed at
/game-center/details/{id}/achievements, which no route served. Move
GameCenterAchievement to structuredAffordances (CLI strings unchanged),
add Presentable, and serve GET achievements and DELETE achievement.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ace them App Store Connect API 4.5.1 added the App Asset Library: upload an image once into a per-app library, then place it into slots on localizations. - `asc asset-library get --app-id` shows the app's library. - `asc asset-placement-groups list [--placement-type] [--feature]` flattens the reference data into one row per type + group (+ feature limit) with platform, display class, accepted sizes and maxCount. - `asc asset-images list|upload|delete`: upload reserves, streams the parts from disk and commits with `uploaded: true`; `--wait` polls until processed. Images/placements show state-aware affordances (place only when processed, refresh while processing, delete hidden in review). - `asc asset-placements list|create|delete|reorder` on version localizations; `list --image-id` shows everywhere an image is placed; positions are the 1-based display order within each type + group. - REST: /apps/:id/asset-library, /asset-placement-groups, /asset-library/:id/images, /asset-images/:id(/placements), /version-localizations/:id/placements(/reorder), /asset-placements/:id. - RESTPathResolver accepts several parent routes per command; App and version localizations link to the new resources. SDK workarounds: placements, images and reference data decode into our own DTOs (SDK expects placement `mediaType` in relationships; image/video states and ref-data enums would throw on new values). Placement create and ordering bodies are hand-built. Upload parts go through a new shared UploadOperationsExecutor (extracted from the IAP review uploader, which now uses it). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e and archive - `asc asset-videos list|upload|update|delete`: upload takes `--preview-frame-time-code` and streams parts from disk; `--wait` polls until processed. Videos show preview frame state/URL and the processed video URL; `place` suggests APP_PREVIEW. - `asc asset-images update` / `asset-videos update` rename (`--reference-name`) or archive (`--archived true`); approved assets offer an `archive` affordance. - `asc asset-placements list|create|reorder --treatment-localization-id` for product page optimization treatments; `list|create --video-id`. Treatment localizations link to their placements. - REST: /asset-library/:id/videos (GET/POST, 500 MB upload ceiling), PATCH/DELETE /asset-videos/:id, GET /asset-videos/:id/placements, PATCH /asset-images/:id, /experiment-treatment-localizations/:id/placements (+ /reorder). - RESTPathResolver routes accept a `resourceParam`, so `update --image-id X --library-id L` addresses /asset-images/X rather than the library's collection. `update` takes `--library-id` because App Store Connect's PATCH response doesn't name the library. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- docs/features/asset-library/README.md: quick start, upload → wait → place → reorder, treatments, migrating from screenshot sets, REST table, gotchas (placements before assets, fixed category, per-feature limits, editable parent, IPHONE_DUO). - `screenshot-sets`, `screenshots`, `app-preview-sets` and `app-previews` --help now say Apple deprecated them (behaviour unchanged); their docs point to the asset library. - CHANGELOG, README "What It Covers" row, regenerated docs/commands.md and docs/README.md. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts: # CHANGELOG.md # Sources/Domain/Shared/RESTPathResolver.swift # Tests/ASCCommandTests/Commands/Apps/AppsListTests.swift # Tests/ASCCommandTests/Commands/Apps/AppsUpdateTests.swift # Tests/ASCCommandTests/Commands/Web/RESTRoutesTests.swift # Tests/ASCCommandTests/OutputFormatterTests.swift # Tests/DomainTests/TestHelpers/MockRepositoryFactory.swift # docs/commands.md
App Store Connect API 4.5 added gracRatingClassificationNumber to age rating declarations. Read it, and accept it on update from the CLI (--grac-rating-classification-number) and REST. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Important Review skippedToo many files! This PR contains 126 files, which is 26 over the limit of 100. To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch. Upgrade to a paid plan to raise the limit. This review couldn't start because sufficient usage credits or metered capacity aren't available. Add credits or update usage-based reviews in the billing tab, then retry. ⚙️ Run configuration
⛔ Files ignored due to path filters (1)
📒 Files selected for processing (126)
You can disable this status message by setting the
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
This was referenced Oct 10, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
Apple shipped App Store Connect API 4.5 and 4.5.1, and appstoreconnect-swift-sdk 4.5.1 now covers them. 4.5.1 also deprecates app screenshot sets, screenshots, preview sets and previews in favour of the new App Asset Library, which
asc screenshotsandasc app-previewsrely on.What changed
ALL/TWELVE_PLUSare shown and settable. Before, they came back as no override.gracRatingClassificationNumberis shown and settable.multiSeatStatusandmarketSettingsinlist; set withupdate --multi-seat-status / --market-setting. Adds the missingPATCH /api/v1/subscriptions/:id.asc perf-overview getshows regressions, Xcode metrics against Apple's goals, and the top hang/launch/disk-write hotspots.score-moderations list|block|unblock,blocked-players list,players block|unblock. Game Center detail, leaderboards and achievements are now also on REST.asset-library,asset-placement-groups,asset-images,asset-videos(list / upload--wait/ update / delete) andasset-placements(list / create / delete / reorder) on version and experiment-treatment localizations, includingIPHONE_DUO.--help.RESTPathResolversupports several parents per command and an explicit resource param.UploadOperationsExecutor, now also used by the IAP review upload.should <outcome> [when <situation>], and there's a newfix-bugskill.How it was verified
Sources/.swift test: 651 + 1387 + 740 tests pass.make docs && make check-docs: 0 problems.GET /v1/apps/{id}/performanceOverviewsreturns anXcodeOverviewdocument (application/vnd.apple.xcode-overview+json). The redacted empty response is a test fixture.Not yet verified against a live account (follow-up PRs):
Checklist
swift testpassesasc web-server## [Unreleased]inCHANGELOG.mdmake docs && make check-docspasses.p8, issuer ID or Apple ID session in the diff, output or screenshots🤖 Generated with Claude Code