checkpoint: v3.0.4 — 修复新建 tag 消失的 bug:addNewTag 写 TagDatabase.createTag 持久化
2 files modified
5 files added
14 ■■■■ changed files
Apptag/DataLayer.swift 9 ●●●●● patch | view | raw | blame | history
Apptag/TagEditorView.swift 5 ●●●●● patch | view | raw | blame | history
X-screencap/SCR-20260505-qwvz.png patch | view | raw | blame | history
X-screencap/SCR-20260505-shyg.png patch | view | raw | blame | history
X-screencap/SCR-20260505-tmjo.png patch | view | raw | blame | history
X-screencap/SCR-20260506-ohtf.jpeg patch | view | raw | blame | history
X-screencap/SCR-20260506-okgg.jpeg patch | view | raw | blame | history
Apptag/DataLayer.swift
@@ -299,6 +299,15 @@
        TagDatabase.save(store)
    }
    /// Create a new tag definition (no app assignments yet).
    static func createTag(_ name: String, color: Int) {
        var store = TagDatabase.load()
        guard store.tags[name] == nil else { return }
        store.tags[name] = TagDatabase.TagDef(color: color)
        if !store.tagOrder.contains(name) { store.tagOrder.append(name) }
        TagDatabase.save(store)
    }
    /// Annotate scanned apps with tags from the database.
    static func annotate(apps: [AppInfo]) -> [AppInfo] {
        let store = TagDatabase.load()
Apptag/TagEditorView.swift
@@ -147,13 +147,12 @@
        // SIP-protected apps where xattr write silently fails.
    }
    /// Add a new tag name+color to the local registry only (no xattr write until
    /// the tag is assigned to apps via "Edit App Categories").
    /// Does NOT call onRefresh — would overwrite tagColors with scan results.
    /// Add a new tag name+color and persist to the database.
    private func addNewTag() {
        let name = newTagNameText.trimmingCharacters(in: .whitespaces)
        guard !name.isEmpty else { return }
        tagColors[name] = newTagColorIndex
        TagEditor.createTag(name, color: newTagColorIndex)
        addingNewTag = false
        newTagNameText = ""
    }
X-screencap/SCR-20260505-qwvz.png
X-screencap/SCR-20260505-shyg.png
X-screencap/SCR-20260505-tmjo.png
X-screencap/SCR-20260506-ohtf.jpeg
X-screencap/SCR-20260506-okgg.jpeg