【Mac开发之】如何在Mac-Catalyst应用访问AppKi
前言:最近在把一个iOS项目移植到Mac端,最开始写了一个Mac版本的StatusBarItem App,和主App拆分成了两个App。然鹅老板表示最好能把Mac app的功能通过Mac-Catalyst实现,这样就只需要一个App。。那么干饭人只能想办法了。。。
首先Mac-Catalyst是苹果发布的一个帮助开发者将iPad应用移植到macOS上的服务,这些网上有很多资料,就不说了。。但是因为纯iPad应用在移植过程中,可能还要针对Mac版本进行二次开发,比如添加StatusBarItem等。但是Mac-Catalyst仅可使用AppKit API的一小部分,如果你在代码中直接使用例如NSWindow等AppKit API中的类,你就会得到这种报错。。。
最后找到了访问AppKit API的两种方式:使用 Dynamic或者使用Mac bundle。在我的项目里面我采用的是后者的方式,具体实现步骤如下:
1、添加Mac Bundle
命名为MacPlugin我们将其命名为MacPlugin
2、在主Target添加MacPlugin
3、在MacPlugin中创建一个protocol
Plugin.swift@objc(Plugin)
protocolPlugin:NSObjectProtocol {
init()
func sayHello()
}
4、实现MacPlugin.swift
classMacPlugin:NSObject, Plugin {
required over ride init() {
}
func sayHello() {
let alert=NSAlert()
alert.alertStyle=.informational
alert.messageText="Hello from AppKit!"
alert.informativeText="It Works!"
alert.addButton(withTitle:"OK")
alert.runModal()
}
}
5、在主程序加载bundle
OK!以上