Ariver
2026-07-02 0d1218cce36efb2413d727189d0abf5b511373ab
Prepare TagLauncher 8.3.2 build 20260702.0325
2 files modified
9 files added
343 ■■■■■ changed files
src/Apptag/Info.plist 2 ●●● patch | view | raw | blame | history
src/CHANGELOG.md 2 ●●● patch | view | raw | blame | history
src/Release/AppStore-8.3.2-20260702.0325/APP_REVIEW_NOTES.md 22 ●●●●● patch | view | raw | blame | history
src/Release/AppStore-8.3.2-20260702.0325/APP_STORE_CONNECT_METADATA.md 55 ●●●●● patch | view | raw | blame | history
src/Release/AppStore-8.3.2-20260702.0325/APP_STORE_RELEASE_CHECKLIST.md 51 ●●●●● patch | view | raw | blame | history
src/Release/AppStore-8.3.2-20260702.0325/PKG_PREFLIGHT_REPORT.md 45 ●●●●● patch | view | raw | blame | history
src/Release/AppStore-8.3.2-20260702.0325/Preflight/TagLauncher-AppStore-full.entitlements 18 ●●●●● patch | view | raw | blame | history
src/Release/AppStore-8.3.2-20260702.0325/README.md 23 ●●●●● patch | view | raw | blame | history
src/Release/AppStore-8.3.2-20260702.0325/RELEASE_MANIFEST.md 75 ●●●●● patch | view | raw | blame | history
src/Release/AppStore-8.3.2-20260702.0325/SHA256SUMS.txt 2 ●●●●● patch | view | raw | blame | history
src/Release/Freeze-8.3.2-20260702.0325/FREEZE_MANIFEST.md 48 ●●●●● patch | view | raw | blame | history
src/Apptag/Info.plist
@@ -32,7 +32,7 @@
        </dict>
    </array>
    <key>CFBundleVersion</key>
    <string>20260702.0231</string>
    <string>20260702.0325</string>
    <key>LSApplicationCategoryType</key>
    <string>public.app-category.utilities</string>
    <key>LSMinimumSystemVersion</key>
