我是从beta 4开始当成主力机使用的,因此从beta 4开始记录。之后会不定期更新。
Beta 4
命令system_profiler的参数发生改变
之前要查看USB设备,需要使用
system_profiler SPUSBDataType
但是新系统中,参数改变了,变成了SPUSBHostDataType
。并且输出的结果中的属性也有了变化,需要进行对应的修改。
应用伴随系统启动的方式,不同的方法在设置中显示不同
如果要应用伴随系统启动,现在有两种方式:
- 使用Login Item应用,注册一个Login Item辅助程序,系统启动它之后,由它来调用主应用。
- 直接在主应用中调用SMAppService.mainApp.register()。
方法1是很早就有的方式。方法2是后来新增的方式。不过在新系统中,如果你使用的是方法1,那么在设置的启动项中,只有后台有主应用的名字,系统自动其中中不会有。如果是使用的方法2,那么启动项和后台中都会有主应用的名字。
两种方式都可以成功伴随系统启动。
系统常驻菜单栏图标消失问题的解决(下方2025年7月29日有更新)
新系统中,我发现有的应用的菜单栏常驻图标会消失。进一步调查我发现,如果你的菜单栏常驻图标中使用attributedTitle,并且重复设置了相同的值,常驻图标就会消失。
临时解决方案是,每次更改之前比较值是否发生了改变,变了再重新设置。
Beta 4 2025年7月29日更新
系统常驻菜单栏图标消失问题的解决(更新版)
上面的临时解决方案虽然在系统运行时可以解决问题,但是一旦系统睡眠,唤醒之后还是可能出现同样的问题。经过进一步研究,我发现了更好的解决方案:
假设你的代码是类似这种
class AppDelegate: NSObject, NSApplicationDelegate {
private var statusItem: NSStatusItem?
private func setupMenubarTray() {
let statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength)
self.statusItem = statusItem
guard let button = statusItem.button else {
fatalError()
}
// 其他代码
}
}
那么将代码改成
class AppDelegate: NSObject, NSApplicationDelegate {
private var statusItem: NSStatusItem?
private func setupMenubarTray() {
if self.statusItem == nil {
self.statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength)
}
guard let button = self.statusItem?.button else {
fatalError()
}
// 其他代码
}
}
我想问题应该是出在
NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength)
这个函数。它可能没有正确的释放。导致同时存在多个实例了。