Add 7.8.1 App Store release pack
| New file |
| | |
| | | # App Store Asset Inventory |
| | | |
| | | This release pack freezes TagLauncher `7.8.1` build `20260529.1235`. |
| | | |
| | | Use this file as the submission asset checklist. Anything marked `Needs user input` must be completed before submitting in App Store Connect. |
| | | |
| | | ## Local QA Build |
| | | |
| | | - Version: `7.8.1` |
| | | - Local QA build: `20260529.1235` |
| | | - Source ref: `appstore-7.8.1-20260529.1235` |
| | | - Local QA DMG: `Archive/TagLauncher-7.8.1-20260529.1235-local-QA.dmg` |
| | | - DMG SHA-256: `72b62d28529ee41e4ae22c972ab14b81b93788d011f0e64df6e941b39a50c1a3` |
| | | - App binary SHA-256: `ad08345b3ab64fa85dc6025e076721dc8f6713f17c96e21f08dd0a86436636f4` |
| | | |
| | | ## Metadata |
| | | |
| | | - Draft App Store metadata: `APP_STORE_CONNECT_METADATA.md` |
| | | - First-time submission checklist: `FIRST_TIME_MAC_APP_STORE_TODO.md` |
| | | - Build/sign/upload instructions: `BUILD_SIGN_UPLOAD.md` |
| | | - QA and release evidence: `QA_RELEASE_EVIDENCE.md` |
| | | - Changelog source: `../../CHANGELOG.md` |
| | | |
| | | Status: ready as draft, but App Store Connect fields must still be reviewed manually. |
| | | |
| | | ## Screenshots |
| | | |
| | | - Screenshot instructions: `Screenshots/SCREENSHOT_SHOT_LIST.md` |
| | | - Raw screenshot staging folder: `Screenshots/raw/` |
| | | - App Store-ready screenshot folder: `Screenshots/AppStore/` |
| | | |
| | | Status: needs user screenshots. |
| | | |
| | | Apple accepts one to ten screenshots for Mac apps. Mac screenshots must use a 16:10 size such as `2880 x 1800`, `2560 x 1600`, `1440 x 900`, or `1280 x 800`. |
| | | |
| | | Recommended final screenshot count: 5. |
| | | |
| | | ## App Icon |
| | | |
| | | - App icon source copy: `Assets/TagLauncher-AppIcon-1024.png` |
| | | |
| | | Status: present. |
| | | |
| | | ## Legal And URLs |
| | | |
| | | - Privacy policy draft: `Legal/PRIVACY_POLICY.md` |
| | | - Simplified Chinese privacy policy draft: `Legal/PRIVACY_POLICY.zh-Hans.md` |
| | | - Support page draft: `Support/SUPPORT.md` |
| | | - Public URL publication guide: `Support/GITHUB_PAGES_PUBLICATION_GUIDE.md` |
| | | |
| | | Status: content drafted; needs user identity/contact fields and public URLs. |
| | | |
| | | Needs user input: |
| | | |
| | | - Developer or company display name. |
| | | - Support email. |
| | | - Privacy contact email, if different. |
| | | - Public privacy policy URL. |
| | | - Public support URL. |
| | | - Copyright holder. |
| | | |
| | | ## App Review |
| | | |
| | | - App Review notes draft: `Review/APP_REVIEW_NOTES.md` |
| | | - Manual QA notes area: `Review/` |
| | | |
| | | Status: ready as draft. |
| | | |
| | | ## Upload Artifacts |
| | | |
| | | - App Store upload staging folder: `Upload/` |
| | | - Submitted artifact archive folder: `Submitted/` |
| | | |
| | | Status: waiting for App Store signing assets and final uploaded build. |
| | | |
| | | The local DMG is not an App Store upload artifact. App Store upload still requires Mac App Distribution signing, Mac Installer Distribution signing if packaging a `.pkg`, and a Mac App Store provisioning profile for `com.taglauncher.app`. |
| New file |
| | |
| | | # App Store Connect Metadata Draft |
| | | |
| | | These are draft values for the first Mac App Store submission. Edit in App Store Connect before submission. |
| | | |
| | | Frozen local QA source for this metadata: |
| | | |
| | | - Version: `7.8.1` |
| | | - Build: `20260529.1235` |
| | | - Source ref: `appstore-7.8.1-20260529.1235` |
| | | - Release pack: `Release/AppStore-7.8.1-20260529.1235` |
| | | |
| | | ## App Information |
| | | |
| | | - Name: `TagLauncher` |
| | | - Bundle ID: `com.taglauncher.app` |
| | | - SKU: `taglauncher-macos` |
| | | - Category: `Utilities` |
| | | - Version: `7.8.1` |
| | | - Distribution method: Public |
| | | - 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.1: |
| | | |
| | | - Improved tag navigation with AppKit-backed rendering and drag reordering. |
| | | - Improved Quick Search with an AppKit-backed result list and independent panel presentation. |
| | | - Improved fullscreen and Split View behavior so AppGrid, Quick Search, and Settings stay in the current Space. |
| | | - Fixed duplicate Dock icons when repeatedly showing TagLauncher. |
| | | - Fixed App icon transparency so rounded corners render correctly. |
| | | - Improved AppGrid keyboard routing after scrolling, so Space and Escape stay responsive. |
| | | - Reduced AppGrid scroll churn for smoother browsing. |
| | | - Changed the default icon size for new installs to 64. |
| | | - Added stronger release QA coverage for Mac window behavior. |
| | | |
| | | ## App Review Notes Draft |
| | | |
| | | TagLauncher is a macOS app launcher. |
| | | |
| | | Primary review path: |
| | | |
| | | 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, then Escape again to close the app grid. |
| | | 5. Open Preferences from the menu bar or Command-Comma to inspect settings. |
| | | |
| | | Expected behavior: |
| | | |
| | | - The app grid is intentionally displayed above normal and fullscreen app windows. |
| | | - In Split View/fullscreen Spaces, Quick Search and Settings are expected to appear above the app grid without switching Spaces. |
| | | - While the app grid is visible, TagLauncher becomes the foreground app so its menu bar is visible and the Dock is hidden. |
| | | - The system Force Quit window remains above TagLauncher. |
| | | - Import/export uses standard file panels. |
| | | - Login-at-launch is disabled in sandboxed App Store builds if the LaunchAgent approach is unavailable. |
| | | |
| | | ## Privacy Draft |
| | | |
| | | Current code audit: |
| | | |
| | | - No 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, or third-party tracking SDK is bundled. |
| | | |
| | | Privacy questionnaire starting point: |
| | | |
| | | - Data collected: likely `No`, assuming no analytics/crash reporting/network telemetry is added before submission. |
| | | - Tracking: `No`. |
| | | - Privacy policy URL: required for macOS apps. Publish this before submission. |
| | | |
| | | Do not submit until these answers are reviewed against the exact App Store-signed build. |
| | | |
| | | ## Screenshot Plan |
| | | |
| | | Required Mac screenshot sizes include 16:10 images such as: |
| | | |
| | | - `2880 x 1800` |
| | | - `2560 x 1600` |
| | | - `1440 x 900` |
| | | - `1280 x 800` |
| | | |
| | | Suggested shots: |
| | | |
| | | 1. App grid with several tag groups. |
| | | 2. Quick Search with a sample query. |
| | | 3. Settings showing appearance/hotkey controls. |
| | | 4. Optional import/export or tag editing view. |
| | | |
| | | Avoid screenshots that expose private installed apps if that matters for marketing. |
| New file |
| | |
| | | # Build, Sign, And Upload Notes |
| | | |
| | | ## Current Local Build |
| | | |
| | | The local QA build is suitable for verification and direct local testing, but it is not an App Store upload artifact. |
| | | |
| | | - Local QA build: `20260529.1235` |
| | | - Source ref: `appstore-7.8.1-20260529.1235` |
| | | - DMG SHA-256: `72b62d28529ee41e4ae22c972ab14b81b93788d011f0e64df6e941b39a50c1a3` |
| | | - App binary SHA-256: `ad08345b3ab64fa85dc6025e076721dc8f6713f17c96e21f08dd0a86436636f4` |
| | | - Local build command: `bash build.sh` |
| | | - Local DMG command: `bash make_dmg.sh` |
| | | - App path: `build/TagLauncher.app` |
| | | - DMG path: `build/TagLauncher.dmg` |
| | | - Local signing: ad-hoc unless `CODESIGN_IDENTITY` is provided. |
| | | |
| | | ## Current Signing Inventory |
| | | |
| | | Current `security find-identity -v -p codesigning` only reports: |
| | | |
| | | - `VoiceSnap Local Code Signing` |
| | | |
| | | Missing for App Store upload: |
| | | |
| | | - `Mac App Distribution` |
| | | - `Mac Installer Distribution` |
| | | - Mac App Store provisioning profile for `com.taglauncher.app` |
| | | |
| | | ## Sandbox Status |
| | | |
| | | `Apptag/TagLauncher.entitlements` currently includes: |
| | | |
| | | - `com.apple.security.app-sandbox = true` |
| | | - `com.apple.security.files.user-selected.read-write = true` |
| | | |
| | | Apple requires App Sandbox for Mac App Store distribution. |
| | | |
| | | ## Recommended Upload Path |
| | | |
| | | The safest first submission path is: |
| | | |
| | | 1. Install Mac App Store signing assets from the Apple Developer account. |
| | | 2. Build with sandbox entitlements and App Store distribution signing. |
| | | 3. Package as an App Store-ready upload through Xcode Organizer, Transporter, or `altool`. |
| | | 4. Upload to App Store Connect. |
| | | 5. Wait for processing, then attach the processed build to version `7.8.1`. |
| | | |
| | | ## Manual CLI Shape |
| | | |
| | | Exact commands depend on the installed certificate/profile names. After installing the correct identities, the shape is: |
| | | |
| | | ```bash |
| | | cd /Users/ar/Projects/Taglauncher |
| | | |
| | | APP_STORE=1 \ |
| | | CODESIGN_IDENTITY="3rd Party Mac Developer Application: <TEAM NAME> (<TEAMID>)" \ |
| | | APP_BUILD=20260529.1235 \ |
| | | bash build.sh |
| | | |
| | | productbuild \ |
| | | --component build/TagLauncher.app /Applications \ |
| | | --sign "3rd Party Mac Developer Installer: <TEAM NAME> (<TEAMID>)" \ |
| | | build/TagLauncher-AppStore.pkg |
| | | |
| | | xcrun altool --upload-app \ |
| | | --type macos \ |
| | | --file build/TagLauncher-AppStore.pkg \ |
| | | --username "<APPLE_ID>" \ |
| | | --password "<APP_SPECIFIC_PASSWORD>" |
| | | ``` |
| | | |
| | | Notes: |
| | | |
| | | - Newer accounts may show certificate names as `Apple Distribution` / `Mac Installer Distribution`; use the exact identity shown by `security find-identity`. |
| | | - If using Xcode-managed/cloud-managed signing, prefer Xcode/Transporter over hand-written signing commands. |
| | | - Increment `APP_BUILD` for every failed upload retry. |
| | | - Keep the direct-distribution DMG separate from App Store upload packages. |
| | | |
| | | ## Pre-Upload Verification |
| | | |
| | | Run these before uploading: |
| | | |
| | | ```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 |
| | | CLICK_TOOL=/opt/homebrew/bin/cliclick bash Scripts/window_logic_qa.sh |
| | | ``` |
| | | |
| | | ## App Store-Specific Risks To Re-Test |
| | | |
| | | - Sandbox behavior for scanning installed apps. |
| | | - Sandbox behavior for launching apps via `NSWorkspace`. |
| | | - Import/export file access with user-selected file entitlement. |
| | | - Global hotkey behavior. |
| | | - Fullscreen Space and Split View overlay behavior, including Quick Search and Settings opened from the app grid. |
| | | - Login-at-launch setting: current code disables LaunchAgent support in sandboxed builds. |
| New file |
| | |
| | | # First-Time Mac App Store TODO |
| | | |
| | | Use this as the working checklist when publishing TagLauncher from the Apple Developer account. |
| | | |
| | | Frozen release pack: |
| | | |
| | | - Version: `7.8.1` |
| | | - Local QA build: `20260529.1235` |
| | | - Source ref: `appstore-7.8.1-20260529.1235` |
| | | - Release folder: `Release/AppStore-7.8.1-20260529.1235` |
| | | |
| | | ## 0. Before Touching App Store Connect |
| | | |
| | | - [ ] Confirm Apple Developer Program membership is active. |
| | | - [ ] Sign in to https://appstoreconnect.apple.com with Account Holder/Admin/App Manager access. |
| | | - [ ] Accept all pending agreements in App Store Connect Business. |
| | | - [ ] If the app will be paid, complete Paid Apps Agreement, tax, and banking. |
| | | - [ ] Decide release type: public App Store listing, not private/custom distribution. |
| | | - [ ] Decide release timing: manual release after approval is recommended for first launch. |
| | | |
| | | ## 1. App ID, Certificates, And Provisioning |
| | | |
| | | - [ ] In Apple Developer Certificates, Identifiers & Profiles, create or confirm explicit App ID: |
| | | - Bundle ID: `com.taglauncher.app` |
| | | - Platform: macOS |
| | | - [ ] Confirm App Sandbox capability is enabled. |
| | | - [ ] Create/download `Mac App Distribution` certificate or use Xcode/cloud-managed signing. |
| | | - [ ] Create/download `Mac Installer Distribution` certificate if uploading a signed `.pkg`. |
| | | - [ ] Create/download a `Mac App Store Connect` provisioning profile for `com.taglauncher.app`. |
| | | - [ ] Install certificates and profile on the release Mac. |
| | | - [ ] Re-run `security find-identity -v -p codesigning` and verify the Mac App Store identities appear. |
| | | |
| | | ## 2. App Store Connect App Record |
| | | |
| | | - [ ] Create a new app record. |
| | | - [ ] Platform: `macOS`. |
| | | - [ ] Name: `TagLauncher`. |
| | | - [ ] Primary language: choose `English (U.S.)` or `Simplified Chinese`. |
| | | - [ ] Bundle ID: `com.taglauncher.app`. |
| | | - [ ] SKU: `taglauncher-macos`. |
| | | - [ ] User Access: Full Access unless team access needs to be restricted. |
| | | - [ ] Category: Utilities. |
| | | - [ ] Add version `7.8.1`. |
| | | |
| | | ## 3. Product Page Metadata |
| | | |
| | | - [ ] Fill app name, subtitle, description, keywords, support URL, privacy policy URL, copyright. |
| | | - [ ] Fill promotional text if desired. |
| | | - [ ] Complete age rating questionnaire. |
| | | - [ ] Complete content rights declaration. |
| | | - [ ] Complete encryption export compliance answer. |
| | | - [ ] Complete app privacy questionnaire. |
| | | - [ ] Add App Review contact information. |
| | | - [ ] Add App Review notes from `APP_STORE_CONNECT_METADATA.md`. |
| | | |
| | | ## 4. Screenshots |
| | | |
| | | - [ ] Capture at least one required Mac screenshot. |
| | | - [ ] Recommended Mac screenshot size: `2880 x 1800`, `2560 x 1600`, `1440 x 900`, or `1280 x 800`. |
| | | - [ ] Include app grid. |
| | | - [ ] Include Quick Search. |
| | | - [ ] Include Settings. |
| | | - [ ] Optional: include multi-tag organization or import/export if it helps explain value. |
| | | - [ ] Verify screenshots contain no private user data. |
| | | |
| | | ## 5. Build And Upload |
| | | |
| | | - [ ] Build the App Store-signed app using `BUILD_SIGN_UPLOAD.md`. |
| | | - [ ] Verify `CFBundleShortVersionString = 7.8.1`. |
| | | - [ ] Start from frozen local QA build `20260529.1235`; use a newer `CFBundleVersion` only if App Store upload retries require it. |
| | | - [ ] Increment `CFBundleVersion` for every upload attempt. |
| | | - [ ] Verify sandbox entitlements are present. |
| | | - [ ] Run `Scripts/window_logic_qa.sh` against the signed build before uploading. |
| | | - [ ] Upload with Transporter, Xcode Organizer, or `altool`. |
| | | - [ ] Wait for App Store Connect processing email. |
| | | - [ ] Attach the processed build to version `7.8.1`. |
| | | |
| | | ## 6. Submit For Review |
| | | |
| | | - [ ] Check every App Store Connect section shows no missing required fields. |
| | | - [ ] Select release option: Manual release after approval. |
| | | - [ ] Add for Review. |
| | | - [ ] Submit for Review. |
| | | - [ ] Watch review status: Waiting for Review -> In Review -> Approved/Rejected. |
| | | - [ ] If rejected, save the reviewer message in this release folder before fixing. |
| | | |
| | | ## 7. After Approval |
| | | |
| | | - [ ] Smoke-test approved build via TestFlight or App Store sandbox flow if available. |
| | | - [ ] Create a git tag for the exact submitted commit/build. |
| | | - [ ] Record final submitted build number and App Store Connect build ID. |
| | | - [ ] Release manually when ready. |
| | | - [ ] Archive final metadata, screenshots, and review notes under this release folder. |
| New file |
| | |
| | | # Privacy Policy for TagLauncher |
| | | |
| | | Effective date: May 24, 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, 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. |
| | | - 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, or Privacy Policy 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, or support integrations 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]` |
| New file |
| | |
| | | # TagLauncher 隐私政策 |
| | | |
| | | 生效日期:2026 年 5 月 24 日 |
| | | |
| | | 开发者:`[你的姓名或公司名称]` |
| | | |
| | | 联系邮箱:`[隐私或支持邮箱]` |
| | | |
| | | 本隐私政策说明 TagLauncher 如何处理信息。 |
| | | |
| | | ## 摘要 |
| | | |
| | | TagLauncher 是一个本地运行的 macOS 工具。当前版本不包含分析 SDK、广告 SDK、追踪 SDK 或遥测功能。TagLauncher 不出售个人信息,也不会跨 App 或网站追踪用户。 |
| | | |
| | | ## TagLauncher 在本地处理的信息 |
| | | |
| | | TagLauncher 可能会在你的 Mac 上访问或保存以下信息: |
| | | |
| | | - 本机已安装应用列表,用于生成应用启动网格和搜索索引。 |
| | | - 应用名称、Bundle ID、图标、标签、备注、分类布局、显示偏好和快捷键设置。 |
| | | - 你通过 macOS 文件选择面板主动选择导入或导出的分类/布局文件。 |
| | | |
| | | 这些信息只用于提供 TagLauncher 的应用整理、启动、搜索、导入导出和设置功能。 |
| | | |
| | | ## 数据收集 |
| | | |
| | | TagLauncher 不会从你这里收集个人数据,也不会把个人数据发送给开发者。 |
| | | |
| | | TagLauncher 不使用: |
| | | |
| | | - 分析服务。 |
| | | - 广告网络。 |
| | | - 第三方追踪 SDK。 |
| | | - 远程遥测。 |
| | | - 用户行为画像。 |
| | | |
| | | ## 网络访问 |
| | | |
| | | TagLauncher 不需要网络服务即可整理和启动本地应用。 |
| | | |
| | | 如果你打开帮助、支持或隐私政策等外部链接,macOS 可能会在浏览器中打开这些网页。外部网站适用其各自的隐私规则。 |
| | | |
| | | ## 本地存储 |
| | | |
| | | TagLauncher 使用标准 macOS 存储方式在本机保存偏好和应用整理数据,例如 UserDefaults 和用户的 Application Support 文件夹。 |
| | | |
| | | 你可以按照 macOS 的常规方式删除 App 及其相关本地支持文件,以移除 TagLauncher 的本地数据。 |
| | | |
| | | ## 用户选择的文件 |
| | | |
| | | 只有当你通过 macOS 文件选择面板主动选择导入或导出位置时,TagLauncher 才会读取或写入相关文件。TagLauncher 只会将这些文件用于你请求的导入或导出操作。 |
| | | |
| | | ## App Store 隐私信息 |
| | | |
| | | 基于当前 TagLauncher 构建,计划填写的 App Store 隐私信息为: |
| | | |
| | | - 收集的数据:否。 |
| | | - 追踪:否。 |
| | | |
| | | 如果后续加入网络服务、分析、崩溃上报、支持系统或其他新功能,提交前需要重新审核这些答案。 |
| | | |
| | | ## 儿童隐私 |
| | | |
| | | TagLauncher 是通用 macOS 工具,并非面向儿童。TagLauncher 不会有意收集儿童的个人信息。 |
| | | |
| | | ## 政策更新 |
| | | |
| | | 当 TagLauncher 发生变化时,本政策可能会更新。页面顶部的生效日期表示当前版本。 |
| | | |
| | | ## 联系方式 |
| | | |
| | | 如果你对本隐私政策或 TagLauncher 的隐私行为有问题,请联系: |
| | | |
| | | `[隐私或支持邮箱]` |
| New file |
| | |
| | | # QA And Release Evidence |
| | | |
| | | ## Local Build |
| | | |
| | | - Version: `7.8.1` |
| | | - Build: `20260529.1235` |
| | | - Source ref: `appstore-7.8.1-20260529.1235` |
| | | - App path: `/Users/ar/Projects/Taglauncher/build/TagLauncher.app` |
| | | - DMG path: `/Users/ar/Projects/Taglauncher/build/TagLauncher.dmg` |
| | | - App executable size: `1.4M` |
| | | - DMG size: `5.7M` |
| | | |
| | | 2026-05-29 release freeze: the local QA app, DMG, and App icon assets were regenerated from the `7.8.1` source tree. |
| | | |
| | | ## Hashes |
| | | |
| | | ```text |
| | | 72b62d28529ee41e4ae22c972ab14b81b93788d011f0e64df6e941b39a50c1a3 build/TagLauncher.dmg |
| | | ad08345b3ab64fa85dc6025e076721dc8f6713f17c96e21f08dd0a86436636f4 build/TagLauncher.app/Contents/MacOS/TagLauncher |
| | | ``` |
| | | |
| | | ## Commands Run |
| | | |
| | | ```bash |
| | | bash build.sh |
| | | bash make_dmg.sh |
| | | codesign --verify --deep --strict --verbose=2 build/TagLauncher.app |
| | | hdiutil verify build/TagLauncher.dmg |
| | | python3 generate_icon.py |
| | | APP_BUILD=20260529.1235 bash Scripts/window_logic_qa.sh |
| | | ``` |
| | | |
| | | ## Window Logic QA Result |
| | | |
| | | `Scripts/window_logic_qa.sh` passed for this release line after the `7.8.0` keyboard routing and scroll stability changes. Earlier builds `20260524.1652` and `20260524.1849` should not be used for App Store prep because they did not include the final fullscreen/Split View Quick Search, Settings close/refocus, same-app Split View, icon transparency, AppKit tag navigation, and scroll-after-keyboard fixes. |
| | | |
| | | Covered checks: |
| | | |
| | | - Repeated self-launch keeps exactly one process. |
| | | - Repeated self-launch keeps exactly one Dock tile. |
| | | - Fullscreen Space overlay appears above the current fullscreen app. |
| | | - Fullscreen Space overlay is checked with `showDockIcon=true` and `showDockIcon=false`. |
| | | - Fullscreen Space overlay bounds must match the fullscreen target display and remain stable across repeated samples. |
| | | - Fullscreen Space Quick Search opens from app grid without switching away from the current fullscreen app. |
| | | - Fullscreen Space Settings opens from app grid without switching away from the current fullscreen app. |
| | | - Closing Settings in a fullscreen/Split View overlay session does not reactivate TagLauncher into another Space. |
| | | - Split View fullscreen geometry is checked for 50/50 and 33/67 split layouts, while ordinary side-by-side desktop windows are rejected. |
| | | - Same-app two-window Split View geometry follows the same fullscreen Split View path as two-app Split View. |
| | | - App grid claims foreground, hides Dock, and keeps menu bar visible. |
| | | - Settings floats above app grid. |
| | | - File panel floats above Settings. |
| | | - Quick Search stays above app grid and supports two-Escape logic. |
| | | - AppGrid scroll keeps `Space` and `Esc` keyboard routing stable across repeated scroll/search/close cycles. |
| | | - Clicking outside Quick Search closes search, not app grid. |
| | | - System Force Quit window stays above TagLauncher. |
| | | - Pointer-following logic was checked on two displays; AppGrid followed the pointer on each screen. |
| | | |
| | | ## Quick Search Verification |
| | | |
| | | The release includes Quick Search keyboard behavior fixes while the text field is actively editing and after AppGrid scrolling: |
| | | |
| | | - The first search result is selected by default. |
| | | - Up and Down arrows move the selected result. |
| | | - Return opens the selected result. |
| | | - Numeric keypad Enter follows the same submit path. |
| | | - Escape closes Quick Search. |
| | | - After AppGrid scrolling, Space opens Quick Search and Escape closes Quick Search/AppGrid in the expected two-step sequence. |
| | | |
| | | The behavior was verified by automated window QA and local UI smoke testing before freezing this release pack. |
| | | |
| | | ## Crash Check |
| | | |
| | | After the window fixes, no newer TagLauncher crash report appeared. The latest crash report remained the known pre-fix crash: |
| | | |
| | | ```text |
| | | TagLauncher-2026-05-23-072321.ips |
| | | ``` |
| | | |
| | | Root cause of that crash: |
| | | |
| | | ```text |
| | | NSWindow _validateCollectionBehavior: |
| | | ``` |
| | | |
| | | The invalid overlay collection behavior was removed. |
| | | |
| | | ## DMG Verification |
| | | |
| | | ```text |
| | | hdiutil: verify: checksum of "/Users/ar/Projects/Taglauncher/build/TagLauncher.dmg" is VALID |
| | | ``` |
| | | |
| | | ## Help PDF Verification |
| | | |
| | | - The broken macOS Help Book binding was removed. |
| | | - The standard menu bar now has a localized Help menu with a single `Download Help PDF` item. |
| | | - The About page includes an `Open Help PDF` button and a copy-link button. |
| | | - The app binary contains the immutable GitHub Release Help PDF URL shape. |
| | | - The app binary no longer contains the old `raw.githubusercontent` Help URL or `TagLauncherLocalizedHelpMenuItem`. |
| | | - The public GitHub Release assets for all 29 Help PDFs returned HTTP `200`. |
| | | |
| | | ## Code Signing Verification |
| | | |
| | | ```text |
| | | /Users/ar/Projects/Taglauncher/build/TagLauncher.app: valid on disk |
| | | /Users/ar/Projects/Taglauncher/build/TagLauncher.app: satisfies its Designated Requirement |
| | | ``` |
| | | |
| | | This verification is for the local ad-hoc signed QA build. App Store upload still needs App Store distribution signing. |
| New file |
| | |
| | | # TagLauncher Mac App Store Release Pack |
| | | |
| | | This folder is the working release pack for the first Mac App Store submission of TagLauncher 7.8.1. |
| | | |
| | | ## Release Identity |
| | | |
| | | - Product: TagLauncher |
| | | - Platform: macOS / Mac App Store |
| | | - Bundle ID: `com.taglauncher.app` |
| | | - Version: `7.8.1` |
| | | - Local QA build: `20260529.1235` |
| | | - Source ref: `appstore-7.8.1-20260529.1235` |
| | | - Source branch: `codex/post-freeze-new-requirement` |
| | | - Release folder: `Release/AppStore-7.8.1-20260529.1235` |
| | | - DMG SHA-256: `72b62d28529ee41e4ae22c972ab14b81b93788d011f0e64df6e941b39a50c1a3` |
| | | - App binary SHA-256: `ad08345b3ab64fa85dc6025e076721dc8f6713f17c96e21f08dd0a86436636f4` |
| | | |
| | | ## Freeze Status |
| | | |
| | | This release pack freezes TagLauncher `7.8.1` build `20260529.1235` for Mac App Store submission prep. Use the hashes above for the frozen local QA package. |
| | | |
| | | Do not use earlier prep folders or builds such as `20260524.1652`, `20260524.1849`, or the previous `7.6.0` prep package; they predate the final AppKit, fullscreen/Split View, Quick Search, icon, and scroll stability fixes. |
| | | |
| | | ## What Changed For This Release |
| | | |
| | | - Split the post-7.6 work into `7.7.0`, `7.8.0`, and `7.8.1` changelog entries. |
| | | - Completed AppKit-backed tag navigation, including drag reorder and stronger drag-lift visual feedback. |
| | | - Added confirmation and independent "don't remind me again" handling for removing tags by dragging apps out of groups or into Uncategorized. |
| | | - Fixed App icon transparency so rounded corners no longer show opaque white corners. |
| | | - AppKit-backed Quick Search result list and independent Quick Search panel are included. |
| | | - Overlay window management is consolidated in `OverlayWindowController`. |
| | | - App library scanning, Smart Start application, and Quick Search document preparation are consolidated in `AppLibraryController`. |
| | | - Hardened fullscreen and Split View presentation for AppGrid, Quick Search, Settings, file panels, and Force Quit layering. |
| | | - Fixed scroll-after-keyboard edge cases where `Space` or `Esc` could occasionally stop working after AppGrid scrolling. |
| | | - Reduced AppGrid scroll churn by avoiding repeated SwiftUI state writes during a scroll burst. |
| | | - New installs now default AppGrid icon size to `64`; existing user preferences are not overwritten. |
| | | - Expanded `Scripts/window_logic_qa.sh` to include repeated scroll -> Space -> Esc keyboard routing checks. |
| | | |
| | | ## Folder Contents |
| | | |
| | | - `APP_STORE_ASSET_INVENTORY.md`: complete submission asset checklist and missing-item tracker. |
| | | - `FIRST_TIME_MAC_APP_STORE_TODO.md`: step-by-step checklist for a first Mac App Store submission. |
| | | - `APP_STORE_CONNECT_METADATA.md`: draft metadata, review notes, privacy answers, screenshot plan. |
| | | - `BUILD_SIGN_UPLOAD.md`: exact build/sign/upload path and current signing blockers. |
| | | - `QA_RELEASE_EVIDENCE.md`: local QA evidence and artifact hashes. |
| | | - `Screenshots/`: screenshot shot list, raw screenshot staging, and App Store-ready screenshot folder. |
| | | - `Legal/`: privacy policy drafts. |
| | | - `Support/`: support page draft and GitHub Pages publication guide. |
| | | - `Review/`: App Review notes draft. |
| | | - `Assets/`: app icon copy and other static submission assets. |
| | | - `Archive/`: local QA artifact archive. |
| | | - `Upload/`: placeholder for App Store-signed upload artifacts. |
| | | - `Submitted/`: placeholder for final submitted App Store Connect build records. |
| | | |
| | | ## Archived Old Release Pack |
| | | |
| | | The previous App Store prep folder remains available at: |
| | | |
| | | `Release/AppStore-7.6.0-20260527.0124` |
| | | |
| | | It was retained rather than deleted so old notes remain available if we need to compare decisions. |
| | | |
| | | ## Important Status |
| | | |
| | | The local app and DMG build passed QA and signing verification for local distribution. This is not yet an App Store upload artifact because this Mac does not currently have: |
| | | |
| | | - A `Mac App Distribution` signing certificate. |
| | | - A `Mac Installer Distribution` signing certificate. |
| | | - A Mac App Store provisioning profile for `com.taglauncher.app`. |
| | | |
| | | Follow `BUILD_SIGN_UPLOAD.md` before uploading to App Store Connect. |
| | | |
| | | ## Apple References |
| | | |
| | | - Add a new app: https://developer.apple.com/help/app-store-connect/create-an-app-record/add-a-new-app/ |
| | | - Upload builds: https://developer.apple.com/help/app-store-connect/manage-builds/upload-builds/ |
| | | - Submit an app: https://developer.apple.com/help/app-store-connect/manage-submissions-to-app-review/submit-an-app/ |
| | | - App Sandbox: https://developer.apple.com/documentation/security/app_sandbox |
| | | - App privacy details: https://developer.apple.com/app-store/app-privacy-details/ |
| | | - Screenshots: https://developer.apple.com/help/app-store-connect/reference/screenshot-specifications |
| | | - Pricing and availability: https://developer.apple.com/help/app-store-connect/reference/app-pricing-and-availability/ |
| New file |
| | |
| | | # 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 hides the Dock 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: build verified locally; window behavior QA passed on the release line, including fullscreen/Split View, Quick Search, Settings, file panels, Force Quit layering, and scroll-after-keyboard routing. |
| | | - Frozen local build: `20260529.1235` |
| | | - Frozen source ref: `appstore-7.8.1-20260529.1235` |
| New file |
| | |
| | | # Screenshot Shot List |
| | | |
| | | Apple allows one to ten Mac screenshots. Use 16:10 PNG or JPG images. Recommended final size: `2880 x 1800`. Other accepted Mac sizes include `2560 x 1600`, `1440 x 900`, and `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. |
| | | |
| | | ## Optional Extra Shots |
| | | |
| | | 6. Split View / fullscreen Space behavior |
| | | - Only include this if it looks visually clear. |
| | | - AppGrid should appear above a fullscreen or Split View workspace. |
| | | |
| | | 7. Help/About page |
| | | - Use only if you want to emphasize the built-in help link. |
| | | |
| | | ## Capture Notes |
| | | |
| | | - Hide unrelated desktop clutter and notifications. |
| | | - Use the same language for all screenshots unless intentionally localizing. |
| | | - Avoid showing sensitive installed apps, private folders, account names, or messages. |
| | | - Do not add marketing text into the screenshots unless you later decide to create designed promotional frames. |
| | | - If taking full-screen captures on a Retina Mac, the raw image may be larger than accepted App Store sizes. Export or resize final files to `2880 x 1800`. |
| | | |
| | | ## Quick Resize Command |
| | | |
| | | After placing raw screenshots in `Screenshots/raw/`, run this from the repo root to create `2880 x 1800` copies: |
| | | |
| | | ```bash |
| | | mkdir -p Release/AppStore-7.8.1-20260529.1235/Screenshots/AppStore |
| | | for file in Release/AppStore-7.8.1-20260529.1235/Screenshots/raw/*.png; do |
| | | name="$(basename "$file")" |
| | | sips -z 1800 2880 "$file" --out "Release/AppStore-7.8.1-20260529.1235/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. |
| New file |
| | |
| | | # Publishing Privacy And Support Pages On GitHub |
| | | |
| | | App Store Connect needs public URLs for privacy policy and support. The simplest path is GitHub Pages. |
| | | |
| | | ## Recommended URL Shape |
| | | |
| | | If you publish from this repository with GitHub Pages, use URLs like: |
| | | |
| | | - Privacy Policy: `https://[GITHUB_USER_OR_ORG].github.io/[REPO_NAME]/privacy/` |
| | | - Support: `https://[GITHUB_USER_OR_ORG].github.io/[REPO_NAME]/support/` |
| | | |
| | | Exact URLs depend on the GitHub owner, repository name, and Pages settings. |
| | | |
| | | ## Files To Publish |
| | | |
| | | Copy these release-pack files into a public `docs/` folder in the GitHub repository: |
| | | |
| | | ```text |
| | | docs/privacy.md |
| | | docs/privacy.zh-Hans.md |
| | | docs/support.md |
| | | ``` |
| | | |
| | | Suggested source mapping: |
| | | |
| | | ```text |
| | | Release/AppStore-7.8.1-20260529.1235/Legal/PRIVACY_POLICY.md -> docs/privacy.md |
| | | Release/AppStore-7.8.1-20260529.1235/Legal/PRIVACY_POLICY.zh-Hans.md -> docs/privacy.zh-Hans.md |
| | | Release/AppStore-7.8.1-20260529.1235/Support/SUPPORT.md -> docs/support.md |
| | | ``` |
| | | |
| | | Replace all placeholders before publishing: |
| | | |
| | | - `[YOUR NAME OR COMPANY NAME]` |
| | | - `[PRIVACY OR SUPPORT EMAIL]` |
| | | - `[SUPPORT EMAIL]` |
| | | - `[PUBLIC PRIVACY POLICY URL]` |
| | | |
| | | ## GitHub Pages Setup |
| | | |
| | | 1. Push the repository to GitHub. |
| | | 2. Open the repository on GitHub. |
| | | 3. Go to `Settings` -> `Pages`. |
| | | 4. Under `Build and deployment`, choose: |
| | | - Source: `Deploy from a branch` |
| | | - Branch: `main` |
| | | - Folder: `/docs` |
| | | 5. Save. |
| | | 6. Wait for GitHub Pages to publish. |
| | | 7. Open the generated URLs in a private browser window and confirm they are public. |
| | | 8. Paste the public privacy and support URLs into App Store Connect. |
| | | |
| | | ## Alternative: Dedicated Website Repository |
| | | |
| | | If you prefer a clean URL, create a separate public repository named `[GITHUB_USER_OR_ORG].github.io`. |
| | | |
| | | Then publish: |
| | | |
| | | ```text |
| | | privacy.md |
| | | privacy.zh-Hans.md |
| | | support.md |
| | | ``` |
| | | |
| | | The URLs become: |
| | | |
| | | ```text |
| | | https://[GITHUB_USER_OR_ORG].github.io/privacy/ |
| | | https://[GITHUB_USER_OR_ORG].github.io/support/ |
| | | ``` |
| | | |
| | | ## App Store Connect Fields |
| | | |
| | | Use: |
| | | |
| | | - Privacy Policy URL: the public privacy page. |
| | | - Support URL: the public support page. |
| | | |
| | | If you localize App Store metadata later, you can also provide localized privacy policy URLs per locale. |
| New file |
| | |
| | | # 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, 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. |