Ariver
2026-05-31 b29f7228d5bacf7086b7155f24d92fffd65bda11
Prepare 7.8.6 explicit app grid launch release
5 files modified
4 files added
118 ■■■■■ changed files
Apptag/ApptagApp.swift 6 ●●●● patch | view | raw | blame | history
Apptag/Info.plist 6 ●●●●● patch | view | raw | blame | history
Apptag/ProcessSingleton.swift 6 ●●●● patch | view | raw | blame | history
CHANGELOG.md 7 ●●●●● patch | view | raw | blame | history
Release/AppStore-7.8.6-20260531.0146/APP_STORE_ASSET_INVENTORY.md 17 ●●●●● patch | view | raw | blame | history
Release/AppStore-7.8.6-20260531.0146/Archive/TagLauncher-7.8.6-20260531.0146-local-QA.dmg patch | view | raw | blame | history
Release/AppStore-7.8.6-20260531.0146/QA_RELEASE_EVIDENCE.md 37 ●●●●● patch | view | raw | blame | history
Release/AppStore-7.8.6-20260531.0146/README.md 29 ●●●●● patch | view | raw | blame | history
Scripts/window_logic_qa.sh 10 ●●●●● patch | view | raw | blame | history
Apptag/ApptagApp.swift
@@ -208,10 +208,10 @@
        configureApplicationMenuWhenAvailable(retries: 12)
    }
    /// Dock icon click → show overlay (same as menubar "Show TagLauncher")
    /// Reopening the already-running app must not implicitly show App Grid.
    /// App Grid is only opened by explicit launcher commands: main hotkey or status item/menu.
    func applicationShouldHandleReopen(_ sender: NSApplication, hasVisibleWindows flag: Bool) -> Bool {
        guard Date() >= suppressReopenUntil else { return false }
        showOrFocusOverlay()
        return false  // Suppress default "unhide all windows" behavior
    }
@@ -1477,7 +1477,7 @@
    }
    @objc private func handleExternalActivationRequest(_ notification: Notification) {
        let shouldShowOverlay = notification.userInfo?["showOverlay"] as? Bool ?? true
        let shouldShowOverlay = notification.userInfo?["showOverlay"] as? Bool ?? false
        guard shouldShowOverlay else { return }
        showOrFocusOverlay()
    }
Apptag/Info.plist
@@ -19,15 +19,17 @@
    <key>CFBundlePackageType</key>
    <string>APPL</string>
    <key>CFBundleShortVersionString</key>
    <string>7.8.5</string>
    <string>7.8.6</string>
    <key>CFBundleVersion</key>
    <string>20260530.1744</string>
    <string>20260531.0146</string>
    <key>LSApplicationCategoryType</key>
    <string>public.app-category.utilities</string>
    <key>LSMinimumSystemVersion</key>
    <string>15.0</string>
    <key>LSMultipleInstancesProhibited</key>
    <true/>
    <key>LSUIElement</key>
    <true/>
    <key>NSHighResolutionCapable</key>
    <true/>
    <key>NSPrincipalClass</key>
