Ariver
2026-06-28 b19bcd64878518b8617d0e1910f4c6a9f00316a4
Document App Store pricing gate for 8.1.6
2 files modified
5 files added
134 ■■■■■ changed files
src/Release/AppStore-8.1.6-20260628.0230/APP_REVIEW_NOTES.md 17 ●●●● patch | view | raw | blame | history
src/Release/AppStore-8.1.6-20260628.0230/APP_STORE_RELEASE_CHECKLIST.md 19 ●●●●● patch | view | raw | blame | history
src/Release/AppStore-8.1.6-20260628.0230/PRO_PRICING_REVIEW_RISK_CHECKLIST.md 98 ●●●●● patch | view | raw | blame | history
src/Release/AppStore-8.1.6-20260628.0230/Screenshots/AppStore/mac-01-colorful-tips-2880x1800.png patch | view | raw | blame | history
src/Release/AppStore-8.1.6-20260628.0230/Screenshots/AppStore/mac-02-dark-tips-2880x1800.png patch | view | raw | blame | history
src/Release/AppStore-8.1.6-20260628.0230/Screenshots/IAPReview/iap-review-pro-unlock-about-2880x1800.png patch | view | raw | blame | history
src/Release/AppStore-8.1.6-20260628.0230/Screenshots/IAPReview/iap-review-pro-unlock-about-actual-2092x1436.png patch | view | raw | blame | history
src/Release/AppStore-8.1.6-20260628.0230/APP_REVIEW_NOTES.md
@@ -6,6 +6,9 @@
本版本重点:
- 收费模式调整:TagLauncher 从原先的付费下载 App 调整为免费下载,Pro 为 Apple In-App Purchase 的一次性买断解锁;我们目前不提供订阅制收费。
- 老付费用户权益保护:在首个“免费 + Pro”版本前已经购买 / 拥有 TagLauncher 的用户,会通过 App Store receipt 的 `originalAppVersion` 自动获得终身 Pro,不会被要求再次付费。
- 免费用户仍可使用核心应用启动、标签整理和搜索功能;Pro 仅解锁高级主题、布局导入导出、无限备注和手动应用排序保存。
- Pro 主题免费体验新增倒计时。
- 新增 `taglauncher://show`,可由第三方手势工具唤起 App Grid,不使用私有触控板 API,不新增 Accessibility / Input Monitoring 权限。
- 智能初始化默认标签精简为 12 个。
@@ -19,8 +22,9 @@
4. 打开偏好设置,切换到“标签”页,创建 / 编辑标签。
5. 在 App Grid 标签列表中双击标签,确认会快速打开设置并定位到“标签”页。
6. 在设置“主题”页点击 Pro 主题,确认免费体验倒计时出现。
7. 在设置“快捷键”页查看触控板手势说明,可用 `open taglauncher://show` 验证外部唤起。
8. 在设置“数据”页验证导入 / 导出布局入口。
7. 在设置“关于”页查看 Pro 状态区域,可看到“解锁 Pro”和“恢复购买”入口;Pro 解锁使用商品 `com.taglauncher.pro.lifetime`。
8. 在设置“快捷键”页查看触控板手势说明,可用 `open taglauncher://show` 验证外部唤起。
9. 在设置“数据”页验证导入 / 导出布局入口。
隐私说明:应用数据保存在本机;无账号、无云同步、无分析、无广告、无追踪。
@@ -30,6 +34,9 @@
Highlights in this build:
- Pricing model change: TagLauncher is moving from a paid-upfront app to a free download with an optional one-time Pro unlock through Apple In-App Purchase. We do not offer subscriptions.
- Existing paid users are protected: users who purchased or obtained TagLauncher before the first "Free + Pro" version automatically receive lifetime Pro access using the App Store receipt `originalAppVersion`. They are not asked to pay again.
- Free users can still use the core app launching, tag organization, and search workflow. Pro only unlocks premium themes, layout import/export, unlimited notes, and saved manual app ordering.
- Added a visible countdown for free Pro theme previews.
- Added `taglauncher://show`, allowing third-party gesture tools to open the App Grid without private trackpad APIs or new Accessibility / Input Monitoring permissions.
- Simplified SmartStart default labels to 12 categories.
@@ -43,8 +50,8 @@
4. Open Settings, go to Tags, and create or edit a tag.
5. Double-click a tag in the App Grid tag list and confirm Settings opens directly to the Tags tab.
6. In Settings > Theme, click a Pro theme and confirm the free preview countdown appears.
7. In Settings > Keyboard shortcuts, review the trackpad gesture guidance. `open taglauncher://show` can be used to verify the external activation endpoint.
8. In Settings > Data, verify layout import / export entry points.
7. In Settings > About, review the Pro status area. It includes Unlock Pro and Restore Purchase actions; the Pro unlock uses product `com.taglauncher.pro.lifetime`.
8. In Settings > Keyboard shortcuts, review the trackpad gesture guidance. `open taglauncher://show` can be used to verify the external activation endpoint.
9. In Settings > Data, verify layout import / export entry points.
Privacy: all app data is stored locally. There is no account, no cloud sync, no analytics, no ads, and no tracking.
src/Release/AppStore-8.1.6-20260628.0230/APP_STORE_RELEASE_CHECKLIST.md
@@ -31,11 +31,18 @@
- [x] Upload `Upload/TagLauncher-8.1.6-build20260628.0230.pkg` via Transporter / App Store Connect.
- [x] Transporter delivery completed at `2026-06-28 03:37 CST`; status shown as `APP 可供内部测试`.
- [ ] Complete Apple ID passkey / Touch ID authentication in Safari for `shanghai3168@gmail.com`.
- [ ] Confirm ASC processing is visible on the version page.
- [ ] Select build `8.1.6 (20260628.0230)` on the macOS version page.
- [ ] If Missing Compliance appears, answer `None of the algorithms mentioned above`.
- [x] Complete Apple ID passkey / Touch ID authentication for `shanghai3168@gmail.com`.
- [x] Create ASC IAP `Lifetime Pro Unlock` / `com.taglauncher.pro.lifetime` / Apple ID `6785107181`.
- [x] Configure IAP as non-consumable, Family Sharing enabled, all countries/regions available, US `$6.99`.
- [ ] Set or verify the App download price schedule is Free for the free-download + one-time Pro unlock transition. ASC pricing page currently shows `中国大陆 (CNY)` app price `¥18.00`, so this is a release blocker until corrected or explicitly changed.
- [x] Prepare IAP review screenshot: `Screenshots/IAPReview/iap-review-pro-unlock-about-actual-2092x1436.png`.
- [ ] Upload IAP review screenshot in ASC `审核信息 > 截屏` and save until IAP status is no longer `元数据丢失`.
- [x] Confirm ASC processing is visible on the version page.
- [x] Select build `8.1.6 (20260628.0230)` on the macOS version page. ASC displays `8.1.6 (20260628.230)`.
- [ ] Attach IAP `Lifetime Pro Unlock` to the 8.1.6 version page.
- [x] If Missing Compliance appears, answer `None of the algorithms mentioned above`. Current version page no longer shows the missing export compliance warning after build selection.
- [ ] Confirm App Information subtitle does not use Apple comparison terms.
- [ ] Fill What's New from `APP_STORE_CONNECT_METADATA.md`.
- [ ] Use `APP_REVIEW_NOTES.md` for review notes.
- [ ] Replace ASC product-page screenshots with exactly the two prepared `2880x1800` screenshots in `Screenshots/AppStore/`. User stated screenshots were manually adjusted and should not be handled further in this pass.
- [x] Fill What's New from `APP_STORE_CONNECT_METADATA.md`. English (US) `whatsNew` was empty and was filled/saved on ASC; `Add for Review` became enabled afterward.
- [x] Use `APP_REVIEW_NOTES.md` for review notes.
- [ ] Final action: click `Add for Review` / `Submit for Review`; do not stop after only updating metadata.
src/Release/AppStore-8.1.6-20260628.0230/PRO_PRICING_REVIEW_RISK_CHECKLIST.md
New file
@@ -0,0 +1,98 @@
# Pro Pricing Model App Review Risk Checklist - 8.1.6 build 20260628.0230
## Scope
This checklist gates the App Store submission that changes TagLauncher from a paid-upfront macOS app to a free app with an optional one-time Pro unlock.
Submission is **No-Go** until every required item below is `PASS`.
## Apple Rules Referenced
- App Review Guidelines 3.1.1: digital features or full-version unlocks inside the app must use In-App Purchase, and restorable purchases need a restore mechanism.
- App Review Guidelines 2.3: metadata, screenshots, privacy information, and review notes must accurately describe core experience, pricing, new functionality, and product changes.
- App Review Guidelines "Before You Submit": App Review notes should include detailed explanations of non-obvious features and in-app purchases.
Official source: https://developer.apple.com/app-store/review/guidelines/
## Gate A - Product And Pricing Model
| ID | Check | Status | Evidence / Required Evidence |
| --- | --- | --- | --- |
| A1 | Pro is a one-time unlock, not a subscription. | PASS | PRD states "一次性买断"; code uses one StoreKit product id `com.taglauncher.pro.lifetime`. |
| A2 | Pro unlock uses Apple In-App Purchase only; no external license key, website payment, QR code, or other unlock mechanism. | PASS | `ProEntitlement.swift` uses StoreKit `Product.products`, `product.purchase`, and `Transaction.currentEntitlements`. No external payment path found in current grep scope. |
| A3 | The ASC In-App Purchase product exists with product id `com.taglauncher.pro.lifetime`. | PASS | ASC IAP created: `Lifetime Pro Unlock`, Apple ID `6785107181`, product ID `com.taglauncher.pro.lifetime`. |
| A4 | The ASC product type is Non-Consumable / one-time purchase. | PASS | ASC product was created as `非消耗型项目` / Non-Consumable. |
| A5 | The Pro price matches the previous paid app price as intended by PRD. | PASS-WITH-NOTE | ASC IAP pricing configured at US `$6.99`; local StoreKit price shown as `¥48.00`, matching the intended previous paid-app price regionally. |
| A6 | Family Sharing is enabled if available for this non-consumable product. | PASS | ASC shows Family Sharing enabled: family group members can share this IAP. |
| A7 | App price is set/scheduled to Free only in a way that keeps IAP available for review and sale. | FAIL-ASC | ASC pricing page currently shows `中国大陆 (CNY)` app price `¥18.00`; this conflicts with the intended free-download + one-time Pro unlock model. Do not submit until the App price schedule is changed to Free or the pricing model is explicitly changed. |
## Gate B - Existing Paid Users
| ID | Check | Status | Evidence / Required Evidence |
| --- | --- | --- | --- |
| B1 | Existing users who obtained the app before the free + Pro transition automatically receive lifetime Pro. | PASS | `firstFreeProVersion = "8.1.0"` and `AppTransaction.shared` legacy path are implemented. |
| B2 | Primary legacy rule uses `originalAppVersion` earlier than `8.1.0`. | PASS | `isLegacyPaidUser` compares `appTransaction.originalAppVersion` against `firstFreeProVersion`. |
| B3 | `originalPurchaseDate` fallback exists for cases where version parsing is unavailable. | PASS-WITH-NOTE | Code supports fallback, but `legacyFallbackOriginalPurchaseDateISO8601` is currently `nil`; acceptable only if `originalAppVersion` is reliable enough for this release. |
| B4 | Legacy Pro state is cached so offline launch does not immediately lose confirmed Pro status. | PASS | `ProEntitlementCache` persists `accessState`, `originalAppVersion`, and `originalPurchaseDate`. |
| B5 | Review Notes explicitly state old paid users get lifetime Pro and are not asked to pay again. | PASS | `APP_REVIEW_NOTES.md` now states existing paid users automatically receive lifetime Pro via `originalAppVersion`. |
## Gate C - Purchase / Restore Behavior
| ID | Check | Status | Evidence / Required Evidence |
| --- | --- | --- | --- |
| C1 | Purchase flow calls StoreKit purchase. | PASS | `ProEntitlementCenter.purchasePro()` calls `product.purchase()`. |
| C2 | Restore flow exists and calls App Store sync. | PASS | `restorePurchases()` calls `AppStore.sync()`. |
| C3 | Current entitlements are checked after purchase/restore/app start. | PASS | `Transaction.currentEntitlements` is used in `hasPurchasedLifetimePro()`. |
| C4 | Unverified transactions do not unlock Pro. | PASS | Code ignores `.unverified` transactions. |
| C5 | Product unavailable state is user-visible and does not crash. | PASS | Missing product returns `pro.purchase.unavailable`. |
| C6 | Restore-with-no-purchase state is user-visible. | PASS | `restoreNotFound` maps to localized user message. |
| C7 | Sandbox purchase and restore are testable during App Review. | TODO-ASC | IAP product exists and StoreKit product id matches code. Must attach the IAP to the app version before final submit so App Review can test purchase and restore. |
## Gate D - Free App Value And Pro Boundaries
| ID | Check | Status | Evidence / Required Evidence |
| --- | --- | --- | --- |
| D1 | Free users can still use the core app launcher and tag workflow. | PASS | Pro gates are limited to premium themes, import/export, unlimited notes, and persistent manual sorting. |
| D2 | Free users can preview Pro themes without dirtying permanent state. | PASS | Theme preview state is transient and expires; countdown QA passed. |
| D3 | Free preview clearly shows remaining time and restores the real available theme on expiry. | PASS | `pro_theme_preview_countdown_qa.sh` passed. |
| D4 | Free users are not misled into thinking Pro-only saved state has been permanently saved. | PASS | Sorting preview toast and feature gates are wired by `pro_feature_gate_qa.sh`. |
| D5 | Pro prompts appear only when the user actively triggers Pro functionality. | PASS | Static gate QA passed; no always-on paywall detected in checked paths. |
## Gate E - Metadata / Review Notes / Screenshots
| ID | Check | Status | Evidence / Required Evidence |
| --- | --- | --- | --- |
| E1 | What’s New accurately describes user-visible Pro changes without over-selling monetization. | PASS | English (US) `whatsNew` was empty on ASC and was filled/saved with user-visible 8.1.6 changes; no external purchase path is mentioned. |
| E2 | Review Notes include a dedicated pricing model change explanation. | PASS | `APP_REVIEW_NOTES.md` now describes paid-upfront to free + Pro. |
| E3 | Review Notes explain Pro is one-time non-consumable IAP, not a subscription. | PASS | `APP_REVIEW_NOTES.md` says Pro is a one-time Apple In-App Purchase and not a subscription. |
| E4 | Review Notes explain old paid users automatically get lifetime Pro. | PASS | `APP_REVIEW_NOTES.md` documents the `originalAppVersion` legacy unlock path. |
| E5 | Review Notes explain free users keep core functionality. | PASS | `APP_REVIEW_NOTES.md` lists free core launching, tagging, and search workflow. |
| E6 | Screenshots/metadata do not imply every Pro feature is free. | PASS-WITH-USER-OVERRIDE | User manually adjusted ASC screenshots and instructed Codex not to handle screenshots further in this pass. Current metadata text separates Free core functionality from Pro-only features. |
| E7 | App description/subtitle does not use risky Apple comparison terms. | PASS | Release metadata already bans Launchpad/Spotlight comparison terms. |
| E8 | If Pro/IAP appears in screenshots or description, the additional purchase requirement is clear. | PASS | App description keeps core app value separate; review notes explicitly explain optional one-time Pro unlock and old paid-user lifetime Pro protection. |
| E9 | ASC screenshots use accepted macOS screenshot dimensions. | PASS-WITH-USER-OVERRIDE | User manually adjusted ASC screenshots and instructed Codex not to handle screenshots further in this pass. After English What's New was filled, ASC enabled `添加以供审核`, indicating screenshot metadata is no longer blocking version submission. |
| E10 | IAP review screenshot clearly shows the Pro unlock entry, price, restore, and unlocked benefits. | PASS-WITH-NOTE | IAP review screenshot was uploaded manually by user. Codex previously prepared stronger Pro-unlock screenshots under `Screenshots/IAPReview/`; user chose to manage screenshots manually. Final submission dialog should still be checked for IAP inclusion. |
## Gate F - Local QA Evidence
| ID | Check | Status | Evidence / Required Evidence |
| --- | --- | --- | --- |
| F1 | Pro feature gate static QA passed. | PASS | `bash Scripts/pro_feature_gate_qa.sh` passed. |
| F2 | Pro localization QA passed for all 29 languages. | PASS | `bash Scripts/pro_localization_qa.sh` passed: 29 languages, 46 keys. |
| F3 | Pro theme preview countdown QA passed. | PASS | `bash Scripts/pro_theme_preview_countdown_qa.sh` passed. |
| F4 | macOS 14 build metadata QA passed. | PASS | Recorded in release checklist. |
| F5 | Signed PKG upload package verified. | PASS | Recorded in release checklist. |
## Current Go / No-Go
**NO-GO**
Reasons:
1. Local code, package, Pro gates, localization, and countdown QA passed.
2. ASC build is selected on the 8.1.6 version page.
3. English (US) What's New was filled and saved; `Add for Review` became enabled.
4. User manually handled screenshots and instructed Codex not to block on screenshot replacement in this pass.
5. Release-blocking pricing mismatch remains: ASC still shows the app itself as paid in China (`¥18.00`), while this submission is meant to transition to a free app with optional one-time Pro unlock.
Before the final external side-effect, fix or explicitly resolve A7, then open the `Add for Review` flow and confirm the submission summary includes the 8.1.6 build and the intended `Lifetime Pro Unlock` IAP. Do not click final `Submit for Review` without action-time user confirmation.
src/Release/AppStore-8.1.6-20260628.0230/Screenshots/AppStore/mac-01-colorful-tips-2880x1800.png
src/Release/AppStore-8.1.6-20260628.0230/Screenshots/AppStore/mac-02-dark-tips-2880x1800.png
src/Release/AppStore-8.1.6-20260628.0230/Screenshots/IAPReview/iap-review-pro-unlock-about-2880x1800.png
src/Release/AppStore-8.1.6-20260628.0230/Screenshots/IAPReview/iap-review-pro-unlock-about-actual-2092x1436.png