Add App Store release pipeline, adopt ISC license, add unit test target
- Scripts/release.sh archives and uploads the macOS app via the appstore-publish skill's API-driven pipeline (xcodebuild + App Store Connect key, no fastlane); ExportOptions-macOS.plist adapts the skill's iOS-centric export options for generic/platform=macOS. Scripts/metadata/ drafts the listing from the README. Canonical asc-*.swift scripts are referenced in place from indie-skills, matching Weight/HIIT. - Replace the all-rights-reserved LICENSE.md with the portfolio-standard ISC license (REVIEW2 D2b), preserving the existing copyright year/holder. - Add an IceGlassTests target (project.yml) with a real smoke test suite covering GameState's progression-rank ordering and polling-interval mapping — logic MainService relies on to reject stale API regressions.
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
# App Store metadata
|
||||
|
||||
Local source-of-truth for the **IceGlass (macOS)** App Store listing. The
|
||||
appstore-publish skill's `asc-metadata.swift` (invoked in place from
|
||||
`../indie-skills`) reads this folder and pushes it to App Store Connect via
|
||||
the API; only files that are present get pushed. Then `asc-submit.swift`
|
||||
attaches the build and submits.
|
||||
|
||||
```
|
||||
set -a; source .env.release; set +a; swift ../indie-skills/skills/appstore-publish/scripts/asc-metadata.swift --bundle dev.rzen.indie.IceGlass --version X.Y.Z --dry-run # preview
|
||||
set -a; source .env.release; set +a; swift ../indie-skills/skills/appstore-publish/scripts/asc-metadata.swift --bundle dev.rzen.indie.IceGlass --version X.Y.Z # push
|
||||
set -a; source .env.release; set +a; swift ../indie-skills/skills/appstore-publish/scripts/asc-submit.swift --bundle dev.rzen.indie.IceGlass --version X.Y.Z --submit # submit
|
||||
```
|
||||
|
||||
**Note:** this metadata set is for the **macOS** app record only. IceGlass
|
||||
also ships an iOS companion (`IceGlass-iOS`, bundle ID
|
||||
`dev.rzen.indie.IceGlass.iOS`) that isn't wired into the release pipeline
|
||||
yet — when it's ready to publish, give it its own App Store Connect app
|
||||
record and its own sibling metadata directory (e.g. `Scripts/metadata-ios/`),
|
||||
since `asc-metadata.swift` currently queries the `IOS` platform filter when
|
||||
looking up versions, not `MAC_OS`.
|
||||
|
||||
## Layout & character limits
|
||||
|
||||
| File | Field | Limit | API resource |
|
||||
|---|---|---|---|
|
||||
| `app/<locale>/name.txt` | App name | 30 | `appInfoLocalizations` |
|
||||
| `app/<locale>/subtitle.txt` | Subtitle | 30 | `appInfoLocalizations` |
|
||||
| `app/<locale>/privacy_url.txt` | Privacy policy URL | — | `appInfoLocalizations` |
|
||||
| `app/categories.json` | Categories | — | `appInfos` |
|
||||
| `version/<locale>/description.txt` | Description | 4000 | `appStoreVersionLocalizations` |
|
||||
| `version/<locale>/keywords.txt` | Keywords (comma-sep) | 100 | `appStoreVersionLocalizations` |
|
||||
| `version/<locale>/promotional_text.txt` | Promotional text | 170 | `appStoreVersionLocalizations` |
|
||||
| `version/<locale>/whats_new.txt` | What's New | 4000 | `appStoreVersionLocalizations` |
|
||||
| `version/<locale>/support_url.txt` | Support URL | — | `appStoreVersionLocalizations` |
|
||||
| `version/review.json` | Review contact / demo / notes | — | `appStoreReviewDetails` |
|
||||
| `screenshots/<locale>/<DISPLAY_TYPE>/*.png` | Screenshots | — | `appScreenshotSets` |
|
||||
|
||||
`name` + `subtitle` are **app-level**; `description` + `keywords` are
|
||||
**version-level**. `whats_new.txt` only applies after the first version —
|
||||
leave it out for 1.0. No `whats_new.txt` or `screenshots/` are checked in
|
||||
yet — screenshots still need to be captured (see the appstore-publish
|
||||
skill's "Step 3 — Screenshots" for the simulator-capture recipe; macOS
|
||||
screenshots are plain `screencapture`/window captures at the App Store's
|
||||
required pixel sizes, not simulator grabs).
|
||||
|
||||
## Screenshot display types (macOS)
|
||||
|
||||
Common types: `APP_DESKTOP` (1280×800 or larger, 16:10). One folder per
|
||||
device class; filenames sort the order. The local set is authoritative —
|
||||
re-running replaces the remote set for any display type you provide.
|
||||
|
||||
## Not handled here (separate resource families)
|
||||
|
||||
Age rating (`ageRatingDeclarations`), pricing/availability
|
||||
(`appPriceSchedules` / `appAvailabilities`), and App Privacy labels
|
||||
(`appDataUsages`). `asc-submit.swift --submit` (see the appstore-publish
|
||||
skill) reports any of these that block the submission.
|
||||
Reference in New Issue
Block a user