Apptag/ProcessSingleton.swift
@@ -31,7 +31,11 @@
    }
    private static func handOffAndExit() -> Never {
        let shouldShowOverlay = !CommandLine.arguments.dropFirst().contains("--hide")
        let arguments = CommandLine.arguments.dropFirst()
        let shouldShowOverlay = arguments.contains("--show-overlay")
        if !shouldShowOverlay {
            NSApplication.shared.setActivationPolicy(.accessory)
        }
        let ownerInstance = NSRunningApplication
            .runningApplications(withBundleIdentifier: AppIdentity.bundleIdentifier)
            .filter { $0.processIdentifier != getpid() && !$0.isTerminated }
CHANGELOG.md
@@ -1,5 +1,12 @@
# TagLauncher Changelog
## [7.8.6] — 2026-05-31
- 修复未按主快捷键时 App Grid 可能被重复启动或外部激活路径误唤出的问题;App Grid 现在只由主快捷键或状态栏显式命令打开
- 加固重复实例移交逻辑:默认不再显示 App Grid,非显示型重复实例先切到 accessory,避免产生多个 Dock 图标
- 窗口 QA 增加“重复启动不显示 App Grid、不增加 Dock 图标”的回归用例
- 版本号更新为 `7.8.6`,Build 更新为 `20260531.0146`
## [7.8.5] — 2026-05-30
- 优化设置页语言列表布局:语言页从两列改为三列,并使用下方空白区域,默认可显示更多语言选项
Release/AppStore-7.8.6-20260531.0146/APP_STORE_ASSET_INVENTORY.md
New file
@@ -0,0 +1,17 @@
# App Store Asset Inventory
This release pack freezes TagLauncher `7.8.6` build `20260531.0146`.
## Included
- `Archive/TagLauncher-7.8.6-20260531.0146-local-QA.dmg`
- `README.md`
- `QA_RELEASE_EVIDENCE.md`
- `APP_STORE_ASSET_INVENTORY.md`
## External Items Still Required For App Store Upload
- Apple Developer Bundle ID selection/confirmation in App Store Connect.
- Mac App Store signing certificate and provisioning profile.
- Final App Store screenshots and metadata review before submission.
Release/AppStore-7.8.6-20260531.0146/Archive/TagLauncher-7.8.6-20260531.0146-local-QA.dmg
Binary files differ
Release/AppStore-7.8.6-20260531.0146/QA_RELEASE_EVIDENCE.md
New file
@@ -0,0 +1,37 @@
# QA Release Evidence
## Build Under Test
- Version: `7.8.6`
- Build: `20260531.0146`
- App: `/Users/ar/Projects/Taglauncher/build/TagLauncher.app`
- DMG: `/Users/ar/Projects/Taglauncher/build/TagLauncher.dmg`
- Archived DMG: `Archive/TagLauncher-7.8.6-20260531.0146-local-QA.dmg`
- DMG SHA-256: `2664a188b3cb601cc86a36d12e4e4b3aae7fb28f7b470caa8cb0f5ff58ca8bef`
## Checks
- Version metadata:
  - `CFBundleShortVersionString = 7.8.6`
  - `CFBundleVersion = 20260531.0146`
  - `LSUIElement = true`
- Code signing:
  - `codesign --verify --deep --strict --verbose=2 build/TagLauncher.app`
  - Result: passed
- Disk image:
  - `hdiutil verify build/TagLauncher.dmg`
  - Result: passed
- Window logic:
  - `APP_BUILD=20260531.0146 Scripts/window_logic_qa.sh`
  - Result: `ALL WINDOW LOGIC QA PASSED`
- Duplicate launch regression:
  - Repeated `open -n build/TagLauncher.app`
  - Expected: one Dock tile, no App Grid
  - Result: passed
## Targeted Fix Coverage
- Reopening an already-running app no longer implicitly shows App Grid.
- Duplicate-instance notifications default to no overlay.
- Non-show duplicate instances start with accessory activation policy to avoid Dock tile multiplication.
Release/AppStore-7.8.6-20260531.0146/README.md
New file
@@ -0,0 +1,29 @@
# TagLauncher 7.8.6 Release Pack
This folder freezes TagLauncher `7.8.6` build `20260531.0146` for local QA distribution and Mac App Store submission preparation.
## Release Identity
- Product: `TagLauncher`
- Version: `7.8.6`
- Build: `20260531.0146`
- Branch: `codex/fix-quick-search-focus-routing`
- Local QA DMG: `Archive/TagLauncher-7.8.6-20260531.0146-local-QA.dmg`
- DMG SHA-256: `2664a188b3cb601cc86a36d12e4e4b3aae7fb28f7b470caa8cb0f5ff58ca8bef`
## Changes Since 7.8.5
- Removed the implicit App Grid show path from app reopen events.
- Hardened duplicate-instance handoff so repeated launches do not show App Grid unless explicitly requested.
- Started non-show duplicate instances as accessory processes to prevent duplicate Dock tiles.
- Added window QA coverage for repeated duplicate launches: no extra Dock icons and no unexpected overlay.
## Verification
- App version metadata verified: `7.8.6 (20260531.0146)`
- `LSUIElement = true`
- `codesign --verify --deep --strict --verbose=2 build/TagLauncher.app`: passed
- `hdiutil verify build/TagLauncher.dmg`: passed
- `Scripts/window_logic_qa.sh`: passed
- Targeted duplicate-launch check: repeated `open -n` kept one Dock tile and zero TagLauncher overlay windows.
Scripts/window_logic_qa.sh
@@ -1054,6 +1054,15 @@
sleep 1.5
assert_single_qa_app_instance
assert_single_dock_tile
swift_assert no-overlay
for _ in {1..3}; do
  "$APP_BUNDLE/Contents/MacOS/TagLauncher" >/dev/null 2>&1 &
  sleep 0.25
done
sleep 2.0
assert_single_qa_app_instance
assert_single_dock_tile
swift_assert no-overlay
for _ in {1..3}; do
  "$APP_BUNDLE/Contents/MacOS/TagLauncher" --hide >/dev/null 2>&1 &
  sleep 0.25
@@ -1061,6 +1070,7 @@
sleep 2.0
assert_single_qa_app_instance
assert_single_dock_tile
swift_assert no-overlay
kill_all_taglauncher_instances
sleep 0.4
swift_assert no-overlay