src/Release/AppStore-8.1.0-20260626.1726/APP_REVIEW_NOTES.md
New file @@ -0,0 +1,49 @@ # App Review Notes ## English TagLauncher is a local macOS utility for organizing and launching installed apps by tag. No account or demo login is required. 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. Create or use a tag group, then drag an app icon within the same group to preview display ordering. 5. Create an empty tag in Settings > Tags; the empty tag remains visible in the App Grid with a minimal placeholder container. 6. Drag an app to blank space outside containers to remove that tag assignment. 7. Open Settings > General to hide or show App Grid usage tips. 8. Open Settings > Theme to switch between free themes. Premium themes show the Pro unlock prompt and can be previewed. 9. Open Settings > Data to export or import the local category layout. These actions are Pro features and show the Pro unlock prompt when locked. Version 8.1.0 build 20260626.1726 adds the Free + Pro model. Core app organization, launching, Quick Search, local tag editing, and the default/free themes remain usable without purchase. Pro unlock is a one-time purchase for premium themes, layout import/export, unlimited custom app notes, and persistent app ordering. Users who originally purchased TagLauncher before this Free + Pro version are automatically unlocked as Pro users. The in-app purchase product identifier is `com.taglauncher.pro.lifetime`. The app does not collect user data and does not use analytics, ads, tracking, accounts, or cloud sync. Local import/export uses user-selected files only. If the Dock icon is hidden, the menu bar icon remains available. The Dock visibility setting can be changed in Settings > General. ## Simplified Chinese TagLauncher 是一个本地 macOS 工具,用于按标签整理和启动已安装的应用。不需要账号或演示登录。 测试方式: 1. 启动 TagLauncher。 2. 点击菜单栏图标打开 App Grid,或按 Option-Shift-Space。 3. 在 App Grid 中按 Space 打开 Quick Search。 4. 创建或使用一个标签分组,在同一个分组内拖动应用图标,可以预览显示顺序。 5. 在 Settings > Tags 创建一个空标签;空标签会继续显示在 App Grid 中,并带有最小占位容器。 6. 把应用拖到容器外空白处,可以移除该标签归属。 7. 打开 Settings > General,可以关闭或开启 App Grid 底部使用技巧。 8. 打开 Settings > Theme,可以切换免费主题。高级主题会显示 Pro 解锁提示,并允许预览。 9. 打开 Settings > Data,可以导出或导入本地分类布局。这两项属于 Pro 功能,锁定时会显示 Pro 解锁提示。 版本 8.1.0 build 20260626.1726 新增免费版 + Pro 模式。应用整理、启动、Quick Search、本地标签编辑和默认 / 免费主题无需购买即可使用。Pro 是一次性购买,用于解锁高级主题、布局导入导出、无限自定义应用备注和应用排序持久化。早于免费版 + Pro 版本购买过 TagLauncher 的用户会自动获得 Pro。 内购商品 ID 为 `com.taglauncher.pro.lifetime`。 本应用不收集用户数据,不包含分析、广告、追踪、账号或云同步。本地导入导出只使用用户主动选择的文件。 如果 Dock 图标被隐藏,菜单栏图标仍可使用。Dock 显示设置可在 Settings > General 中调整。 src/Release/AppStore-8.1.0-20260626.1726/APP_STORE_CONNECT_METADATA.md
New file @@ -0,0 +1,44 @@ # App Store Connect Metadata Draft - 8.1.0 ## Version - Version: `8.1.0` - Build: `20260626.1726` - Upload package: `Upload/TagLauncher-8.1.0-build20260626.1726.pkg` - In-app purchase product: `com.taglauncher.pro.lifetime` ## What's New - English TagLauncher now includes a Free + Pro model. Core local app organization, tag editing, launching, Quick Search, and the default/free themes remain available without purchase. Pro unlock is a one-time purchase for premium themes, layout import/export, unlimited custom notes, and persistent app ordering. This update also protects free previews from changing real user data and adds full localization coverage for the new Pro screens. ## What's New - Simplified Chinese TagLauncher 现在加入免费版 + Pro 模式。基础的本地应用整理、标签编辑、应用启动、Quick Search 和默认 / 免费主题仍可免费使用。Pro 为一次性购买,可解锁高级主题、布局导入导出、无限自定义备注和应用排序持久化。 本次更新也保护免费预览不写脏真实用户数据,并补齐了 Pro 相关界面的多语言文案。 ## Review Notes Source Use `APP_REVIEW_NOTES.md` for App Review Notes. ## SOP Gate Before final App Store Connect submission: - Confirm the current App Store baseline / replaced build. - Review cumulative user-visible changelog entries from the baseline through `8.1.0`. - Confirm `com.taglauncher.pro.lifetime` exists and is attached to this app version. - Confirm Missing Compliance if App Store Connect asks for it. ## Forbidden Terms Check The draft above intentionally avoids: - `Launchpad` - `LaunchPad` - `启动台` - `Spotlight 替代` - `Launchpad 替代` - Finder / Dock / Spotlight comparison marketing claims src/Release/AppStore-8.1.0-20260626.1726/APP_STORE_RELEASE_CHECKLIST.md
New file @@ -0,0 +1,85 @@ # App Store Release Checklist Version: `8.1.0` Build: `20260626.1726` Submission type: new App Store build for version `8.1.0`. ## Before Upload - [x] Source commit frozen: `2c36a4a39da126c30a5a5daedf501229412b2e1a` - [x] Release tag created: `v8.1.0-build20260626.1726` - [x] Release directory created under `src/Release/AppStore-8.1.0-20260626.1726` - [x] Marketing version set to `8.1.0` - [x] Build set to `20260626.1726` - [x] `CHANGELOG.md` includes 8.1.0 - [x] CODEGRAPH checked and updated - [x] DMG generated and verified for local rollback only - [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] Signed entitlements verified - [x] `com.apple.quarantine` absent from expanded package - [x] AppleDouble `._*` files absent from expanded package - [x] SHA256 recorded - [x] ASC metadata draft scanned for SOP forbidden words - [ ] In-app purchase product `com.taglauncher.pro.lifetime` confirmed in App Store Connect - [ ] In-app purchase product attached to version `8.1.0` - [ ] Current App Store baseline / version being replaced confirmed before filling What's New - [ ] Cumulative changelog range reviewed from the current App Store baseline through `8.1.0` - [ ] User-visible changes from all intermediate versions considered for What's New - [ ] Excluded changelog items have explicit reasons: internal QA, build tooling, refactor, or non-user-visible - [ ] Simplified Chinese and English What's New reviewed by the user before final ASC submission ## Upload With Transporter 1. Open Transporter for macOS. 2. Add this package: ```text /Users/ar/Projects/Taglauncher/src/Release/AppStore-8.1.0-20260626.1726/Upload/TagLauncher-8.1.0-build20260626.1726.pkg ``` 3. Deliver the package. 4. Wait for App Store Connect processing to finish. 5. In App Store Connect, open the TagLauncher macOS version `8.1.0` page. 6. Select build `20260626.1726`. 7. Attach / confirm in-app purchase product `com.taglauncher.pro.lifetime`. 8. If `Missing Compliance` appears, complete the export compliance question and choose `None of the algorithms mentioned above`. 9. Before filling What's New, confirm the current App Store baseline / version being replaced and review the cumulative `CHANGELOG.md` range through `8.1.0`. 10. Fill metadata from `APP_STORE_CONNECT_METADATA.md`, but only after the cumulative What's New copy has been reviewed by the user. 11. Fill review notes from `APP_REVIEW_NOTES.md`. 12. Check both Simplified Chinese and English metadata for forbidden trademark-risk phrases. 13. Add for Review only after user approval of What's New. 14. Submit for Review. 15. Confirm the final status is Waiting for Review / 正在等待审核. ## Do Not Upload - Do not upload `Archive/TagLauncher-8.1.0-build20260626.1726.dmg`. - Do not upload any temporary package under `/private/tmp`, `/tmp`, or `/var/folders`. - Do not leave an older build selected on the App Store Connect version page. - Do not submit before `com.taglauncher.pro.lifetime` is configured for review. ## SOP Forbidden Metadata Terms The prepared metadata must not include: - `Launchpad` - `LaunchPad` - `启动台` - `Spotlight 替代` - `Launchpad 替代` - `超越原生 LaunchPad` - Finder / Dock / Spotlight comparison marketing claims ## After Upload - Record Transporter upload result. - Record App Store Connect processing result. - Record whether Missing Compliance appeared and how it was answered. - Record whether the in-app purchase product was attached. - Record the App Store baseline / replaced version used to generate cumulative What's New. - If Apple rejects the binary, do not reuse the same build number for a new package. Increment `CFBundleVersion` with a new `YYYYMMDD.HHMM` build. src/Release/AppStore-8.1.0-20260626.1726/Archive/TagLauncher-8.1.0-build20260626.1726.dmgBinary files differ
src/Release/AppStore-8.1.0-20260626.1726/PKG_PREFLIGHT_REPORT.md
New file @@ -0,0 +1,40 @@ # PKG Preflight Report - TagLauncher 8.1.0 build 20260626.1726 Package: `Release/AppStore-8.1.0-20260626.1726/Upload/TagLauncher-8.1.0-build20260626.1726.pkg` ## Signing | Item | Value | | --- | --- | | App signing identity | `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)` | | Team ID | `CR3J54M8BQ` | | Profile | `TagLauncher Mac App Store 20260605.2337` | | Profile expiration | `2027-06-04T13:48:21Z` | ## Expanded Package Checks | Check | Result | | --- | --- | | `pkgutil --expand-full` | PASS | | `CFBundleIdentifier` | `com.taglauncher.app` | | `CFBundleShortVersionString` | `8.1.0` | | `CFBundleVersion` | `20260626.1726` | | `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 | | `com.apple.quarantine` | Absent | | AppleDouble `._*` files | Absent | ## Upload Reminder Use this file in Transporter: `/Users/ar/Projects/Taglauncher/src/Release/AppStore-8.1.0-20260626.1726/Upload/TagLauncher-8.1.0-build20260626.1726.pkg` Do not upload the DMG from `Archive/`. src/Release/AppStore-8.1.0-20260626.1726/QA_RELEASE_EVIDENCE.md
New file @@ -0,0 +1,52 @@ # QA Release Evidence - TagLauncher 8.1.0 build 20260626.1726 ## Source Freeze | Item | Result | | --- | --- | | Source commit | `2c36a4a39da126c30a5a5daedf501229412b2e1a` | | Release tag | `v8.1.0-build20260626.1726` | | Version / build in app bundle | `8.1.0` / `20260626.1726` | | Minimum macOS | `14.0` | | CODEGRAPH | Updated and committed | ## QA Commands | Command | Result | | --- | --- | | `bash Scripts/pro_feature_gate_qa.sh` | PASS | | `bash Scripts/pro_localization_qa.sh` | PASS | | `bash Scripts/theme_settings_qa.sh` | PASS | | `bash Scripts/app_ordering_data_qa.sh` | PASS | | `bash Scripts/appgrid_startup_loading_qa.sh` | PASS | | `bash Scripts/usage_tips_qa.sh` | PASS | | `bash Scripts/usage_tips_close_reminder_qa.sh` | PASS | | `bash Scripts/smart_category_localization_qa.sh` | PASS | | `bash Scripts/apple_default_note_policy_qa.sh` | PASS | | `bash Scripts/apple_default_apps_resource_qa.sh` | PASS | | `bash Scripts/window_logic_qa.sh` | PASS | | `bash Scripts/macos14_build_metadata_qa.sh` | PASS | | `bash Scripts/macos14_availability_typecheck_qa.sh` | PASS | | `bash Scripts/quick_search_app_name_qa.sh` | SKIP/PASS: Sunlogin wrapper fixture not installed; script exited 0 | ## Build Verification | Check | Result | | --- | --- | | `APP_BUILD=20260626.1726 bash build.sh` | PASS | | `codesign --verify --deep --strict --verbose=2 build/TagLauncher.app` | PASS | | `spctl --assess --type execute --verbose=4 build/TagLauncher.app` | Local ad-hoc build rejected by Gatekeeper; expected for non-notarized local DMG | | `hdiutil verify build/TagLauncher-8.1.0-build20260626.1726.dmg` | PASS | | Mounted DMG contains `TagLauncher.app` | PASS | | Mounted DMG contains `Applications -> /Applications` symlink | PASS | | `pkgutil --check-signature build/AppStore/TagLauncher-8.1.0-build20260626.1726.pkg` | PASS | | Expanded PKG bundle id/version/build | PASS: `com.taglauncher.app`, `8.1.0`, `20260626.1726` | | Expanded PKG embedded provisioning profile | PASS | | Expanded PKG sandbox entitlements | PASS | | Expanded PKG quarantine xattr absent | PASS | | Expanded PKG AppleDouble files absent | PASS | ## Notes - Pro translation QA intentionally uses static completeness and fallback checks only; no `translategemma` / Ollama call is used in this release. - The App Store package uses the Mac App Store signing path. Upload `Upload/*.pkg`; keep `Archive/*.dmg` only for local install and rollback. src/Release/AppStore-8.1.0-20260626.1726/README.md
New file @@ -0,0 +1,29 @@ # TagLauncher 8.1.0 build 20260626.1726 Release Pack This directory contains the App Store release materials for TagLauncher `8.1.0` build `20260626.1726`. ## Upload Artifact Upload this file with Transporter: `/Users/ar/Projects/Taglauncher/src/Release/AppStore-8.1.0-20260626.1726/Upload/TagLauncher-8.1.0-build20260626.1726.pkg` ## Local Rollback Artifact Use this file for local install / rollback testing only: `/Users/ar/Projects/Taglauncher/src/Release/AppStore-8.1.0-20260626.1726/Archive/TagLauncher-8.1.0-build20260626.1726.dmg` ## Fixed Source Point - Commit: `2c36a4a39da126c30a5a5daedf501229412b2e1a` - Tag: `v8.1.0-build20260626.1726` ## Documents - `RELEASE_MANIFEST.md`: build identity, artifacts, hashes, commands, scope. - `QA_RELEASE_EVIDENCE.md`: QA and package verification evidence. - `PKG_PREFLIGHT_REPORT.md`: expanded package signing and entitlement checks. - `APP_STORE_CONNECT_METADATA.md`: metadata draft and What's New starter copy. - `APP_REVIEW_NOTES.md`: review notes in English and Simplified Chinese. - `APP_STORE_RELEASE_CHECKLIST.md`: Transporter / App Store Connect checklist. src/Release/AppStore-8.1.0-20260626.1726/RELEASE_MANIFEST.md
New file @@ -0,0 +1,89 @@ # Release Manifest - TagLauncher 8.1.0 build 20260626.1726 ## Identity - Product: TagLauncher - Version: `8.1.0` - Build: `20260626.1726` - Bundle ID: `com.taglauncher.app` - Minimum macOS: `14.0` - Category: `public.app-category.utilities` - Generated at: `2026-06-26 18:03 CST` - Branch: `codex/appgrid-usage-tips` - Source commit: `2c36a4a39da126c30a5a5daedf501229412b2e1a` - Release tag: `v8.1.0-build20260626.1726` - CODEGRAPH status: checked and updated in source commit `2c36a4a`. ## Artifacts - Local rollback DMG: `Release/AppStore-8.1.0-20260626.1726/Archive/TagLauncher-8.1.0-build20260626.1726.dmg` - App Store upload PKG: `Release/AppStore-8.1.0-20260626.1726/Upload/TagLauncher-8.1.0-build20260626.1726.pkg` - DMG SHA256: `346fc3c9bd0fcdb346d3f4ca83ffa46b34d3a5187155253d5dae7d999c39060f` - PKG SHA256: `32de0ef0af979b2a35d60c2b1bca7461292db86781e4c64e694128470ddde264` - App binary SHA256: `710073b46e176ce6224f5acfaca4e0e5d86b286355fc0bef335cab0d69f02884` - DMG size: `6241554` bytes - PKG size: `6011051` bytes ## Build Commands ```bash cd /Users/ar/Projects/Taglauncher/src APP_BUILD=20260626.1726 bash build.sh bash make_dmg.sh cp build/TagLauncher.dmg build/TagLauncher-8.1.0-build20260626.1726.dmg ``` ## App Store Package Commands ```bash cd /Users/ar/Projects/Taglauncher/src PROFILE="$HOME/Library/MobileDevice/Provisioning Profiles/TagLauncher_Mac_App_Store_202606052337.provisionprofile" APP_IDENTITY="0D7D5484FDE4EC1CA2C9225F1E71E65A256A1E7C" INSTALLER_IDENTITY="3rd Party Mac Developer Installer: Hainan Wanxing Technology Co., Ltd. (CR3J54M8BQ)" # Copy build/TagLauncher.app to a temporary staging directory, embed the profile, # clear xattrs, sign with runtime + sandbox entitlements, then productbuild. productbuild --component /tmp/.../stage/TagLauncher.app /Applications \ --sign "$INSTALLER_IDENTITY" \ build/AppStore/TagLauncher-8.1.0-build20260626.1726.pkg ``` The staged App Store app was signed with: - `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.*]` ## Verification Commands ```bash bash Scripts/pro_feature_gate_qa.sh bash Scripts/pro_localization_qa.sh bash Scripts/macos14_build_metadata_qa.sh bash Scripts/macos14_availability_typecheck_qa.sh codesign --verify --deep --strict --verbose=2 build/TagLauncher.app hdiutil verify build/TagLauncher-8.1.0-build20260626.1726.dmg hdiutil attach -readonly -nobrowse build/TagLauncher-8.1.0-build20260626.1726.dmg pkgutil --check-signature build/AppStore/TagLauncher-8.1.0-build20260626.1726.pkg pkgutil --expand-full build/AppStore/TagLauncher-8.1.0-build20260626.1726.pkg /tmp/taglauncher-pkg-preflight-8.1.0-180303 codesign --verify --deep --strict --verbose=2 /tmp/taglauncher-pkg-preflight-8.1.0-180303/com.taglauncher.app.pkg/Payload/TagLauncher.app ``` ## Release Scope - Adds the Free + Pro unlock model for TagLauncher. - Keeps core local tagging, app launching, Quick Search, default themes, Deep Blue, and Black available for free users. - Locks premium themes, layout import/export, unlimited custom notes, and persistent app sorting behind Pro. - Adds StoreKit 2 purchase, restore, transaction update listening, offline entitlement cache, and legacy paid-user unlock. - Protects free previews from dirtying real user data: premium theme previews do not persist, free sorting previews do not write container order, blocked notes do not mutate stored notes, and import/export is gated before file reads or writes. - Adds 29-language Pro copy and static QA for Pro localization and feature gates. ## App Store Upload - Upload `Upload/TagLauncher-8.1.0-build20260626.1726.pkg`, not the DMG in `Archive/`. - Confirm the non-consumable in-app purchase product `com.taglauncher.pro.lifetime` exists in App Store Connect and is associated with version `8.1.0`. - If `Missing Compliance` appears, answer the encryption question with `None of the algorithms mentioned above`. - Before filling What's New, confirm the current App Store baseline / replaced build and review cumulative changelog entries through `8.1.0`. src/Release/AppStore-8.1.0-20260626.1726/SHA256SUMS.txt
New file @@ -0,0 +1,2 @@ 346fc3c9bd0fcdb346d3f4ca83ffa46b34d3a5187155253d5dae7d999c39060f Archive/TagLauncher-8.1.0-build20260626.1726.dmg 32de0ef0af979b2a35d60c2b1bca7461292db86781e4c64e694128470ddde264 Upload/TagLauncher-8.1.0-build20260626.1726.pkg src/Release/AppStore-8.1.0-20260626.1726/Upload/TagLauncher-8.1.0-build20260626.1726.pkgBinary files differ