Use macOS hostname for device name

This commit is contained in:
Kaede Akino committed 2026-09-22 20:57:12 +08:00
1 parent aff6cfc3b7
commit 3034d40756
3 files changed
+62 -2

No files matched your search

+1 -2
View File
@@ -1,5 +1,4 @@
import AgentKitScrubber
import DeviceKit
import SwiftData
import SwiftUI
import TermindApplication
@@ -159,7 +158,7 @@ struct TermindApp: App {
}
fileprivate static var computerName: String {
Device.current.safeDescription
MacDeviceName.current
}
#if canImport(AppKit)
+30
View File
@@ -0,0 +1,30 @@
import Darwin
import DeviceKit
import Foundation
enum MacDeviceName {
static var current: String {
resolved(kernelHostname: kernelHostname(), fallback: Device.current.safeDescription)
}
static func resolved(kernelHostname: String?, fallback: String) -> String {
guard let kernelHostname else { return fallback }
let hostname = kernelHostname.trimmingCharacters(in: .whitespacesAndNewlines)
return hostname.isEmpty ? fallback : hostname
}
static func kernelHostname() -> String? {
var size = 0
guard sysctlbyname("kern.hostname", nil, &size, nil, 0) == 0, size > 0 else {
return nil
}
var buffer = [CChar](repeating: 0, count: size)
guard sysctlbyname("kern.hostname", &buffer, &size, nil, 0) == 0 else {
return nil
}
let utf8 = buffer.prefix { $0 != 0 }.map { UInt8(bitPattern: $0) }
return String(decoding: utf8, as: UTF8.self)
}
}
+31
View File
@@ -0,0 +1,31 @@
import Foundation
import Testing
@testable import Termind
struct MacDeviceNameTests {
@Test
func kernelHostnameTakesPriorityOverFallback() {
let hostname = UUID().uuidString
#expect(
MacDeviceName.resolved(
kernelHostname: hostname,
fallback: "fallback"
) == hostname
)
}
@Test
func unavailableOrEmptyKernelHostnameUsesFallback() {
let fallback = UUID().uuidString
#expect(MacDeviceName.resolved(kernelHostname: nil, fallback: fallback) == fallback)
#expect(MacDeviceName.resolved(kernelHostname: "", fallback: fallback) == fallback)
#expect(MacDeviceName.resolved(kernelHostname: " \n ", fallback: fallback) == fallback)
}
@Test
func kernelHostnameIsReadable() throws {
let hostname = try #require(MacDeviceName.kernelHostname())
#expect(!hostname.isEmpty)
}
}