From d701709c08f98a8b6e2791fcbb1e9291624e3236 Mon Sep 17 00:00:00 2001 From: Ariver <shanghai3168@gmail.com> Date: Thu, 04 Jun 2026 01:24:54 +0800 Subject: [PATCH] Prepare 7.8.12 App Store submission materials --- Release/AppStore-7.8.12-20260604.0105/Review/APP_REVIEW_NOTES.md | 35 ++ Release/AppStore-7.8.12-20260604.0105/Support/SUPPORT.md | 52 ++++ Release/AppStore-7.8.12-20260604.0105/Screenshots/AppStore/.gitkeep | 1 Release/AppStore-7.8.12-20260604.0105/APP_STORE_ASSET_INVENTORY.md | 49 +++ Release/AppStore-7.8.12-20260604.0105/Screenshots/raw/.gitkeep | 1 Release/AppStore-7.8.12-20260604.0105/BUILD_SIGN_UPLOAD.md | 112 ++++++++ Release/AppStore-7.8.12-20260604.0105/README.md | 14 + Release/AppStore-7.8.12-20260604.0105/Screenshots/SCREENSHOT_SHOT_LIST.md | 59 ++++ Release/AppStore-7.8.12-20260604.0105/APP_STORE_RELEASE_CHECKLIST.md | 78 ++++++ Release/AppStore-7.8.12-20260604.0105/Legal/PRIVACY_POLICY.zh-Hans.md | 75 +++++ Release/AppStore-7.8.12-20260604.0105/APP_STORE_CONNECT_METADATA.md | 135 ++++++++++ Release/AppStore-7.8.12-20260604.0105/FIRST_TIME_MAC_APP_STORE_TODO.md | 88 ++++++ Release/AppStore-7.8.12-20260604.0105/Upload/.gitkeep | 1 Release/AppStore-7.8.12-20260604.0105/Assets/TagLauncher-AppIcon-1024.png | 0 Release/AppStore-7.8.12-20260604.0105/Legal/PRIVACY_POLICY.md | 75 +++++ Release/AppStore-7.8.12-20260604.0105/Submitted/.gitkeep | 1 16 files changed, 776 insertions(+), 0 deletions(-) diff --git a/Release/AppStore-7.8.12-20260604.0105/APP_STORE_ASSET_INVENTORY.md b/Release/AppStore-7.8.12-20260604.0105/APP_STORE_ASSET_INVENTORY.md new file mode 100644 index 0000000..0991034 --- /dev/null +++ b/Release/AppStore-7.8.12-20260604.0105/APP_STORE_ASSET_INVENTORY.md @@ -0,0 +1,49 @@ +# App Store Asset Inventory + +本发布包冻结 TagLauncher `7.8.12` build `20260604.0105`。 + +## 已包含 + +- `Archive/TagLauncher-7.8.12-build20260604.0105.dmg` +- `README.md` +- `QA_RELEASE_EVIDENCE.md` +- `RELEASE_MANIFEST.md` +- `SHA256SUMS.txt` +- `APP_STORE_RELEASE_CHECKLIST.md` +- `APP_STORE_CONNECT_METADATA.md` +- `BUILD_SIGN_UPLOAD.md` +- `APP_STORE_ASSET_INVENTORY.md` +- `Assets/TagLauncher-AppIcon-1024.png` +- `Legal/PRIVACY_POLICY.md` +- `Legal/PRIVACY_POLICY.zh-Hans.md` +- `Review/APP_REVIEW_NOTES.md` +- `Screenshots/SCREENSHOT_SHOT_LIST.md` +- `Support/SUPPORT.md` + +## 上传前仍需外部完成 + +- Apple Developer 账号权限:Account Holder、Admin 或 App Manager。 +- Apple Developer 最新协议确认。 +- 如果收费:Paid Apps Agreement、税务、银行信息。 +- App Store Connect app record。 +- Mac App Store 签名证书和 provisioning profile。 +- App Store signed build / signed `.pkg`。 +- 公网 Privacy Policy URL。 +- 公网 Support URL。 +- 最终 App Store 截图。 +- App Review 联系方式。 +- 年龄分级、内容权利、出口合规、隐私问卷、价格和销售区域。 + +## 本地资产核对 + +- App icon source:`Apptag/Assets.xcassets/AppIcon.appiconset/icon_1024_preview.png` +- Archived icon:`Assets/TagLauncher-AppIcon-1024.png` +- Archived icon size:`1024 x 1024` +- App Sandbox entitlements: + - `com.apple.security.app-sandbox = true` + - `com.apple.security.files.user-selected.read-write = true` + +## 不能直接上传的文件 + +- `Archive/TagLauncher-7.8.12-build20260604.0105.dmg` 是本地可回滚候选包,不是 App Store Connect 的上传包。 +- App Store Connect 最终应上传由 Apple Distribution / Mac Installer Distribution 签名流程生成的构建产物。 diff --git a/Release/AppStore-7.8.12-20260604.0105/APP_STORE_CONNECT_METADATA.md b/Release/AppStore-7.8.12-20260604.0105/APP_STORE_CONNECT_METADATA.md new file mode 100644 index 0000000..7d985bd --- /dev/null +++ b/Release/AppStore-7.8.12-20260604.0105/APP_STORE_CONNECT_METADATA.md @@ -0,0 +1,135 @@ +# App Store Connect Metadata Draft + +这些是 TagLauncher `7.8.12` 的 App Store Connect 填写草稿。提交前请把支持邮箱、隐私政策 URL、支持 URL、版权归属和价格策略替换为真实值。 + +## App Information + +- Name: `TagLauncher` +- Bundle ID: `com.taglauncher.app` +- SKU: `taglauncher-macos` +- Category: `Utilities` +- Version: `7.8.12` +- Primary language: `English (U.S.)` or `Simplified Chinese` +- Distribution method: Public App Store +- Release option: Manual release after approval + +## Subtitle Options + +English, 30 characters max: + +- `Tag-based app launcher` +- `Launch apps by tag` + +Simplified Chinese, 30 characters max: + +- `标签化应用启动器` +- `用标签启动 Mac 应用` + +## Description Draft + +TagLauncher is a fast tag-based launcher for Mac apps. + +Organize installed apps into visual tag groups, open a fullscreen-friendly app grid from a global hotkey, and jump directly to apps with Quick Search. It is designed for people who have many apps and want a calmer, faster way to find the right one without hunting through Launchpad, Finder, or the Dock. + +Highlights: + +- Open the app grid with Option-Shift-Space. +- Search apps, tags, and notes with Quick Search. +- Group apps by custom tags. +- Tune icon size, tag position, app list style, and Dock visibility. +- Import and export your category layout. +- Works across multiple displays and fullscreen Spaces. + +## Chinese Description Draft + +TagLauncher 是一个基于标签的 Mac 应用启动器。 + +你可以把已安装的应用整理成可视化标签分组,用全局快捷键唤出应用网格,也可以通过 Quick Search 直接搜索应用、标签和备注。它适合安装了很多应用、希望更快找到目标应用的人。 + +亮点: + +- 使用 Option-Shift-Space 打开应用网格。 +- 使用 Quick Search 搜索应用、标签和备注。 +- 用自定义标签整理应用。 +- 可调整图标大小、标签位置、列表样式和 Dock 显示。 +- 支持分类布局的导入和导出。 +- 支持多显示器和全屏 Space 场景。 + +## Keywords Draft + +English: + +`launcher,tags,apps,productivity,quick search,utility,mac` + +Simplified Chinese: + +`启动器,标签,应用,效率,搜索,工具,Mac` + +## What's New + +Version 7.8.12: + +- Fixed an issue where Quick Search-only mode could close immediately after opening because of a stale mouse dismiss event. +- Improved Quick Search-only stability after pressing Fn-Space while keeping keyboard cancel and repeated Fn-Space close behavior immediate. +- Updated release QA coverage for synthetic Fn-Space delivery and Quick Search result click targeting. + +## App Review Notes Draft + +TagLauncher is a macOS utility for organizing installed applications into visual tag groups and launching them from a keyboard-accessible app grid. + +Primary review flow: + +1. Launch TagLauncher. +2. Press `Option-Shift-Space` to show the app grid. +3. Press `Space` while the app grid is visible to open Quick Search. +4. Press `Escape` once to close Quick Search. +5. Press `Escape` again to close the app grid. +6. Open Settings from the menu bar or with `Command-Comma`. + +Expected behavior: + +- The app grid intentionally appears above normal and fullscreen app windows. +- In fullscreen and Split View Spaces, AppGrid, Quick Search, and Settings should remain in the current Space instead of switching to another Space. +- While the app grid is visible, TagLauncher may hide the Dock depending on user settings and shows TagLauncher's menu bar. +- The system Force Quit window remains above TagLauncher. +- Import/export uses standard macOS file panels. +- In sandboxed App Store builds, login-at-launch may be disabled if the LaunchAgent approach is unavailable. + +No demo account is required. + +## Privacy Draft + +Current code audit: + +- No background network API usage found. +- App preferences are stored locally with `UserDefaults`. +- Tag/category data is stored locally under the user's Application Support area. +- The app scans installed applications locally to build the launcher index. +- Import/export only touches user-selected files. +- No analytics SDK, advertising SDK, tracking SDK, crash reporting SDK, or third-party tracking SDK is bundled. +- Help/support/release links may open externally in the user's browser only after user action. + +Privacy questionnaire starting point: + +- Data collected: `No`, assuming no analytics/crash reporting/network telemetry is added before submission. +- Tracking: `No`. +- Privacy policy URL: required. Publish `Legal/PRIVACY_POLICY.md` or its final edited version before submission. + +## Screenshot Plan + +Required Mac screenshot count and sizes: + +- Upload 1 to 10 screenshots. +- Use `.png`, `.jpg`, or `.jpeg`. +- Accepted Mac sizes are 16:10: `1280 x 800`, `1440 x 900`, `2560 x 1600`, `2880 x 1800`. +- Prefer `2880 x 1800` final exports. + +Suggested shots: + +1. App grid with several tag groups. +2. Quick Search with a sample query. +3. Settings showing appearance/layout controls. +4. Hotkey or Quick Search settings. +5. Optional import/export or tag editing view. + +Avoid screenshots that expose private installed apps, folders, account names, messages, or notifications. diff --git a/Release/AppStore-7.8.12-20260604.0105/APP_STORE_RELEASE_CHECKLIST.md b/Release/AppStore-7.8.12-20260604.0105/APP_STORE_RELEASE_CHECKLIST.md new file mode 100644 index 0000000..9595763 --- /dev/null +++ b/Release/AppStore-7.8.12-20260604.0105/APP_STORE_RELEASE_CHECKLIST.md @@ -0,0 +1,78 @@ +# TagLauncher 7.8.12 App Store 发布清单 + +核对日期:2026-06-04 HKT + +## 当前冻结状态 + +- 版本:`7.8.12` +- Build:`20260604.0105` +- Bundle ID:`com.taglauncher.app` +- 源码冻结提交:`be83948fab7b643634ede2403abdca27e6b45f29` +- 源码冻结 tag:`v7.8.12-build20260604.0105` +- Release 归档提交:`6478431` +- 分支:`codex/fix-quick-search-focus-routing` +- 本地可回滚 DMG:`Archive/TagLauncher-7.8.12-build20260604.0105.dmg` +- DMG SHA256:`f93702a912fb56a24a826386467b86e607e5b12b55fcc6dbe3b5a7224321be0a` + +## 已完成 + +- [x] 源码已提交并冻结到固定 commit。 +- [x] 已创建 release tag,且 tag 指向源码冻结 commit。 +- [x] `CHANGELOG.md`、`Info.plist`、DMG 文件名和 Release 文档的版本/build 一致。 +- [x] `APP_BUILD=20260604.0105 zsh ./build.sh` 通过。 +- [x] `zsh ./make_dmg.sh` 通过。 +- [x] `codesign --verify --deep --strict build/TagLauncher.app` 通过。 +- [x] `hdiutil verify build/TagLauncher-7.8.12-build20260604.0105.dmg` 通过。 +- [x] DMG 挂载检查通过,包含 `TagLauncher.app` 和 `Applications -> /Applications`。 +- [x] 完整窗口逻辑 QA 通过,结论为 `ALL WINDOW LOGIC QA PASSED`。 +- [x] App entitlements 文件存在,含 App Sandbox 和用户选择文件读写权限。 +- [x] App 图标 1024x1024 已归档。 +- [x] App Store Connect 文案、审核备注、截图计划、隐私政策草稿和支持页草稿已准备。 + +## 去 App Store Connect 前必须完成 + +- [ ] 登录 Apple Developer / App Store Connect,确认账号协议已接受。 +- [ ] 若准备收费,完成 Paid Apps Agreement、税务和银行信息。 +- [ ] 创建或确认 macOS App ID:`com.taglauncher.app`。 +- [ ] 启用 App Sandbox capability。 +- [ ] 安装 Mac App Store 上传所需证书和 profile: + - `Mac App Distribution` 或账号当前显示的等效 Apple Distribution 证书。 + - `Mac Installer Distribution` 证书,如果采用 signed `.pkg` 上传。 + - `Mac App Store Connect` provisioning profile,Bundle ID 为 `com.taglauncher.app`。 +- [ ] 重新运行 `security find-identity -v -p codesigning`,确认不再只有本地签名证书。 +- [ ] 发布隐私政策 URL 和支持 URL 到公网,并替换文档中的占位符。 +- [ ] 采集至少 1 张 Mac 截图,建议 5 张,尺寸使用 16:10:`2880 x 1800` 优先。 +- [ ] 按 `BUILD_SIGN_UPLOAD.md` 生成 App Store signed build 和上传包。 +- [ ] 对 App Store signed build 再跑一遍 QA,尤其是 sandbox 下扫描应用、启动应用、导入导出、全局快捷键、全屏/Split View。 +- [ ] 上传构建到 App Store Connect,等待处理完成。 +- [ ] 在 App Store Connect 选择构建并提交审核。 + +## App Store Connect 需要填写/上传的内容 + +- App record:平台 `macOS`、Name `TagLauncher`、Bundle ID `com.taglauncher.app`、SKU `taglauncher-macos`。 +- 版本:`7.8.12`。 +- 分类:`Utilities`。 +- 价格与销售区域:由账号策略决定;首次发布建议手动发布。 +- Product page metadata:名称、副标题、描述、关键词、What's New、Support URL、Privacy Policy URL、Copyright。 +- App Privacy:当前代码审计建议填写“不收集数据”,提交前必须按最终 signed build 复核。 +- 年龄分级、内容权利、出口合规、税务分类、App Review 联系方式。 +- App Review Notes:使用 `Review/APP_REVIEW_NOTES.md`。 +- Screenshots:使用 `Screenshots/SCREENSHOT_SHOT_LIST.md` 拍摄和导出。 +- Build:上传后选择 App Store Connect 处理完成的 `7.8.12 / 20260604.0105` 构建。 + +## 当前阻塞项 + +本机钥匙串目前只发现本地签名身份: + +- `VoiceSnap Local Code Signing` +- `PrivateVoice Local Code Signing` + +未发现 App Store 上传所需的 `Mac App Distribution` / `Mac Installer Distribution` 身份。因此我无法在本机完成最终 App Store signed `.pkg` 或上传动作。安装 Apple Developer 账号侧签名资产后,继续按 `BUILD_SIGN_UPLOAD.md` 执行。 + +## 官方依据 + +- Apple:创建 App Store Connect app record 前需先添加 app record,且 Account Holder 需签署最新协议。 +- Apple:上传构建可使用 Xcode、Swift Playgrounds、altool 或 Transporter,构建由 bundle ID、版本号和 build string 关联到 App Store Connect。 +- Apple:Mac App 截图必须上传 1 到 10 张,格式为 JPEG/JPG/PNG,Mac 尺寸为 16:10 的 `1280 x 800`、`1440 x 900`、`2560 x 1600` 或 `2880 x 1800`。 +- Apple:App Store 分发需要在 App Store Connect 提供数据处理实践;隐私政策 URL 对所有 App 必填。 +- Apple:macOS App 上传需要 `Mac App Store Connect` provisioning profile,App ID 必须匹配 Bundle ID。 diff --git a/Release/AppStore-7.8.12-20260604.0105/Assets/TagLauncher-AppIcon-1024.png b/Release/AppStore-7.8.12-20260604.0105/Assets/TagLauncher-AppIcon-1024.png new file mode 100644 index 0000000..5266150 --- /dev/null +++ b/Release/AppStore-7.8.12-20260604.0105/Assets/TagLauncher-AppIcon-1024.png Binary files differ diff --git a/Release/AppStore-7.8.12-20260604.0105/BUILD_SIGN_UPLOAD.md b/Release/AppStore-7.8.12-20260604.0105/BUILD_SIGN_UPLOAD.md new file mode 100644 index 0000000..5f85668 --- /dev/null +++ b/Release/AppStore-7.8.12-20260604.0105/BUILD_SIGN_UPLOAD.md @@ -0,0 +1,112 @@ +# Build, Sign, And Upload Notes + +## 当前冻结包 + +本地可回滚 DMG 已完成验证,但它不是 App Store Connect 的最终上传产物。 + +- Version: `7.8.12` +- Build: `20260604.0105` +- Source commit: `be83948fab7b643634ede2403abdca27e6b45f29` +- Release tag: `v7.8.12-build20260604.0105` +- Local DMG: `Archive/TagLauncher-7.8.12-build20260604.0105.dmg` +- Local DMG SHA256: `f93702a912fb56a24a826386467b86e607e5b12b55fcc6dbe3b5a7224321be0a` + +## 当前签名资产状态 + +本机当前 `security find-identity -v -p codesigning` 只发现: + +- `VoiceSnap Local Code Signing` +- `PrivateVoice Local Code Signing` + +缺少 App Store 上传通常需要的身份: + +- `Mac App Distribution` 或 Apple 账号当前显示的等效 distribution identity。 +- `Mac Installer Distribution`,如果要用 `productbuild` 生成 signed `.pkg`。 +- `Mac App Store Connect` provisioning profile for `com.taglauncher.app`。 + +## Sandbox 状态 + +`Apptag/TagLauncher.entitlements` 当前包含: + +- `com.apple.security.app-sandbox = true` +- `com.apple.security.files.user-selected.read-write = true` + +Mac App Store 分发需要 sandbox。请在最终 signed build 上复核 entitlements。 + +## 推荐上传路径 + +优先使用 Apple 官方图形化链路,降低手写签名参数出错概率: + +1. 在 Apple Developer 账号安装 Mac App Store distribution certificate 和 provisioning profile。 +2. 用 App Store signing 设置构建 `7.8.12 / 20260604.0105`。 +3. 用 Xcode Organizer 或 Transporter 上传。 +4. 等待 App Store Connect 处理完成。 +5. 在 App Store Connect 的 `7.8.12` 版本里选择处理完成的 build。 + +## CLI 命令形状 + +证书名称取决于你的 Apple Developer 账号,必须使用 `security find-identity -v -p codesigning` 里显示的真实名称。 + +```bash +cd /Users/ar/Projects/Taglauncher + +APP_STORE=1 \ +CODESIGN_IDENTITY="Apple Distribution: <TEAM NAME> (<TEAMID>)" \ +APP_BUILD=20260604.0105 \ +zsh ./build.sh + +codesign --verify --deep --strict --verbose=2 build/TagLauncher.app +codesign -d --entitlements :- build/TagLauncher.app +/usr/libexec/PlistBuddy -c 'Print :CFBundleShortVersionString' build/TagLauncher.app/Contents/Info.plist +/usr/libexec/PlistBuddy -c 'Print :CFBundleVersion' build/TagLauncher.app/Contents/Info.plist +``` + +如果采用 `.pkg` 上传: + +```bash +productbuild \ + --component build/TagLauncher.app /Applications \ + --sign "Mac Installer Distribution: <TEAM NAME> (<TEAMID>)" \ + build/TagLauncher-7.8.12-build20260604.0105-AppStore.pkg + +xcrun altool --validate-app \ + --type macos \ + --file build/TagLauncher-7.8.12-build20260604.0105-AppStore.pkg \ + --username "<APPLE_ID>" \ + --password "<APP_SPECIFIC_PASSWORD>" + +xcrun altool --upload-app \ + --type macos \ + --file build/TagLauncher-7.8.12-build20260604.0105-AppStore.pkg \ + --username "<APPLE_ID>" \ + --password "<APP_SPECIFIC_PASSWORD>" +``` + +也可以直接用 Transporter 打开上传包完成上传。 + +## 上传前验证 + +在最终 App Store signed build 上执行: + +```bash +codesign --verify --deep --strict --verbose=2 build/TagLauncher.app +codesign -d --entitlements :- build/TagLauncher.app +/usr/libexec/PlistBuddy -c 'Print :CFBundleShortVersionString' build/TagLauncher.app/Contents/Info.plist +/usr/libexec/PlistBuddy -c 'Print :CFBundleVersion' build/TagLauncher.app/Contents/Info.plist +bash Scripts/window_logic_qa.sh +``` + +重点复测: + +- Sandbox 下扫描已安装应用。 +- Sandbox 下通过 `NSWorkspace` 启动应用。 +- 用户选择文件权限下的导入/导出。 +- 全局快捷键。 +- AppGrid、Quick Search、Settings 在全屏和 Split View 下的窗口层级。 +- Quick Search-only 模式刚打开后不被过期鼠标 dismiss 关闭。 +- Login-at-launch 设置在 sandbox build 中的行为。 + +## Build 编号规则 + +- 如果上传失败并需要重新打包上传,应递增 `CFBundleVersion`,使用新的 `YYYYMMDD.HHMM`。 +- 如果递增 build,会产生一个新的发布冻结点,需要更新 `Info.plist`、`CHANGELOG.md`、Release 文档、manifest、tag 和上传资料。 diff --git a/Release/AppStore-7.8.12-20260604.0105/FIRST_TIME_MAC_APP_STORE_TODO.md b/Release/AppStore-7.8.12-20260604.0105/FIRST_TIME_MAC_APP_STORE_TODO.md new file mode 100644 index 0000000..ae8c961 --- /dev/null +++ b/Release/AppStore-7.8.12-20260604.0105/FIRST_TIME_MAC_APP_STORE_TODO.md @@ -0,0 +1,88 @@ +# First-Time Mac App Store TODO + +用于从 Apple Developer 账号发布 TagLauncher `7.8.12`。 + +## 0. App Store Connect 前置项 + +- [ ] Apple Developer Program 会员有效。 +- [ ] 使用 Account Holder / Admin / App Manager 权限登录 App Store Connect。 +- [ ] Account Holder 已在 Business 区域接受最新协议。 +- [ ] 如果收费,完成 Paid Apps Agreement、税务、银行信息。 +- [ ] 决定价格、销售国家/地区和是否手动发布。 +- [ ] 建议首次发布选择 `Manual release after approval`。 + +## 1. App ID、证书和 Provisioning + +- [ ] 创建或确认 explicit App ID: + - Platform: `macOS` + - Bundle ID: `com.taglauncher.app` +- [ ] 启用 App Sandbox capability。 +- [ ] 创建/下载 Mac App Store distribution certificate,或使用 Xcode/cloud-managed signing。 +- [ ] 如果上传 signed `.pkg`,创建/下载 Mac Installer Distribution certificate。 +- [ ] 创建/下载 `Mac App Store Connect` provisioning profile for `com.taglauncher.app`。 +- [ ] 在发布 Mac 上安装证书和 profile。 +- [ ] 运行 `security find-identity -v -p codesigning` 确认真实 distribution identity 名称。 + +## 2. App Store Connect App Record + +- [ ] 创建新 app record。 +- [ ] Platform: `macOS`。 +- [ ] Name: `TagLauncher`。 +- [ ] Primary language: `English (U.S.)` 或 `Simplified Chinese`。 +- [ ] Bundle ID: `com.taglauncher.app`。 +- [ ] SKU: `taglauncher-macos`。 +- [ ] User Access: `Full Access`,除非团队需要限制访问。 +- [ ] Category: `Utilities`。 +- [ ] Version: `7.8.12`。 + +## 3. Product Page Metadata + +- [ ] 填写 app name、subtitle、description、keywords、promotional text。 +- [ ] 填写 support URL。 +- [ ] 填写 privacy policy URL。 +- [ ] 填写 copyright。 +- [ ] 完成年龄分级问卷。 +- [ ] 完成内容权利声明。 +- [ ] 完成加密出口合规问题。 +- [ ] 完成 app privacy 问卷。 +- [ ] 完成税务分类。 +- [ ] 填写 App Review 联系方式。 +- [ ] 填写 `Review/APP_REVIEW_NOTES.md` 中的审核备注。 + +## 4. Screenshots + +- [ ] 拍摄至少 1 张 Mac screenshot,建议 5 张。 +- [ ] 使用 16:10 PNG/JPG/JPEG。 +- [ ] 推荐导出为 `2880 x 1800`。 +- [ ] 截图覆盖 App Grid、Quick Search、Settings。 +- [ ] 确认截图没有私人应用、文件、通知、账号信息。 +- [ ] 将原图放入 `Screenshots/raw/`,最终上传图放入 `Screenshots/AppStore/`。 + +## 5. Build And Upload + +- [ ] 按 `BUILD_SIGN_UPLOAD.md` 生成 App Store signed build。 +- [ ] 验证 `CFBundleShortVersionString = 7.8.12`。 +- [ ] 验证 `CFBundleVersion = 20260604.0105`,如果上传重试需要重新打包则递增 build。 +- [ ] 验证 sandbox entitlements 存在。 +- [ ] 对 signed build 运行窗口 QA。 +- [ ] 通过 Transporter、Xcode Organizer 或 `altool` 上传。 +- [ ] 等待 App Store Connect 处理完成邮件。 +- [ ] 在 `7.8.12` version record 选择处理完成的 build。 + +## 6. Submit For Review + +- [ ] 确认 App Store Connect 所有 required fields 已完成。 +- [ ] 确认 build 已选择。 +- [ ] 选择 release option:建议 `Manual release after approval`。 +- [ ] 点击 `Add for Review`。 +- [ ] 进入 Draft Submission 后点击 `Submit for Review`。 +- [ ] 记录 review status。 +- [ ] 如果 rejected,把 reviewer message 保存到本 release 目录再修复。 + +## 7. Approval 后 + +- [ ] 记录最终提交 build number 和 App Store Connect build ID。 +- [ ] 归档最终上传包到 `Upload/`。 +- [ ] 归档最终截图、隐私 URL、支持 URL、审核备注到 `Submitted/`。 +- [ ] 手动 release。 +- [ ] 发布后做 App Store 安装 smoke test。 diff --git a/Release/AppStore-7.8.12-20260604.0105/Legal/PRIVACY_POLICY.md b/Release/AppStore-7.8.12-20260604.0105/Legal/PRIVACY_POLICY.md new file mode 100644 index 0000000..e5f9caa --- /dev/null +++ b/Release/AppStore-7.8.12-20260604.0105/Legal/PRIVACY_POLICY.md @@ -0,0 +1,75 @@ +# Privacy Policy for TagLauncher + +Effective date: June 4, 2026 + +Developer: `[YOUR NAME OR COMPANY NAME]` + +Contact: `[PRIVACY OR SUPPORT EMAIL]` + +This Privacy Policy explains how TagLauncher handles information. + +## Summary + +TagLauncher is designed as a local macOS utility. It does not include analytics, advertising SDKs, tracking SDKs, crash reporting SDKs, or telemetry. TagLauncher does not sell personal information and does not track users across apps or websites. + +## Information TagLauncher Handles Locally + +TagLauncher may access or store the following information on your Mac: + +- A local list of installed applications, used to build the app launcher grid and search index. +- App names, bundle identifiers, icons, tags, notes, category layout, display preferences, and keyboard shortcut settings. +- Imported or exported category/layout files that you explicitly choose through macOS file panels. + +This information is used only to provide TagLauncher's app organization, launch, search, import/export, and settings features. + +## Data Collection + +TagLauncher does not collect personal data from you or transmit personal data to the developer. + +TagLauncher does not use: + +- Analytics services. +- Advertising networks. +- Third-party tracking SDKs. +- Crash reporting SDKs. +- Remote telemetry. +- User behavior profiling. + +## Network Access + +TagLauncher does not require a network service to organize or launch your local apps. + +If you open external links such as Help, Support, Privacy Policy, or release links, macOS may open those links in your web browser. Those external websites are subject to their own privacy practices. + +## Local Storage + +TagLauncher stores preferences and app organization data locally on your Mac, using standard macOS storage such as UserDefaults and the user's Application Support folder. + +You can remove local TagLauncher data by deleting the app and its related local support files, subject to normal macOS behavior. + +## User-Selected Files + +TagLauncher may read from or write to files only when you choose import or export locations through macOS file panels. TagLauncher uses those files only for the import/export operation you requested. + +## App Store Privacy + +Based on the current TagLauncher build, the intended App Store privacy response is: + +- Data collected: No. +- Tracking: No. + +These answers should be reviewed again before submission if new features, network services, analytics, crash reporting, support integrations, or third-party SDKs are added. + +## Children's Privacy + +TagLauncher is a general-purpose macOS utility and is not directed to children. TagLauncher does not knowingly collect personal information from children. + +## Changes To This Policy + +This policy may be updated when TagLauncher changes. The effective date at the top of this page indicates the latest version. + +## Contact + +If you have questions about this Privacy Policy or TagLauncher privacy behavior, contact: + +`[PRIVACY OR SUPPORT EMAIL]` diff --git a/Release/AppStore-7.8.12-20260604.0105/Legal/PRIVACY_POLICY.zh-Hans.md b/Release/AppStore-7.8.12-20260604.0105/Legal/PRIVACY_POLICY.zh-Hans.md new file mode 100644 index 0000000..09d0e6e --- /dev/null +++ b/Release/AppStore-7.8.12-20260604.0105/Legal/PRIVACY_POLICY.zh-Hans.md @@ -0,0 +1,75 @@ +# TagLauncher 隐私政策 + +生效日期:2026 年 6 月 4 日 + +开发者:`[你的姓名或公司名称]` + +联系邮箱:`[隐私或支持邮箱]` + +本隐私政策说明 TagLauncher 如何处理信息。 + +## 摘要 + +TagLauncher 是一个本地运行的 macOS 工具。当前版本不包含分析 SDK、广告 SDK、追踪 SDK、崩溃上报 SDK 或遥测功能。TagLauncher 不出售个人信息,也不会跨 App 或网站追踪用户。 + +## TagLauncher 在本地处理的信息 + +TagLauncher 可能会在你的 Mac 上访问或保存以下信息: + +- 本机已安装应用列表,用于生成应用启动网格和搜索索引。 +- 应用名称、Bundle ID、图标、标签、备注、分类布局、显示偏好和快捷键设置。 +- 你通过 macOS 文件选择面板主动选择导入或导出的分类/布局文件。 + +这些信息只用于提供 TagLauncher 的应用整理、启动、搜索、导入导出和设置功能。 + +## 数据收集 + +TagLauncher 不会从你这里收集个人数据,也不会把个人数据发送给开发者。 + +TagLauncher 不使用: + +- 分析服务。 +- 广告网络。 +- 第三方追踪 SDK。 +- 崩溃上报 SDK。 +- 远程遥测。 +- 用户行为画像。 + +## 网络访问 + +TagLauncher 不需要网络服务即可整理和启动本地应用。 + +如果你打开帮助、支持、隐私政策或发布说明等外部链接,macOS 可能会在浏览器中打开这些网页。外部网站适用其各自的隐私规则。 + +## 本地存储 + +TagLauncher 使用标准 macOS 存储方式在本机保存偏好和应用整理数据,例如 UserDefaults 和用户的 Application Support 文件夹。 + +你可以按照 macOS 的常规方式删除 App 及其相关本地支持文件,以移除 TagLauncher 的本地数据。 + +## 用户选择的文件 + +只有当你通过 macOS 文件选择面板主动选择导入或导出位置时,TagLauncher 才会读取或写入相关文件。TagLauncher 只会将这些文件用于你请求的导入或导出操作。 + +## App Store 隐私信息 + +基于当前 TagLauncher 构建,计划填写的 App Store 隐私信息为: + +- 收集的数据:否。 +- 追踪:否。 + +如果后续加入网络服务、分析、崩溃上报、支持系统或第三方 SDK,提交前需要重新审核这些答案。 + +## 儿童隐私 + +TagLauncher 是通用 macOS 工具,并非面向儿童。TagLauncher 不会有意收集儿童的个人信息。 + +## 政策更新 + +当 TagLauncher 发生变化时,本政策可能会更新。页面顶部的生效日期表示当前版本。 + +## 联系方式 + +如果你对本隐私政策或 TagLauncher 的隐私行为有问题,请联系: + +`[隐私或支持邮箱]` diff --git a/Release/AppStore-7.8.12-20260604.0105/README.md b/Release/AppStore-7.8.12-20260604.0105/README.md index 4c3363b..2d95bbc 100644 --- a/Release/AppStore-7.8.12-20260604.0105/README.md +++ b/Release/AppStore-7.8.12-20260604.0105/README.md @@ -18,6 +18,20 @@ - SHA256:f93702a912fb56a24a826386467b86e607e5b12b55fcc6dbe3b5a7224321be0a - 大小:5991391 bytes +## App Store 发布资料 + +- 发布清单:`APP_STORE_RELEASE_CHECKLIST.md` +- 资产清单:`APP_STORE_ASSET_INVENTORY.md` +- App Store Connect 文案草稿:`APP_STORE_CONNECT_METADATA.md` +- 签名、打包和上传说明:`BUILD_SIGN_UPLOAD.md` +- 审核备注:`Review/APP_REVIEW_NOTES.md` +- 隐私政策草稿:`Legal/PRIVACY_POLICY.md`、`Legal/PRIVACY_POLICY.zh-Hans.md` +- 支持页草稿:`Support/SUPPORT.md` +- 截图计划:`Screenshots/SCREENSHOT_SHOT_LIST.md` +- App 图标:`Assets/TagLauncher-AppIcon-1024.png` + +注意:本目录内 DMG 是本地可回滚候选包,不是 App Store Connect 的最终上传产物。上传 App Store 仍需要 Apple Developer 账号侧的 Mac App Store 签名证书、Provisioning Profile,并按 `BUILD_SIGN_UPLOAD.md` 生成上传包。 + ## 本版本变更 - 修复 Quick Search-only 模式刚打开后可能被过期鼠标关闭事件立即关掉的问题。 diff --git a/Release/AppStore-7.8.12-20260604.0105/Review/APP_REVIEW_NOTES.md b/Release/AppStore-7.8.12-20260604.0105/Review/APP_REVIEW_NOTES.md new file mode 100644 index 0000000..b71f63b --- /dev/null +++ b/Release/AppStore-7.8.12-20260604.0105/Review/APP_REVIEW_NOTES.md @@ -0,0 +1,35 @@ +# App Review Notes + +Use this text as the starting point for App Review notes in App Store Connect. + +## Review Notes Draft + +TagLauncher is a macOS utility for organizing installed applications into visual tag groups and launching them from a keyboard-accessible app grid. + +Primary review flow: + +1. Launch TagLauncher. +2. Press `Option-Shift-Space` to show the app grid. +3. Press `Space` while the app grid is visible to open Quick Search. +4. Press `Escape` once to close Quick Search. +5. Press `Escape` again to close the app grid. +6. Open Settings from the menu bar or with `Command-Comma`. + +Expected behavior: + +- The app grid intentionally appears above normal and fullscreen app windows. +- In fullscreen and Split View Spaces, AppGrid, Quick Search, and Settings should remain in the current Space instead of switching to another Space. +- While the app grid is visible, TagLauncher may hide the Dock depending on user settings and shows TagLauncher's menu bar. +- The system Force Quit window remains above TagLauncher. +- Import/export uses standard macOS file panels. +- In sandboxed App Store builds, login-at-launch may be disabled if the LaunchAgent approach is unavailable. + +No demo account is required. + +## Local QA Evidence + +- QA evidence file: `QA_RELEASE_EVIDENCE.md` +- Final freeze: `7.8.12 / 20260604.0105` +- Frozen source commit: `be83948fab7b643634ede2403abdca27e6b45f29` +- Frozen tag: `v7.8.12-build20260604.0105` +- Full window behavior QA passed on the release line, including fullscreen/Split View, Quick Search, Settings, file panels, Force Quit layering, screen following, and scroll-after-keyboard routing. diff --git a/Release/AppStore-7.8.12-20260604.0105/Screenshots/AppStore/.gitkeep b/Release/AppStore-7.8.12-20260604.0105/Screenshots/AppStore/.gitkeep new file mode 100644 index 0000000..79e4cfc --- /dev/null +++ b/Release/AppStore-7.8.12-20260604.0105/Screenshots/AppStore/.gitkeep @@ -0,0 +1 @@ +placeholder for App Store-ready screenshots diff --git a/Release/AppStore-7.8.12-20260604.0105/Screenshots/SCREENSHOT_SHOT_LIST.md b/Release/AppStore-7.8.12-20260604.0105/Screenshots/SCREENSHOT_SHOT_LIST.md new file mode 100644 index 0000000..aafa36c --- /dev/null +++ b/Release/AppStore-7.8.12-20260604.0105/Screenshots/SCREENSHOT_SHOT_LIST.md @@ -0,0 +1,59 @@ +# Screenshot Shot List + +Apple allows one to ten Mac screenshots. Use `.png`, `.jpg`, or `.jpeg` images. Use a 16:10 Mac size: + +- `2880 x 1800` preferred +- `2560 x 1600` +- `1440 x 900` +- `1280 x 800` + +Put original captures in `Screenshots/raw/`. Put final App Store-ready files in `Screenshots/AppStore/`. + +## Recommended Final Set + +Use five screenshots if possible. + +1. `01-app-grid.png` + - Show the main TagLauncher app grid. + - Make sure several tag groups are visible. + - Avoid private app names if needed. + - This is the hero screenshot. + +2. `02-quick-search.png` + - Open AppGrid, press Space, and show Quick Search with a sample query. + - Prefer a query that returns clean, recognizable results. + - Keep AppGrid visible behind Quick Search. + +3. `03-settings-appearance.png` + - Show Settings with appearance/layout controls. + - This demonstrates customization. + +4. `04-hotkeys-or-search-settings.png` + - Show the hotkey or Quick Search settings area. + - This demonstrates the global launcher workflow. + +5. `05-import-export-or-tag-editing.png` + - Show import/export, tag editing, or a clean organized multi-tag grid. + - This demonstrates data portability or organization depth. + +## Capture Notes + +- Hide unrelated desktop clutter and notifications. +- Use one language consistently unless intentionally localizing. +- Avoid showing sensitive installed apps, private folders, account names, messages, or internal documents. +- Do not add marketing text into screenshots unless you later create a designed promotional frame. +- If raw screenshots are larger than accepted App Store sizes, export or resize final files to `2880 x 1800`. + +## Resize Command + +After placing raw screenshots in `Screenshots/raw/`, run this from the repo root: + +```bash +mkdir -p Release/AppStore-7.8.12-20260604.0105/Screenshots/AppStore +for file in Release/AppStore-7.8.12-20260604.0105/Screenshots/raw/*.png; do + name="$(basename "$file")" + sips -z 1800 2880 "$file" --out "Release/AppStore-7.8.12-20260604.0105/Screenshots/AppStore/$name" +done +``` + +Review each resized file before uploading. If a screenshot looks stretched or cropped poorly, recapture at a cleaner 16:10 screen size instead of forcing it. diff --git a/Release/AppStore-7.8.12-20260604.0105/Screenshots/raw/.gitkeep b/Release/AppStore-7.8.12-20260604.0105/Screenshots/raw/.gitkeep new file mode 100644 index 0000000..4fa004a --- /dev/null +++ b/Release/AppStore-7.8.12-20260604.0105/Screenshots/raw/.gitkeep @@ -0,0 +1 @@ +placeholder for raw screenshots diff --git a/Release/AppStore-7.8.12-20260604.0105/Submitted/.gitkeep b/Release/AppStore-7.8.12-20260604.0105/Submitted/.gitkeep new file mode 100644 index 0000000..8229f42 --- /dev/null +++ b/Release/AppStore-7.8.12-20260604.0105/Submitted/.gitkeep @@ -0,0 +1 @@ +placeholder for final submitted metadata, screenshots, and review records diff --git a/Release/AppStore-7.8.12-20260604.0105/Support/SUPPORT.md b/Release/AppStore-7.8.12-20260604.0105/Support/SUPPORT.md new file mode 100644 index 0000000..43bcd56 --- /dev/null +++ b/Release/AppStore-7.8.12-20260604.0105/Support/SUPPORT.md @@ -0,0 +1,52 @@ +# TagLauncher Support + +For support, contact: + +`[SUPPORT EMAIL]` + +## Basic Usage + +- Press `Option-Shift-Space` to show the TagLauncher app grid. +- Press `Space` while the app grid is visible to open Quick Search. +- Press `Escape` once to close Quick Search. +- Press `Escape` again to close the app grid. +- Open Settings from the menu bar or with `Command-Comma`. + +## Common Questions + +### TagLauncher does not open with the shortcut + +Another app, input method, or macOS shortcut may already be using the same key combination. Open TagLauncher settings and check the shortcut status. + +### Quick Search does not appear + +Open the app grid first, then press `Space`. If a modal dialog or editing state is active, close it and try again. + +### The app grid appears on the wrong display + +TagLauncher is designed to follow the current pointer display. Move the pointer to the target display and open the app grid again. + +### Import or export cannot access a file + +Use the macOS file panel shown by TagLauncher. App Store builds use sandboxed, user-selected file access. + +### Login at launch is unavailable + +In App Store sandboxed builds, login-at-launch support may be unavailable if the old LaunchAgent approach is disabled. This is expected until an App Store-safe login item implementation is added. + +## Privacy + +TagLauncher stores app organization data locally on your Mac and does not include analytics, advertising SDKs, tracking SDKs, crash reporting SDKs, or telemetry. + +Privacy Policy: + +`[PUBLIC PRIVACY POLICY URL]` + +## App Version + +When contacting support, include: + +- TagLauncher version. +- macOS version. +- A short description of what you expected and what happened. +- Screenshots or screen recordings if they help explain the issue. diff --git a/Release/AppStore-7.8.12-20260604.0105/Upload/.gitkeep b/Release/AppStore-7.8.12-20260604.0105/Upload/.gitkeep new file mode 100644 index 0000000..b551d82 --- /dev/null +++ b/Release/AppStore-7.8.12-20260604.0105/Upload/.gitkeep @@ -0,0 +1 @@ +placeholder for final App Store upload artifacts -- Gitblit v1.9.3