src/CHANGELOG.md
@@ -6,7 +6,7 @@
- 修复 App Store 从付费下载切换为免费下载 + Pro 内购时的旧付费用户迁移边界:`8.3.2` 之前通过 App Store 付费下载过 TagLauncher 的用户会自动保留 Pro 权益
- 更新 Pro 门禁 QA,防止旧付费用户自动 Pro 的版本边界回退到早于 8.2.9 的错误值
- 版本号更新为 `8.3.2`,Build 更新为 `20260702.0231`
- 版本号更新为 `8.3.2`,Build 更新为 `20260702.0325`
## [8.3.1] — 2026-07-01
src/Release/AppStore-8.3.2-20260702.0325/APP_REVIEW_NOTES.md
New file
@@ -0,0 +1,22 @@
# App Review Notes
TagLauncher is a local macOS utility for organizing and launching installed apps by tag. No account or demo login is required.
Important monetization change for this submission:
TagLauncher is moving from a paid download to a free download with an optional non-consumable Pro unlock. Existing customers who previously purchased the paid macOS app retain equivalent Pro functionality and are not required to purchase Pro again. New users can download the app for free and optionally unlock Pro through the non-consumable In-App Purchase product `com.taglauncher.pro.lifetime`.
How to test:
1. Launch TagLauncher.
2. Open the App Grid from the menu bar icon or press Option-Shift-Space.
3. Use Quick Search from the grid by pressing Space.
4. Open Settings > Pro to view the Free / Pro feature comparison.
5. Use Settings > General or Settings > Theme to see Pro-gated display options. Free users can preview premium visual styles for five minutes; Pro users have full access.
6. Use Settings > Tags to create or edit tags. Free users can maintain up to 6 custom tags; Pro users have no custom tag limit.
7. Use Settings > Hotkeys to view custom hotkey controls. Custom global hotkeys are Pro-gated.
8. Purchase and Restore Purchases are available from Settings > Pro and from Pro-gated feature prompts.
The app does not collect user data and does not use analytics, ads, tracking, accounts, or cloud sync. Tags, notes, preferences, app order, tips visibility, and layout data stay on the user's Mac.
If the Dock icon is hidden, the menu bar icon remains available. The Dock visibility setting can be changed in Settings > General.
src/Release/AppStore-8.3.2-20260702.0325/APP_STORE_CONNECT_METADATA.md
New file
@@ -0,0 +1,55 @@
# App Store Connect Metadata Draft
Generated: 2026-07-02
## App Information
- Name: `TagLauncher`
- Bundle ID: `com.taglauncher.app`
- SKU: `taglauncher-macos`
- Category: `Utilities`
- Version: `8.3.2`
- Build: `20260702.0325`
- Minimum macOS: `14.0`
- App ID: `6777149496`
## In-App Purchase
- Product ID: `com.taglauncher.pro.lifetime`
- Type: Non-Consumable
- Purpose: unlock Pro features permanently on the user's Apple ID.
- Required App Store Connect action: attach this IAP to the `8.3.2` version submission if it has not been approved before.
## Pricing
- Target base app price for the `8.3.2` release window: Free.
- Existing paid users are grandfathered by app original version. The app code treats original App Store versions earlier than `8.3.2` as legacy paid users with Pro access.
- Do not make live `8.2.9` free before `8.3.2` is approved / ready to release.
## What's New
### English
Prepared TagLauncher for free download with optional Pro unlock.
Existing paid-download customers keep Pro access automatically.
Improved stability around tag editing, Quick Search input, and local settings interactions.
### Simplified Chinese
支持 TagLauncher 调整为免费下载,并通过 Pro 解锁高级功能。
此前购买过付费下载版的用户会自动保留 Pro 权益。
改进标签编辑、Quick Search 输入和本地设置交互稳定性。
## App Review Information
- Demo account required: `No`
- Contact email: `shanghai3168@gmail.com`
- Review notes: use `APP_REVIEW_NOTES.md`
## Missing Compliance
If App Store Connect shows `Missing Compliance`, answer the export compliance encryption question according to the current implementation: `None of the algorithms mentioned above`.
src/Release/AppStore-8.3.2-20260702.0325/APP_STORE_RELEASE_CHECKLIST.md
New file
@@ -0,0 +1,51 @@
# App Store Release Checklist
Version: `8.3.2`
Build: `20260702.0325`
Submission type: new App Store build for version `8.3.2`.
## Before Upload
- [x] Source updated to build `20260702.0325`
- [ ] Release tag created: `v8.3.2-build20260702.0325`
- [x] Release directory created under `src/Release/AppStore-8.3.2-20260702.0325`
- [x] Marketing version set to `8.3.2`
- [x] CODEGRAPH records the `8.3.2` first free+Pro migration boundary
- [x] Pro feature gate QA re-run
- [x] App Store `.pkg` generated with Installer certificate
- [x] Final `.pkg` expanded and inspected
- [x] Bundle ID, version, build, category, and minimum macOS verified
- [x] Embedded provisioning profile verified
- [x] Full App Store entitlements verified, including `com.apple.application-identifier`
- [x] `com.apple.quarantine` absent from expanded embedded provisioning profile
- [x] SHA256 recorded
## Upload With Transporter
1. Open Transporter for macOS.
2. Add this package:
```text
/Users/ar/Projects/Taglauncher/src/Release/AppStore-8.3.2-20260702.0325/Upload/TagLauncher-8.3.2-build20260702.0325.pkg
```
3. Deliver the package.
4. Wait for App Store Connect processing to finish.
5. In App Store Connect, select build `8.3.2 (20260702.0325)`.
6. Do not select build `8.3.2 (20260702.0231)`, which had warning `90886`.
7. If `Missing Compliance` appears, complete the export compliance question and choose `None of the algorithms mentioned above`.
8. Confirm non-consumable IAP `com.taglauncher.pro.lifetime` is configured and attached to the `8.3.2` submission if this is the first IAP review.
9. Confirm App Store base price will become Free only for the `8.3.2` release window.
10. Fill What's New from `APP_STORE_CONNECT_METADATA.md`.
11. Fill review notes from `APP_REVIEW_NOTES.md`.
12. Submit for Review.
13. Confirm the final status is Waiting for Review / 正在等待审核.
## Do Not Upload
- Do not upload `Archive/TagLauncher-8.3.2-build20260702.0325.dmg`.
- Do not upload any temporary package under `/private/tmp` or `/var/folders`.
- Do not leave an older build selected on the App Store Connect version page.
- Do not make live `8.2.9` free before the `8.3.2` release window.
src/Release/AppStore-8.3.2-20260702.0325/PKG_PREFLIGHT_REPORT.md
New file
@@ -0,0 +1,45 @@
# PKG Preflight Report - TagLauncher 8.3.2 build 20260702.0325
Package:
`Release/AppStore-8.3.2-20260702.0325/Upload/TagLauncher-8.3.2-build20260702.0325.pkg`
## Signing
| Item | Value |
| --- | --- |
| App signing identity | `0D7D5484FDE4EC1CA2C9225F1E71E65A256A1E7C` |
| App signing name | `3rd Party Mac Developer Application: Hainan Wanxing Technology Co., Ltd. (CR3J54M8BQ)` |
| Installer signing identity | `3rd Party Mac Developer Installer: Hainan Wanxing Technology Co., Ltd. (CR3J54M8BQ)` |
| Installer signing SHA1 | `AABC76560111D01F55B1E932A6BBA3C3E16363B1` |
| Team ID | `CR3J54M8BQ` |
| Profile | `TagLauncher Mac App Store 20260605.2337` |
| Profile expiration | `2027-06-04 21:48:21 CST` |
| Profile-bound app certificate | `0D7D5484FDE4EC1CA2C9225F1E71E65A256A1E7C` |
## Expanded Package Checks
| Check | Result |
| --- | --- |
| `pkgutil --expand-full` | PASS |
| `CFBundleIdentifier` | `com.taglauncher.app` |
| `CFBundleShortVersionString` | `8.3.2` |
| `CFBundleVersion` | `20260702.0325` |
| `LSMinimumSystemVersion` | `14.0` |
| `Contents/embedded.provisionprofile` | PASS |
| `codesign --verify --deep --strict` on expanded app | PASS |
| `com.apple.application-identifier` | `CR3J54M8BQ.com.taglauncher.app` |
| `com.apple.developer.team-identifier` | `CR3J54M8BQ` |
| `com.apple.security.app-sandbox` | PASS |
| `com.apple.security.files.user-selected.read-write` | PASS |
| `keychain-access-groups` | `CR3J54M8BQ.*` |
| `com.apple.quarantine` | Absent from embedded provisioning profile in expanded payload |
| AppleDouble `._*` payload entries | Present in `pkgutil --payload-files`; this matches the previously accepted package pattern and no quarantine xattr was found in the expanded profile |
## Upload Reminder
Use this file in Transporter:
`/Users/ar/Projects/Taglauncher/src/Release/AppStore-8.3.2-20260702.0325/Upload/TagLauncher-8.3.2-build20260702.0325.pkg`
Do not upload the DMG from `Archive/`.
src/Release/AppStore-8.3.2-20260702.0325/Preflight/TagLauncher-AppStore-full.entitlements
New file
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.application-identifier</key>
    <string>CR3J54M8BQ.com.taglauncher.app</string>
    <key>com.apple.developer.team-identifier</key>
    <string>CR3J54M8BQ</string>
    <key>com.apple.security.app-sandbox</key>
    <true/>
    <key>com.apple.security.files.user-selected.read-write</key>
    <true/>
    <key>keychain-access-groups</key>
    <array>
        <string>CR3J54M8BQ.*</string>
    </array>
