Ariver
2026-06-20 a3d82000231b8a8e3709e1a6708dbbdaf81412dc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public protocol AppCategorizer {
    func category(for app: AlignerApp) -> AppCategory
}
 
public struct BundleIDAppCategorizer: AppCategorizer {
    private let mappings: [String: AppCategory]
 
    public init(mappings: [String: AppCategory] = BundleIDAppCategorizer.defaultMappings) {
        self.mappings = mappings
    }
 
    public func category(for app: AlignerApp) -> AppCategory {
        mappings[app.bundleIdentifier] ?? app.category
    }
 
    public static let defaultMappings: [String: AppCategory] = [
        "com.apple.finder": .finder,
        "com.google.Chrome": .browser,
        "company.thebrowser.Browser": .browser,
        "com.apple.Safari": .browser,
        "org.mozilla.firefox": .browser,
        "com.apple.Terminal": .terminal,
        "com.googlecode.iterm2": .terminal,
        "com.microsoft.VSCode": .editorIDE,
        "com.todesktop.230313mzl4w4u92": .editorIDE,
        "com.apple.dt.Xcode": .editorIDE
    ]
}