From b1d73b442765f0184691c768890fc1c611a964f3 Mon Sep 17 00:00:00 2001 From: Shawn Schantz Date: Mon, 13 Jul 2026 18:47:40 -0400 Subject: [PATCH 1/8] feat(mac): added several fields to package, including QR Code --- mac/Config/Config/ConfigView.swift | 16 ++++ .../Installation/InstallationCheck.swift | 3 +- .../KeymanSettings/ConfigAppUtil.swift | 20 +++++ .../Sources/Model/Keyboard.swift | 8 +- .../Sources/Model/KeymanPackage.swift | 77 ++++++++++++++++++- .../Persistence/Data/PackageSource.swift | 13 +++- .../Sources/Persistence/KeymanPaths.swift | 7 ++ .../KeymanSettingsTests.swift | 4 +- 8 files changed, 141 insertions(+), 7 deletions(-) create mode 100644 mac/KeymanSettings/Sources/KeymanSettings/ConfigAppUtil.swift diff --git a/mac/Config/Config/ConfigView.swift b/mac/Config/Config/ConfigView.swift index d8c40528194..d0854be90af 100644 --- a/mac/Config/Config/ConfigView.swift +++ b/mac/Config/Config/ConfigView.swift @@ -49,6 +49,22 @@ struct ConfigView: View { ForEach(Array(settings.installedPackages.enumerated()), id: \.offset) { index, package in VStack { HStack(alignment: .center, spacing: 10) { + VStack(spacing: 16) { + Text("Scan to visit website:") + .font(.headline) + + if let qrImage = package.generateSharePackageQRCode(size: 250) { + Image(nsImage: qrImage) + .interpolation(.none) // important: keeps the QR edges sharp + .resizable() + .frame(width: 250, height: 250) + .background(Color.white) // ensures good scanning contrast + } else { + Text("Failed to generate QR Code") + .foregroundColor(.red) + } + } + .padding() Text(package.packageName) .font(.headline) Text(package.packageVersion) diff --git a/mac/Config/Installation/InstallationCheck.swift b/mac/Config/Installation/InstallationCheck.swift index 9f07b58df86..24c37d17cb5 100644 --- a/mac/Config/Installation/InstallationCheck.swift +++ b/mac/Config/Installation/InstallationCheck.swift @@ -37,7 +37,8 @@ public class InstallationCheck { self.inputMethodVersion = "unknown" } - self.configurationVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "unknown" +// self.configurationVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "unknown" + self.configurationVersion = ConfigAppUtil.configAppVersion() self.isInputMethodCurrent = InstallationCheck.isVersionCurrent(inputMethodVersion: self.inputMethodVersion, configurationVersion: self.configurationVersion) self.installationState = self.loadState() diff --git a/mac/KeymanSettings/Sources/KeymanSettings/ConfigAppUtil.swift b/mac/KeymanSettings/Sources/KeymanSettings/ConfigAppUtil.swift new file mode 100644 index 00000000000..194c71d91a1 --- /dev/null +++ b/mac/KeymanSettings/Sources/KeymanSettings/ConfigAppUtil.swift @@ -0,0 +1,20 @@ +/* + * Keyman is copyright (C) SIL Global. MIT License. + * + * Created by Shawn Schantz on 2026-07-13 + * + * Used for getting application metadata from the Config application + */ + +import Foundation + +public struct ConfigAppUtil { + /** + * returns the short version string from the bundle of the Config app + */ + static public func configAppVersion() -> String { + return Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "unknown" + } + + +} diff --git a/mac/KeymanSettings/Sources/Model/Keyboard.swift b/mac/KeymanSettings/Sources/Model/Keyboard.swift index c26f32011f8..d1c3e0a8fd2 100644 --- a/mac/KeymanSettings/Sources/Model/Keyboard.swift +++ b/mac/KeymanSettings/Sources/Model/Keyboard.swift @@ -16,6 +16,8 @@ public class Keyboard: Identifiable, Hashable, Equatable { public var id = UUID() public var enabled: Bool public var name: String + public let oskFont: String? + public let displayFont: String? public var keyboardId: String // the directory we are reading the keyboard from public var keyboardDirectoryUrl: URL @@ -30,6 +32,8 @@ public class Keyboard: Identifiable, Hashable, Equatable { public init(keyboardSource: KeyboardSource, directoryUrl: URL) { self.enabled = true self.name = keyboardSource.name + self.oskFont = keyboardSource.oskFont + self.displayFont = keyboardSource.displayFont self.keyboardId = keyboardSource.id self.keyboardDirectoryUrl = directoryUrl self.kmxFileUrl = Keyboard.deriveKmxFileUrl(from: self.keyboardDirectoryUrl, keyboardId: self.keyboardId) @@ -41,8 +45,10 @@ public class Keyboard: Identifiable, Hashable, Equatable { /** * initializer that does not rely on package source -- provided to create unit test data */ - public init(name: String, keyboardId: String, keyboardDirectoryUrl: URL, enabled: Bool) { + public init(name: String, oskFont: String? = nil, displayFont: String? = nil, keyboardId: String, keyboardDirectoryUrl: URL, enabled: Bool) { self.name = name + self.oskFont = oskFont + self.displayFont = displayFont self.keyboardId = keyboardId self.keyboardDirectoryUrl = keyboardDirectoryUrl self.kmxFileUrl = Keyboard.deriveKmxFileUrl(from: self.keyboardDirectoryUrl, keyboardId: self.keyboardId) diff --git a/mac/KeymanSettings/Sources/Model/KeymanPackage.swift b/mac/KeymanSettings/Sources/Model/KeymanPackage.swift index ec370856c1b..11b0cb361ad 100644 --- a/mac/KeymanSettings/Sources/Model/KeymanPackage.swift +++ b/mac/KeymanSettings/Sources/Model/KeymanPackage.swift @@ -9,6 +9,9 @@ import Foundation import AppKit +import Cocoa +import CoreImage +import CoreImage.CIFilterBuiltins public class KeymanPackage: Identifiable, Hashable, Equatable { static let defaultImage: NSImage? = { @@ -26,15 +29,21 @@ public class KeymanPackage: Identifiable, Hashable, Equatable { // the URL of the kmp.json file for the package public let keyboards: [Keyboard] + public let fonts: [String] public let packageName: String public let packageVersion: String + public let author: String? public let copyright: String? public let jsonFileUrl: URL public let readmeFileUrl: URL? + public let helpFileUrl: URL? // named welcomeFile in kmp.json public let graphicFileUrl: URL? public let graphicImage: NSImage? + public var sharePackageUrl: URL? + public var shareQrCode: NSImage? + /** * create a KeymanPackage object using the PackageSource object created from the kmp.json */ @@ -42,6 +51,7 @@ public class KeymanPackage: Identifiable, Hashable, Equatable { self.id = UUID() self.packageName = packageSource.info.name.description self.packageVersion = packageSource.info.version.description + self.author = packageSource.info.author?.description self.copyright = packageSource.info.copyright?.description self.sourceDirectoryUrl = packageSource.directoryUrl! self.jsonFileUrl = packageSource.kmpJsonFileUrl! @@ -52,11 +62,34 @@ public class KeymanPackage: Identifiable, Hashable, Equatable { } else { self.readmeFileUrl = nil } - + + if let helpFilename = packageSource.helpFilename { + let fileUrl = sourceDirectoryUrl.appendingPathComponent(helpFilename) + self.helpFileUrl = fileUrl + } else { + self.helpFileUrl = nil + } + self.graphicFileUrl = KeymanPackage.buildGraphicFileUrl(source: packageSource) self.graphicImage = KeymanPackage.loadImage(imageUrl: self.graphicFileUrl) + self.sharePackageUrl = KeymanPackage.buildSharePackageUrl(packageUrl: self.sourceDirectoryUrl) + self.keyboards = KeymanPackage.buildKeyboardsArray(packageSource: packageSource) + + // build font array by looping through keyboard array + var fontNames: Set = [] + for keyboard in self.keyboards { + if let oskFontName = keyboard.oskFont { + fontNames.insert(oskFontName) + } + if let displayFontName = keyboard.displayFont { + fontNames.insert(displayFontName) + } + } + self.fonts = fontNames.sorted() + print("help url: \(self.helpFileUrl?.path ?? "nil")") + print("fonts: \(fontNames) for package: \(self.packageName)") } /** @@ -78,17 +111,20 @@ public class KeymanPackage: Identifiable, Hashable, Equatable { /** * initializer that does not rely on package source -- provided to create unit test data */ - public init(sourceDirectoryUrl: URL, keyboards: [Keyboard], packageName: String, packageVersion: String, copyright: String? = nil, jsonFileUrl: URL, readmeFileUrl: URL? = nil, graphicFileUrl: URL? = nil, graphicImage: NSImage? = nil) { + public init(sourceDirectoryUrl: URL, keyboards: [Keyboard], packageName: String, packageVersion: String, author: String? = nil, copyright: String? = nil, jsonFileUrl: URL, readmeFileUrl: URL? = nil, helpFileUrl: URL? = nil, graphicFileUrl: URL? = nil, graphicImage: NSImage? = nil) { self.id = UUID() self.sourceDirectoryUrl = sourceDirectoryUrl self.keyboards = keyboards self.packageName = packageName self.packageVersion = packageVersion + self.author = author self.copyright = copyright self.jsonFileUrl = jsonFileUrl self.readmeFileUrl = readmeFileUrl + self.helpFileUrl = helpFileUrl self.graphicFileUrl = graphicFileUrl self.graphicImage = graphicImage + self.fonts = [] } /** @@ -167,6 +203,43 @@ public class KeymanPackage: Identifiable, Hashable, Equatable { return packageImage } + + /** + * build the URL to the executable inside the specified Input Method app + */ + static func buildSharePackageUrl(packageUrl: URL) -> URL? { + return URL(string: "https://\(KeymanPaths.keymanDomain)/go/keyboard/\(packageUrl.lastPathComponent)/share") + } + + /** + * generate a QR code for sharing the Keyman Package URL + */ + public func generateSharePackageQRCode(size: CGFloat = 300) -> NSImage? { + guard let data = self.sharePackageUrl?.absoluteString.data(using: .utf8) else { return nil } + + // initialize the built-in Apple QR filter + let filter = CIFilter.qrCodeGenerator() + filter.message = data + filter.correctionLevel = "M" + + guard let rawQRImage = filter.outputImage else { return nil } + + // calculate scaling factor to ensure crisp rendering of QR code + let rawWidth = rawQRImage.extent.width + guard rawWidth > 0 else { return nil } + let scale = size/rawWidth + + // apply transform to scale up without blurring (use interpolation = none in SwiftUI image) + let scaledQRImage = rawQRImage.transformed(by: CGAffineTransform(scaleX: scale, y: scale)) + + // convert the CIImage to a macOS NSImage + let rep = NSCIImageRep(ciImage: scaledQRImage) + let nsImage = NSImage(size: NSSize(width: size, height: size)) + nsImage.addRepresentation(rep) + + return nsImage + } + /** * provided for Hashable conformance */ diff --git a/mac/KeymanSettings/Sources/Persistence/Data/PackageSource.swift b/mac/KeymanSettings/Sources/Persistence/Data/PackageSource.swift index 474d17aabd7..6e982f9c0b0 100644 --- a/mac/KeymanSettings/Sources/Persistence/Data/PackageSource.swift +++ b/mac/KeymanSettings/Sources/Persistence/Data/PackageSource.swift @@ -41,6 +41,13 @@ public struct PackageSource: Identifiable, Decodable, Hashable, Equatable { return nil } } + var helpFilename: String? { + if let filename = options?.welcomeFile { + return filename + } else { + return nil + } + } var graphicFilename: String? { if let filename = options?.graphicFile { return filename @@ -144,10 +151,14 @@ struct SystemInfo: Decodable { struct Options: Decodable { let readmeFile: String? let graphicFile: String? - + let licenseFile: String? + let welcomeFile: String? + enum CodingKeys: String, CodingKey { case readmeFile case graphicFile + case licenseFile + case welcomeFile } } diff --git a/mac/KeymanSettings/Sources/Persistence/KeymanPaths.swift b/mac/KeymanSettings/Sources/Persistence/KeymanPaths.swift index b5ef856f242..5244858eaa4 100644 --- a/mac/KeymanSettings/Sources/Persistence/KeymanPaths.swift +++ b/mac/KeymanSettings/Sources/Persistence/KeymanPaths.swift @@ -40,6 +40,10 @@ public struct KeymanPaths { static public let configBundleId = "com.keyman.config" static public let groupId = "group.com.keyman" + static public let keymanDomain = "keyman.com" + static public let keymanHelpDomain = "help.keyman.com" + static public let keymanApiDomain = "api.keyman.com" + // keyman file extensions static public let keymanPackageFileExtension: String = "kmp" @@ -132,6 +136,9 @@ public struct KeymanPaths { } } + /** + * build the URL to the executable inside the specified Input Method app + */ public func buildInputMethodExecutableUrl(fileName:String) -> URL? { if let inputMethodUrl = self.buildInputMethodPathUrl(fileName: fileName) { let executableName = inputMethodUrl.deletingPathExtension().lastPathComponent diff --git a/mac/KeymanSettings/Tests/KeymanSettingsTests/KeymanSettingsTests.swift b/mac/KeymanSettings/Tests/KeymanSettingsTests/KeymanSettingsTests.swift index 4efd174fc95..897c7277dfb 100644 --- a/mac/KeymanSettings/Tests/KeymanSettingsTests/KeymanSettingsTests.swift +++ b/mac/KeymanSettings/Tests/KeymanSettingsTests/KeymanSettingsTests.swift @@ -171,13 +171,13 @@ import Foundation @Test("Check Keyman 19 container data directory") func testKeyman19ContainerDataDirectory() async throws { #expect(true) - let containerDirectory = try #require(KeymanPaths().keyman19ContainerDirectory) + let containerDirectory = try KeymanPaths().keyman19ContainerDirectory #expect(containerDirectory.absoluteString.hasSuffix("Group%20Containers/group.com.keyman/")) } @Test("Check Keyman 19 packages directory") func testKeyman19KeyboardsDirectory() async throws { #expect(true) - let keyboardsDirectory = try #require(KeymanPaths().keyman19PackagesDirectory) + let keyboardsDirectory = try KeymanPaths().keyman19PackagesDirectory #expect(keyboardsDirectory.absoluteString.hasSuffix("Group%20Containers/group.com.keyman/Library/Application%20Support/Keyman-Packages/")) } } From adcfd433f03ac7fb7890cc4dbbed39988c4c7694 Mon Sep 17 00:00:00 2001 From: Shawn Schantz Date: Tue, 14 Jul 2026 18:42:34 -0400 Subject: [PATCH 2/8] feat(mac): published installed packages as two separate arrays each array is sorted, one for multiple-keyboard packages and one for single-keyboard packages --- mac/Config/Config/ConfigView.swift | 7 +- .../Installation/InstallationCheck.swift | 1 - .../KeymanSettings/SettingsContainer.swift | 68 +++++++++++++++---- .../Sources/Model/Keyboard.swift | 2 - .../Sources/Model/KeymanPackage.swift | 55 +++++++++------ .../KeymanSettingsTests.swift | 14 ++-- 6 files changed, 99 insertions(+), 48 deletions(-) diff --git a/mac/Config/Config/ConfigView.swift b/mac/Config/Config/ConfigView.swift index d0854be90af..6ca089e30a6 100644 --- a/mac/Config/Config/ConfigView.swift +++ b/mac/Config/Config/ConfigView.swift @@ -19,7 +19,8 @@ struct ConfigView: View { Image(systemName: "keyboard") .imageScale(.large) .foregroundColor(.accentColor) - Text("keyboard count = \(settings.installedPackages.count)") + Text("multiple keyboard package count = \(settings.singleKeyboardPackages.count)") + Text("single keyboard package count = \(settings.multiKeyboardPackages.count)") Button("debug") { settings.debug() } @@ -46,7 +47,7 @@ struct ConfigView: View { ScrollView { VStack(alignment: .leading, spacing: 6) { - ForEach(Array(settings.installedPackages.enumerated()), id: \.offset) { index, package in + ForEach(Array(settings.singleKeyboardPackages.enumerated()), id: \.offset) { index, package in VStack { HStack(alignment: .center, spacing: 10) { VStack(spacing: 16) { @@ -72,7 +73,7 @@ struct ConfigView: View { // Example of Icon-Only Button Spacer() Button(action: { - settings.removePackage(at: index) + settings.removeInstalledPackage(at: index) }) { Label("remove", systemImage: "trash.fill") } diff --git a/mac/Config/Installation/InstallationCheck.swift b/mac/Config/Installation/InstallationCheck.swift index 24c37d17cb5..04d118b3128 100644 --- a/mac/Config/Installation/InstallationCheck.swift +++ b/mac/Config/Installation/InstallationCheck.swift @@ -37,7 +37,6 @@ public class InstallationCheck { self.inputMethodVersion = "unknown" } -// self.configurationVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "unknown" self.configurationVersion = ConfigAppUtil.configAppVersion() self.isInputMethodCurrent = InstallationCheck.isVersionCurrent(inputMethodVersion: self.inputMethodVersion, configurationVersion: self.configurationVersion) diff --git a/mac/KeymanSettings/Sources/KeymanSettings/SettingsContainer.swift b/mac/KeymanSettings/Sources/KeymanSettings/SettingsContainer.swift index af5b4c47973..3cf08fce752 100644 --- a/mac/KeymanSettings/Sources/KeymanSettings/SettingsContainer.swift +++ b/mac/KeymanSettings/Sources/KeymanSettings/SettingsContainer.swift @@ -40,10 +40,23 @@ public enum SettingsError: Error { @MainActor // run on the main actor since data is published directly to the UI public class SettingsContainer : ObservableObject { - // packages are loaded from disk, each package may contain one or more keyboard - @Published public var installedPackages: [KeymanPackage] + // installed packages are loaded from disk, each package may contain one or more keyboard + fileprivate var installedPackages: [KeymanPackage] { + didSet { + self.updatePackageArrays() + } + } + + // Maintain two arrays for use by configuration views. + // One is for packages with single keyboards and one for packages with multiple keyboards. + // Each array is sorted alphabetically by package name. + // These arrays are updated by a property observer on installedPackages. + // (Consider installedPackages as the source of truth and these arrays for presentation purposes.) + @Published public private(set) var singleKeyboardPackages: [KeymanPackage] + @Published public private(set) var multiKeyboardPackages: [KeymanPackage] + // when a new package is downloaded, it is tracked here - public var packageDownload: PackageDownload? = nil + public private(set) var packageDownload: PackageDownload? = nil fileprivate let packageRepository: PackageRepo fileprivate let defaultsRepository: DefaultsRepo @@ -53,6 +66,11 @@ public class SettingsContainer : ObservableObject { fileprivate var selectedKeyboard: String public init() { + // initialize arrays before loading packages + self.singleKeyboardPackages = [] + self.multiKeyboardPackages = [] + self.installedPackages = [] + // create the package repository, gaining access to the app group container directory do { try self.packageRepository = PackageRepository() @@ -72,11 +90,12 @@ public class SettingsContainer : ObservableObject { } catch { fatalError("Unable to access defaults in group container: \(error.localizedDescription).") } - + self.selectedKeyboard = self.defaultsRepository.readSelectedKeyboard() - - // first load all the installed packages from disk - self.installedPackages = [] + + // load all the installed packages from disk + // though we are in the initializer, didset will be called to update + // the two dependent package arrays because of the call to this helper method self.loadPackages() // next, apply the settings to the packages @@ -95,6 +114,8 @@ public class SettingsContainer : ObservableObject { self.packageRepository = packageRepo self.selectedKeyboard = self.defaultsRepository.readSelectedKeyboard() + self.singleKeyboardPackages = [] + self.multiKeyboardPackages = [] self.installedPackages = [] } @@ -114,7 +135,7 @@ public class SettingsContainer : ObservableObject { name: .packageReplaced, object: nil ) } - + /** * called for `newPackageInstalled` notification */ @@ -133,6 +154,27 @@ public class SettingsContainer : ObservableObject { self.packageDownload = nil } + /** + * Whenever the installedPackages array changes, recreate the two subarrays + */ + public func updatePackageArrays() { + self.singleKeyboardPackages = [] + self.multiKeyboardPackages = [] + + // divide the installedPackages array into two separate arrays based on whether they have one or more keyboards + let partitionedPackages = self.installedPackages.reduce(into: (single: [KeymanPackage](), multiple: [KeymanPackage]())) { result, element in + if element.keyboards.count == 1 { + result.single.append(element) + } else if element.keyboards.count > 1 { + result.multiple.append(element) + } + } + + // sort subarrays alphabetically, without regard to case, using the 'packageName' property + self.singleKeyboardPackages = partitionedPackages.single.sorted { $0.packageName.caseInsensitiveCompare($1.packageName) == .orderedAscending } + self.multiKeyboardPackages = partitionedPackages.multiple.sorted { $0.packageName.caseInsensitiveCompare($1.packageName) == .orderedAscending } + } + /** * Called when user approves the downgrade of package */ @@ -257,7 +299,7 @@ public class SettingsContainer : ObservableObject { /** * find the installed package with the specified UUID */ - public func findPackage(with packageId: UUID) -> KeymanPackage? { + public func findInstalledPackage(with packageId: UUID) -> KeymanPackage? { guard let package = self.installedPackages.first(where: { $0.id == packageId }) else { print ("Error: could not find package with ID: \(packageId)") return nil @@ -269,7 +311,7 @@ public class SettingsContainer : ObservableObject { /** * find the installed package with the specified package name */ - public func findPackage(with packageName: String) -> KeymanPackage? { + public func findInstalledPackage(with packageName: String) -> KeymanPackage? { guard let package = self.installedPackages.first(where: { $0.packageName == packageName }) else { print ("Error: could not find package with name: \(packageName)") return nil @@ -281,7 +323,7 @@ public class SettingsContainer : ObservableObject { /** * remove/uninstall the package at the specified index */ - public func removePackage(at index: Int) { + public func removeInstalledPackage(at index: Int) { let package = self.installedPackages[index] // will removing this package cause the removal of any enabled keyboards? @@ -304,7 +346,7 @@ public class SettingsContainer : ObservableObject { * when enabled, the keyboard appears in the Keyman sub menu in the mac */ public func isKeyboardEnabled(packageId: UUID, keyboardKey: String) -> Bool { - guard let package = self.findPackage(with: packageId) else { + guard let package = self.findInstalledPackage(with: packageId) else { print ("Could not read keyboard state for package: \(packageId) and keyboard: \(keyboardKey)") return false } @@ -317,7 +359,7 @@ public class SettingsContainer : ObservableObject { * enable or disable the keyboard */ public func setKeyboardEnabled(packageId: UUID, keyboardKey: String, enabled: Bool) { - guard let package = self.findPackage(with: packageId) else { + guard let package = self.findInstalledPackage(with: packageId) else { print ("Could not read keyboard state for package: \(packageId) and keyboard: \(keyboardKey)") return } diff --git a/mac/KeymanSettings/Sources/Model/Keyboard.swift b/mac/KeymanSettings/Sources/Model/Keyboard.swift index d1c3e0a8fd2..d67e2e14d6b 100644 --- a/mac/KeymanSettings/Sources/Model/Keyboard.swift +++ b/mac/KeymanSettings/Sources/Model/Keyboard.swift @@ -38,8 +38,6 @@ public class Keyboard: Identifiable, Hashable, Equatable { self.keyboardDirectoryUrl = directoryUrl self.kmxFileUrl = Keyboard.deriveKmxFileUrl(from: self.keyboardDirectoryUrl, keyboardId: self.keyboardId) self.keyboardKey = Keyboard.deriveKeyboardSettingsKey(from: self.keyboardDirectoryUrl, keyboardId: self.keyboardId) - -// print("keyboard created for: \(keyboardSource.id) \r with kmxFileUrl: \(self.kmxFileUrl) \r and settingsKey: \(self.keyboardKey)") } /** diff --git a/mac/KeymanSettings/Sources/Model/KeymanPackage.swift b/mac/KeymanSettings/Sources/Model/KeymanPackage.swift index 11b0cb361ad..f1cda3da36b 100644 --- a/mac/KeymanSettings/Sources/Model/KeymanPackage.swift +++ b/mac/KeymanSettings/Sources/Model/KeymanPackage.swift @@ -27,7 +27,10 @@ public class KeymanPackage: Identifiable, Hashable, Equatable { // the URL of the directory in which the package is contained public let sourceDirectoryUrl: URL // the URL of the kmp.json file for the package - + public let jsonFileUrl: URL + // the URL for downloading the package from keyman.com + public let sharePackageUrl: URL? + public let keyboards: [Keyboard] public let fonts: [String] public let packageName: String @@ -35,15 +38,14 @@ public class KeymanPackage: Identifiable, Hashable, Equatable { public let author: String? public let copyright: String? - public let jsonFileUrl: URL + // the URL of the readme file within the package public let readmeFileUrl: URL? - public let helpFileUrl: URL? // named welcomeFile in kmp.json + // the URL of the help file within the package, named 'welcomeFile' in kmp.json + public let helpFileUrl: URL? + // the URL of the graphic file within the package public let graphicFileUrl: URL? public let graphicImage: NSImage? - public var sharePackageUrl: URL? - public var shareQrCode: NSImage? - /** * create a KeymanPackage object using the PackageSource object created from the kmp.json */ @@ -75,27 +77,19 @@ public class KeymanPackage: Identifiable, Hashable, Equatable { self.sharePackageUrl = KeymanPackage.buildSharePackageUrl(packageUrl: self.sourceDirectoryUrl) - self.keyboards = KeymanPackage.buildKeyboardsArray(packageSource: packageSource) + let keyboardsArray = KeymanPackage.buildKeyboardsArray(packageSource: packageSource) + self.keyboards = keyboardsArray + + self.fonts = KeymanPackage.buildFontNamesArray(keyboards: keyboardsArray) - // build font array by looping through keyboard array - var fontNames: Set = [] - for keyboard in self.keyboards { - if let oskFontName = keyboard.oskFont { - fontNames.insert(oskFontName) - } - if let displayFontName = keyboard.displayFont { - fontNames.insert(displayFontName) - } - } - self.fonts = fontNames.sorted() print("help url: \(self.helpFileUrl?.path ?? "nil")") - print("fonts: \(fontNames) for package: \(self.packageName)") + print("fonts: \(self.fonts) for package: \(self.packageName)") } /** * build an array of Keyboard objects using the array of KeyboardSource object created from the kmp.json */ - private static func buildKeyboardsArray (packageSource: PackageSource) -> [Keyboard] { + private static func buildKeyboardsArray(packageSource: PackageSource) -> [Keyboard] { var keyboardsArray = [Keyboard]() if let keyboards = packageSource.keyboards, let directoryUrl = packageSource.directoryUrl { @@ -107,13 +101,30 @@ public class KeymanPackage: Identifiable, Hashable, Equatable { return keyboardsArray } - + + /** + * build an array of all the fonts used by the specified array of keyboards + */ + private static func buildFontNamesArray(keyboards: [Keyboard]) -> [String] { + var fontNames: Set = [] + for keyboard in keyboards { + if let oskFontName = keyboard.oskFont { + fontNames.insert(oskFontName) + } + if let displayFontName = keyboard.displayFont { + fontNames.insert(displayFontName) + } + } + return fontNames.sorted() + } + /** * initializer that does not rely on package source -- provided to create unit test data */ - public init(sourceDirectoryUrl: URL, keyboards: [Keyboard], packageName: String, packageVersion: String, author: String? = nil, copyright: String? = nil, jsonFileUrl: URL, readmeFileUrl: URL? = nil, helpFileUrl: URL? = nil, graphicFileUrl: URL? = nil, graphicImage: NSImage? = nil) { + public init(sourceDirectoryUrl: URL, sharePackageUrl: URL? = nil, keyboards: [Keyboard], packageName: String, packageVersion: String, author: String? = nil, copyright: String? = nil, jsonFileUrl: URL, readmeFileUrl: URL? = nil, helpFileUrl: URL? = nil, graphicFileUrl: URL? = nil, graphicImage: NSImage? = nil) { self.id = UUID() self.sourceDirectoryUrl = sourceDirectoryUrl + self.sharePackageUrl = sharePackageUrl self.keyboards = keyboards self.packageName = packageName self.packageVersion = packageVersion diff --git a/mac/KeymanSettings/Tests/KeymanSettingsTests/KeymanSettingsTests.swift b/mac/KeymanSettings/Tests/KeymanSettingsTests/KeymanSettingsTests.swift index 897c7277dfb..1afa7fdccaa 100644 --- a/mac/KeymanSettings/Tests/KeymanSettingsTests/KeymanSettingsTests.swift +++ b/mac/KeymanSettings/Tests/KeymanSettingsTests/KeymanSettingsTests.swift @@ -26,7 +26,7 @@ import Foundation settingsContainer.loadPackages() - #expect(settingsContainer.findPackage(with: packageRepo.testPackageId) != nil) + #expect(settingsContainer.findInstalledPackage(with: packageRepo.testPackageId) != nil) #expect(defaultsRepo.readEnabledKeyboards().contains(moabiteKeyboardKey)) } @@ -37,8 +37,8 @@ import Foundation settingsContainer.loadPackages() // verify that we can find that test package and cannot find the null package - #expect(settingsContainer.findPackage(with: packageRepo.testPackageId) != nil) - #expect(settingsContainer.findPackage(with: packageRepo.nullPackageId) == nil) + #expect(settingsContainer.findInstalledPackage(with: packageRepo.testPackageId) != nil) + #expect(settingsContainer.findInstalledPackage(with: packageRepo.nullPackageId) == nil) } @Test("Check remove package") @MainActor func testRemovePackage() async throws { @@ -48,9 +48,9 @@ import Foundation settingsContainer.loadPackages() // verify that we cannot find the test package after removing it - #expect(settingsContainer.findPackage(with: packageRepo.testPackageId) != nil) - settingsContainer.removePackage(at: 0) - #expect(settingsContainer.findPackage(with: packageRepo.testPackageId) == nil) + #expect(settingsContainer.findInstalledPackage(with: packageRepo.testPackageId) != nil) + settingsContainer.removeInstalledPackage(at: 0) + #expect(settingsContainer.findInstalledPackage(with: packageRepo.testPackageId) == nil) } /** @@ -78,7 +78,7 @@ import Foundation let settingsContainer = SettingsContainer(defaultsRepo: defaultsRepo, packageRepo: packageRepo) settingsContainer.loadPackages() - let package = try #require(settingsContainer.findPackage(with: packageRepo.testPackageId)) + let package = try #require(settingsContainer.findInstalledPackage(with: packageRepo.testPackageId)) // the hittite keyboard is initialized as disabled #expect(!package.isKeyboardEnabled(keyboardKey: hittiteKeyboardKey)) From d228eeb5fedcad561cbce2980c2d23b9c6ef8bd9 Mon Sep 17 00:00:00 2001 From: Shawn Schantz Date: Wed, 15 Jul 2026 14:16:34 -0400 Subject: [PATCH 3/8] feat(mac): remove reference to private property unit test fix --- mac/KeymanSettings/Sources/Model/KeymanPackage.swift | 3 --- .../Tests/KeymanSettingsTests/KeymanSettingsTests.swift | 5 +++-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/mac/KeymanSettings/Sources/Model/KeymanPackage.swift b/mac/KeymanSettings/Sources/Model/KeymanPackage.swift index f1cda3da36b..7d6b92ab486 100644 --- a/mac/KeymanSettings/Sources/Model/KeymanPackage.swift +++ b/mac/KeymanSettings/Sources/Model/KeymanPackage.swift @@ -81,9 +81,6 @@ public class KeymanPackage: Identifiable, Hashable, Equatable { self.keyboards = keyboardsArray self.fonts = KeymanPackage.buildFontNamesArray(keyboards: keyboardsArray) - - print("help url: \(self.helpFileUrl?.path ?? "nil")") - print("fonts: \(self.fonts) for package: \(self.packageName)") } /** diff --git a/mac/KeymanSettings/Tests/KeymanSettingsTests/KeymanSettingsTests.swift b/mac/KeymanSettings/Tests/KeymanSettingsTests/KeymanSettingsTests.swift index 1afa7fdccaa..c4b2a51c6bc 100644 --- a/mac/KeymanSettings/Tests/KeymanSettingsTests/KeymanSettingsTests.swift +++ b/mac/KeymanSettings/Tests/KeymanSettingsTests/KeymanSettingsTests.swift @@ -22,8 +22,9 @@ import Foundation let packageRepo = PackageRepoStub() let settingsContainer = SettingsContainer(defaultsRepo: defaultsRepo, packageRepo: packageRepo) - #expect(settingsContainer.installedPackages.isEmpty) - + #expect(settingsContainer.multiKeyboardPackages.isEmpty) + #expect(settingsContainer.singleKeyboardPackages.isEmpty) + settingsContainer.loadPackages() #expect(settingsContainer.findInstalledPackage(with: packageRepo.testPackageId) != nil) From 88c1232a28553e1c9db776e26356ac93f005aa7e Mon Sep 17 00:00:00 2001 From: Shawn Schantz Date: Thu, 16 Jul 2026 13:30:53 -0400 Subject: [PATCH 4/8] feat(mac): add remove methods for each package list --- mac/Config/Config/ConfigView.swift | 6 ++--- .../KeymanSettings/SettingsContainer.swift | 26 +++++++++++++++---- .../KeymanSettingsTests.swift | 2 +- 3 files changed, 25 insertions(+), 9 deletions(-) diff --git a/mac/Config/Config/ConfigView.swift b/mac/Config/Config/ConfigView.swift index 6ca089e30a6..7a64b4365a5 100644 --- a/mac/Config/Config/ConfigView.swift +++ b/mac/Config/Config/ConfigView.swift @@ -19,8 +19,8 @@ struct ConfigView: View { Image(systemName: "keyboard") .imageScale(.large) .foregroundColor(.accentColor) - Text("multiple keyboard package count = \(settings.singleKeyboardPackages.count)") - Text("single keyboard package count = \(settings.multiKeyboardPackages.count)") + Text("multiple keyboard package count = \(settings.multiKeyboardPackages.count)") + Text("single keyboard package count = \(settings.singleKeyboardPackages.count)") Button("debug") { settings.debug() } @@ -73,7 +73,7 @@ struct ConfigView: View { // Example of Icon-Only Button Spacer() Button(action: { - settings.removeInstalledPackage(at: index) + settings.removeSingleKeyboardPackage(at: index) }) { Label("remove", systemImage: "trash.fill") } diff --git a/mac/KeymanSettings/Sources/KeymanSettings/SettingsContainer.swift b/mac/KeymanSettings/Sources/KeymanSettings/SettingsContainer.swift index 3cf08fce752..246f8a6685c 100644 --- a/mac/KeymanSettings/Sources/KeymanSettings/SettingsContainer.swift +++ b/mac/KeymanSettings/Sources/KeymanSettings/SettingsContainer.swift @@ -323,9 +323,23 @@ public class SettingsContainer : ObservableObject { /** * remove/uninstall the package at the specified index */ - public func removeInstalledPackage(at index: Int) { - let package = self.installedPackages[index] - + public func removeSingleKeyboardPackage(at index: Int) { + let package = self.singleKeyboardPackages[index] + self.removeInstalledPackage(package: package) + } + + /** + * remove/uninstall the package at the specified index + */ + public func removeMultipleKeyboardPackage(at index: Int) { + let package = self.multiKeyboardPackages[index] + self.removeInstalledPackage(package: package) + } + + /** + * remove the installed package + */ + func removeInstalledPackage(package: KeymanPackage) { // will removing this package cause the removal of any enabled keyboards? let removingEnabledKeyboards = !package.getEnabledKeyboardsKeys().isEmpty @@ -333,14 +347,16 @@ public class SettingsContainer : ObservableObject { self.packageRepository.deletePackage(package: package) // remove package from installed packages list - _ = self.installedPackages.remove(at: index) + if let index = self.installedPackages.firstIndex(where: { $0.packageName == package.packageName }) { + self.installedPackages.remove(at: index) + } // if we removed any enabled keyboards, then update settings if removingEnabledKeyboards { self.saveKeyboardState() } } - + /** * returns true if the keyboard is enabled * when enabled, the keyboard appears in the Keyman sub menu in the mac diff --git a/mac/KeymanSettings/Tests/KeymanSettingsTests/KeymanSettingsTests.swift b/mac/KeymanSettings/Tests/KeymanSettingsTests/KeymanSettingsTests.swift index c4b2a51c6bc..68a87d5bada 100644 --- a/mac/KeymanSettings/Tests/KeymanSettingsTests/KeymanSettingsTests.swift +++ b/mac/KeymanSettings/Tests/KeymanSettingsTests/KeymanSettingsTests.swift @@ -50,7 +50,7 @@ import Foundation // verify that we cannot find the test package after removing it #expect(settingsContainer.findInstalledPackage(with: packageRepo.testPackageId) != nil) - settingsContainer.removeInstalledPackage(at: 0) + settingsContainer.removeMultipleKeyboardPackage(at: 0) #expect(settingsContainer.findInstalledPackage(with: packageRepo.testPackageId) == nil) } From 542e32662a92f5cb8b32a78321f174989285321e Mon Sep 17 00:00:00 2001 From: Shawn Schantz Date: Thu, 16 Jul 2026 13:46:12 -0400 Subject: [PATCH 5/8] feat(mac): fix comment --- mac/KeymanSettings/Sources/Model/KeymanPackage.swift | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/mac/KeymanSettings/Sources/Model/KeymanPackage.swift b/mac/KeymanSettings/Sources/Model/KeymanPackage.swift index 7d6b92ab486..317bde45ffb 100644 --- a/mac/KeymanSettings/Sources/Model/KeymanPackage.swift +++ b/mac/KeymanSettings/Sources/Model/KeymanPackage.swift @@ -211,9 +211,8 @@ public class KeymanPackage: Identifiable, Hashable, Equatable { return packageImage } - /** - * build the URL to the executable inside the specified Input Method app + * build the URL where the keyboard can be installed from the Keyman website */ static func buildSharePackageUrl(packageUrl: URL) -> URL? { return URL(string: "https://\(KeymanPaths.keymanDomain)/go/keyboard/\(packageUrl.lastPathComponent)/share") From 29ed0ab4fbc4a19c9917537a5df0ac4a9f03662c Mon Sep 17 00:00:00 2001 From: Shawn Schantz Date: Thu, 16 Jul 2026 14:08:23 -0400 Subject: [PATCH 6/8] feat(mac): added comment --- mac/KeymanSettings/Sources/Model/KeymanPackage.swift | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mac/KeymanSettings/Sources/Model/KeymanPackage.swift b/mac/KeymanSettings/Sources/Model/KeymanPackage.swift index 317bde45ffb..5131d6fa726 100644 --- a/mac/KeymanSettings/Sources/Model/KeymanPackage.swift +++ b/mac/KeymanSettings/Sources/Model/KeymanPackage.swift @@ -218,6 +218,8 @@ public class KeymanPackage: Identifiable, Hashable, Equatable { return URL(string: "https://\(KeymanPaths.keymanDomain)/go/keyboard/\(packageUrl.lastPathComponent)/share") } + // MAC-CONFIG-TODO: cache QR code image, but must be size specific + /** * generate a QR code for sharing the Keyman Package URL */ From b0723563ec9cb94292349dfc85610d4d113a3f98 Mon Sep 17 00:00:00 2001 From: Shawn Schantz Date: Tue, 21 Jul 2026 14:04:38 -0400 Subject: [PATCH 7/8] feat(mac): added author website and default image --- mac/Config/Config/ConfigView.swift | 10 ++++++++-- mac/KeymanSettings/Package.swift | 9 ++++++--- .../Sources/Model/KeymanPackage.swift | 15 ++++++++++++--- .../Sources/Resources/SideImage.bmp | Bin 0 -> 140138 bytes 4 files changed, 26 insertions(+), 8 deletions(-) create mode 100644 mac/KeymanSettings/Sources/Resources/SideImage.bmp diff --git a/mac/Config/Config/ConfigView.swift b/mac/Config/Config/ConfigView.swift index 7a64b4365a5..1859260856a 100644 --- a/mac/Config/Config/ConfigView.swift +++ b/mac/Config/Config/ConfigView.swift @@ -54,11 +54,11 @@ struct ConfigView: View { Text("Scan to visit website:") .font(.headline) - if let qrImage = package.generateSharePackageQRCode(size: 250) { + if let qrImage = package.generateSharePackageQRCode(size: 200) { Image(nsImage: qrImage) .interpolation(.none) // important: keeps the QR edges sharp .resizable() - .frame(width: 250, height: 250) + .frame(width: 200, height: 200) .background(Color.white) // ensures good scanning contrast } else { Text("Failed to generate QR Code") @@ -72,6 +72,12 @@ struct ConfigView: View { .font(.subheadline) // Example of Icon-Only Button Spacer() + if let nsImage = package.graphicImage { + Image(nsImage: nsImage) + .resizable() // Allows resizing + .scaledToFit() // Maintains original aspect ratio + .frame(maxWidth: 140, maxHeight: 250) // Controls the bounds + } Button(action: { settings.removeSingleKeyboardPackage(at: index) }) { diff --git a/mac/KeymanSettings/Package.swift b/mac/KeymanSettings/Package.swift index 94a0570f843..ff9c162e558 100644 --- a/mac/KeymanSettings/Package.swift +++ b/mac/KeymanSettings/Package.swift @@ -25,16 +25,19 @@ let package = Package( .target( name: "KeymanSettings", dependencies: [ - .product(name: "ZIPFoundation", package: "ZIPFoundation") + .product(name: "ZIPFoundation", package: "ZIPFoundation") ], - path: "Sources" + path: "Sources", + resources: [ + .process("Resources") + ] ), .testTarget( name: "KeymanSettingsTests", dependencies: ["KeymanSettings"], path: "Tests", resources: [ - .copy("Resources/amharic.kmp.json") // The test data files, copy files without modifying them + .copy("Resources/amharic.kmp.json") // The test data files, copy files without modifying them ] ), ] diff --git a/mac/KeymanSettings/Sources/Model/KeymanPackage.swift b/mac/KeymanSettings/Sources/Model/KeymanPackage.swift index 5131d6fa726..569202d32e7 100644 --- a/mac/KeymanSettings/Sources/Model/KeymanPackage.swift +++ b/mac/KeymanSettings/Sources/Model/KeymanPackage.swift @@ -16,8 +16,10 @@ import CoreImage.CIFilterBuiltins public class KeymanPackage: Identifiable, Hashable, Equatable { static let defaultImage: NSImage? = { var image: NSImage? = nil - if let imageUrl = Bundle.main.url(forResource: "SideImage", withExtension: "bmp") { - image = NSImage(contentsOf: imageUrl) + if let imageUrl = Bundle.module.url(forResource: "SideImage", withExtension: "bmp") { + image = NSImage(contentsOf: imageUrl) + } else { + print("Error: Could not find SideImage.bmp in the module bundle.") } return image }() @@ -37,6 +39,7 @@ public class KeymanPackage: Identifiable, Hashable, Equatable { public let packageVersion: String public let author: String? + public let websiteUrl: URL? public let copyright: String? // the URL of the readme file within the package public let readmeFileUrl: URL? @@ -54,6 +57,11 @@ public class KeymanPackage: Identifiable, Hashable, Equatable { self.packageName = packageSource.info.name.description self.packageVersion = packageSource.info.version.description self.author = packageSource.info.author?.description + if let websiteUrlString = packageSource.info.website?.url { + self.websiteUrl = URL(string: websiteUrlString) + } else { + self.websiteUrl = nil + } self.copyright = packageSource.info.copyright?.description self.sourceDirectoryUrl = packageSource.directoryUrl! self.jsonFileUrl = packageSource.kmpJsonFileUrl! @@ -118,7 +126,7 @@ public class KeymanPackage: Identifiable, Hashable, Equatable { /** * initializer that does not rely on package source -- provided to create unit test data */ - public init(sourceDirectoryUrl: URL, sharePackageUrl: URL? = nil, keyboards: [Keyboard], packageName: String, packageVersion: String, author: String? = nil, copyright: String? = nil, jsonFileUrl: URL, readmeFileUrl: URL? = nil, helpFileUrl: URL? = nil, graphicFileUrl: URL? = nil, graphicImage: NSImage? = nil) { + public init(sourceDirectoryUrl: URL, sharePackageUrl: URL? = nil, keyboards: [Keyboard], packageName: String, packageVersion: String, author: String? = nil, website: URL? = nil, copyright: String? = nil, jsonFileUrl: URL, readmeFileUrl: URL? = nil, helpFileUrl: URL? = nil, graphicFileUrl: URL? = nil, graphicImage: NSImage? = nil) { self.id = UUID() self.sourceDirectoryUrl = sourceDirectoryUrl self.sharePackageUrl = sharePackageUrl @@ -126,6 +134,7 @@ public class KeymanPackage: Identifiable, Hashable, Equatable { self.packageName = packageName self.packageVersion = packageVersion self.author = author + self.websiteUrl = website self.copyright = copyright self.jsonFileUrl = jsonFileUrl self.readmeFileUrl = readmeFileUrl diff --git a/mac/KeymanSettings/Sources/Resources/SideImage.bmp b/mac/KeymanSettings/Sources/Resources/SideImage.bmp new file mode 100644 index 0000000000000000000000000000000000000000..ac4aa2dded30d4d5af8738842c7484d5a1207bfe GIT binary patch literal 140138 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 SozcH|i+->=tN*jT`2PVIE>0N$ literal 0 HcmV?d00001 From 3e72c9e4a9f54b6a0c1fccbcd42f71b82610d7f3 Mon Sep 17 00:00:00 2001 From: Shawn Schantz Date: Tue, 21 Jul 2026 14:53:14 -0400 Subject: [PATCH 8/8] feat(mac): add method to delete package by UUID --- mac/Config/Config/ConfigView.swift | 2 +- .../KeymanSettings/SettingsContainer.swift | 26 ++++++++----------- 2 files changed, 12 insertions(+), 16 deletions(-) diff --git a/mac/Config/Config/ConfigView.swift b/mac/Config/Config/ConfigView.swift index 1859260856a..2763e1eb2ab 100644 --- a/mac/Config/Config/ConfigView.swift +++ b/mac/Config/Config/ConfigView.swift @@ -79,7 +79,7 @@ struct ConfigView: View { .frame(maxWidth: 140, maxHeight: 250) // Controls the bounds } Button(action: { - settings.removeSingleKeyboardPackage(at: index) + settings.removeInstalledPackage(with: package.id) }) { Label("remove", systemImage: "trash.fill") } diff --git a/mac/KeymanSettings/Sources/KeymanSettings/SettingsContainer.swift b/mac/KeymanSettings/Sources/KeymanSettings/SettingsContainer.swift index 246f8a6685c..be75cb30654 100644 --- a/mac/KeymanSettings/Sources/KeymanSettings/SettingsContainer.swift +++ b/mac/KeymanSettings/Sources/KeymanSettings/SettingsContainer.swift @@ -299,9 +299,9 @@ public class SettingsContainer : ObservableObject { /** * find the installed package with the specified UUID */ - public func findInstalledPackage(with packageId: UUID) -> KeymanPackage? { - guard let package = self.installedPackages.first(where: { $0.id == packageId }) else { - print ("Error: could not find package with ID: \(packageId)") + public func findInstalledPackage(with id: UUID) -> KeymanPackage? { + guard let package = self.installedPackages.first(where: { $0.id == id }) else { + print ("Error: could not find package with UUID: \(id)") return nil } @@ -321,19 +321,15 @@ public class SettingsContainer : ObservableObject { } /** - * remove/uninstall the package at the specified index + * remove/uninstall the package with the specified UUID */ - public func removeSingleKeyboardPackage(at index: Int) { - let package = self.singleKeyboardPackages[index] - self.removeInstalledPackage(package: package) - } - - /** - * remove/uninstall the package at the specified index - */ - public func removeMultipleKeyboardPackage(at index: Int) { - let package = self.multiKeyboardPackages[index] - self.removeInstalledPackage(package: package) + public func removeInstalledPackage(with id: UUID) { + + if let package = findInstalledPackage(with: id) { + self.removeInstalledPackage(package: package) + } else { + print("could not find package with id: \(id)") + } } /**