</dict>
</plist>
src/Release/AppStore-8.3.2-20260702.0325/README.md
New file
@@ -0,0 +1,23 @@
# TagLauncher 8.3.2 App Store Release
Release directory for TagLauncher `8.3.2` build `20260702.0325`.
Upload artifact:
`Upload/TagLauncher-8.3.2-build20260702.0325.pkg`
Do not upload the DMG from `Archive/`; it is kept only as a local rollback / install artifact.
This build supersedes `8.3.2 (20260702.0231)`. Build `20260702.0231` was delivered by Transporter, but App Store Connect reported warning `90886`: the bundle signature was missing `com.apple.application-identifier`, so the build was not eligible for TestFlight. Build `20260702.0325` was re-signed with the complete App Store entitlements used by the previously accepted 8.2.9 package.
Critical monetization boundary:
- `ProEntitlementConfig.firstFreeProVersion = "8.3.2"`.
- App Store users whose original download version is earlier than `8.3.2` are treated as legacy paid users and keep Pro access.
- New users who first download `8.3.2` or later are free users unless they unlock Pro through `com.taglauncher.pro.lifetime`.
Release coordination:
- Do not set the existing live `8.2.9` app price to free before this `8.3.2` build is approved and ready to release.
- In the 8.3.2 release window, set the base app price to Free and submit / attach the Pro non-consumable In-App Purchase.
- If the first IAP is not approved yet, attach it to the 8.3.2 app version submission in App Store Connect.
src/Release/AppStore-8.3.2-20260702.0325/RELEASE_MANIFEST.md
New file
@@ -0,0 +1,75 @@
# Release Manifest - TagLauncher 8.3.2 build 20260702.0325
## Identity
- Product: TagLauncher
- Version: `8.3.2`
- Build: `20260702.0325`
- Bundle ID: `com.taglauncher.app`
- Minimum macOS: `14.0`
- Category: `public.app-category.utilities`
- Generated at: `2026-07-02 03:25 CST`
- Branch: `codex/pro-custom-hotkeys-8.2.0`
- Superseded 20260702.0231 release-doc commit: `cf4a1ad4dbc8f4a3f61a0a1a32f63d31c3562b27`
- Release tag: `v8.3.2-build20260702.0325`
## Artifacts
- Local rollback DMG: `Release/AppStore-8.3.2-20260702.0325/Archive/TagLauncher-8.3.2-build20260702.0325.dmg`
- App Store upload PKG: `Release/AppStore-8.3.2-20260702.0325/Upload/TagLauncher-8.3.2-build20260702.0325.pkg`
- DMG SHA256: `2b321f09be17b4844a0a6b9bef75bb27d982dcfc00e380abba9924ec47323617`
- PKG SHA256: `24f14960177dafc001d9bc86795bc4f124ac696577763e599006c5564cc2bc18`
- DMG size: `6356211` bytes
- PKG size: `6160246` bytes
## Why This Build Supersedes 20260702.0231
Transporter delivered `8.3.2 (20260702.0231)`, but reported App Store Connect warning `90886`:
`Cannot be used with TestFlight because the signature for the bundle at "TagLauncher.app" is missing an application identifier...`
Root cause: the app bundle was re-signed with only sandbox entitlements. Fix: re-sign build `20260702.0325` with the full Mac App Store entitlements:
- `com.apple.application-identifier = CR3J54M8BQ.com.taglauncher.app`
- `com.apple.developer.team-identifier = CR3J54M8BQ`
- `com.apple.security.app-sandbox = true`
- `com.apple.security.files.user-selected.read-write = true`
- `keychain-access-groups = CR3J54M8BQ.*`
## Release Scope
- Changes the paid-download to free-download Pro migration boundary to `8.3.2`.
- Preserves Pro for users who originally purchased TagLauncher before `8.3.2`, including the paid `8.2.9` App Store build.
- Keeps new `8.3.2` users on Free state until they unlock Pro through the non-consumable IAP product `com.taglauncher.pro.lifetime`.
- Adds QA coverage for the `8.3.2` StoreKit legacy boundary.
- Includes prior input and event safety hardening for Quick Search, tag editing, Usage Tips, and App Note bubbles.
## QA Evidence
Full release QA was run for build `20260702.0231`; build `20260702.0325` changes only build metadata and App Store signing entitlements. The following verification was re-run for `20260702.0325`:
```bash
bash Scripts/pro_feature_gate_qa.sh
APP_STORE=1 CODESIGN_IDENTITY="0D7D5484FDE4EC1CA2C9225F1E71E65A256A1E7C" APP_BUILD=20260702.0325 bash build.sh
bash Scripts/macos14_build_metadata_qa.sh build/TagLauncher.app
codesign --verify --deep --strict --verbose=2 build/TagLauncher.app
hdiutil verify Release/AppStore-8.3.2-20260702.0325/Archive/TagLauncher-8.3.2-build20260702.0325.dmg
pkgutil --check-signature Release/AppStore-8.3.2-20260702.0325/Upload/TagLauncher-8.3.2-build20260702.0325.pkg
pkgutil --expand-full Release/AppStore-8.3.2-20260702.0325/Upload/TagLauncher-8.3.2-build20260702.0325.pkg Release/AppStore-8.3.2-20260702.0325/Preflight/expanded
codesign --verify --deep --strict --verbose=2 Release/AppStore-8.3.2-20260702.0325/Preflight/expanded/com.taglauncher.app.pkg/Payload/TagLauncher.app
codesign -d --entitlements :- Release/AppStore-8.3.2-20260702.0325/Preflight/expanded/com.taglauncher.app.pkg/Payload/TagLauncher.app
```
Result: PASS.
## App Store Connect Status
Pending after freeze:
- Upload `Upload/TagLauncher-8.3.2-build20260702.0325.pkg`.
- Select build `8.3.2 (20260702.0325)` after processing.
- Do not select the warning build `8.3.2 (20260702.0231)`.
- Attach non-consumable IAP `com.taglauncher.pro.lifetime` if this is the first IAP submission.
- Confirm base app pricing is changed to Free only for the 8.3.2 release window.
- Complete export compliance if App Store Connect shows Missing Compliance.
- Submit for review after build and IAP configuration are complete.
src/Release/AppStore-8.3.2-20260702.0325/SHA256SUMS.txt
New file
@@ -0,0 +1,2 @@
24f14960177dafc001d9bc86795bc4f124ac696577763e599006c5564cc2bc18  Upload/TagLauncher-8.3.2-build20260702.0325.pkg
2b321f09be17b4844a0a6b9bef75bb27d982dcfc00e380abba9924ec47323617  Archive/TagLauncher-8.3.2-build20260702.0325.dmg
src/Release/Freeze-8.3.2-20260702.0325/FREEZE_MANIFEST.md
New file
@@ -0,0 +1,48 @@
# Freeze Manifest - TagLauncher 8.3.2 build 20260702.0325
## Freeze Identity
- Product: TagLauncher
- Version: `8.3.2`
- Build: `20260702.0325`
- Freeze time: `2026-07-02 03:25 CST`
- Branch: `codex/pro-custom-hotkeys-8.2.0`
- Release tag: `v8.3.2-build20260702.0325`
## Freeze Scope
This freeze supersedes `8.3.2 (20260702.0231)` and fixes Transporter warning `90886` by signing the app with full Mac App Store entitlements.
Protected monetization rule:
- Original App Store version earlier than `8.3.2`: legacy paid user, Pro enabled.
- Original App Store version `8.3.2` or later: free user unless Pro is unlocked through IAP.
- IAP product ID: `com.taglauncher.pro.lifetime`.
## QA Gate
```bash
bash Scripts/pro_feature_gate_qa.sh
APP_STORE=1 CODESIGN_IDENTITY="0D7D5484FDE4EC1CA2C9225F1E71E65A256A1E7C" APP_BUILD=20260702.0325 bash build.sh
bash Scripts/macos14_build_metadata_qa.sh build/TagLauncher.app
codesign --verify --deep --strict --verbose=2 build/TagLauncher.app
hdiutil verify Release/AppStore-8.3.2-20260702.0325/Archive/TagLauncher-8.3.2-build20260702.0325.dmg
pkgutil --check-signature Release/AppStore-8.3.2-20260702.0325/Upload/TagLauncher-8.3.2-build20260702.0325.pkg
pkgutil --expand-full Release/AppStore-8.3.2-20260702.0325/Upload/TagLauncher-8.3.2-build20260702.0325.pkg Release/AppStore-8.3.2-20260702.0325/Preflight/expanded
codesign --verify --deep --strict --verbose=2 Release/AppStore-8.3.2-20260702.0325/Preflight/expanded/com.taglauncher.app.pkg/Payload/TagLauncher.app
```
Result: PASS.
## Artifacts
- Local rollback DMG: `/Users/ar/Projects/Taglauncher/src/Release/AppStore-8.3.2-20260702.0325/Archive/TagLauncher-8.3.2-build20260702.0325.dmg`
- App Store upload PKG: `/Users/ar/Projects/Taglauncher/src/Release/AppStore-8.3.2-20260702.0325/Upload/TagLauncher-8.3.2-build20260702.0325.pkg`
- DMG SHA256: `2b321f09be17b4844a0a6b9bef75bb27d982dcfc00e380abba9924ec47323617`
- PKG SHA256: `24f14960177dafc001d9bc86795bc4f124ac696577763e599006c5564cc2bc18`
## Go / No-Go
Go for App Store upload with `Upload/TagLauncher-8.3.2-build20260702.0325.pkg`.
Do not use the earlier warning build `20260702.0231`.