前言:最近在把一個iOS項目移植到Mac端,最開始寫了一個Mac版本的StatusBarItem App,和主App拆分成了兩個App。然鵝老板表示最好能把Mac app的功能通過Mac-Catalyst實現(xiàn),這樣就只需要一個App。。那么干飯人只能想辦法了。。。
首先Mac-Catalyst是蘋果發(fā)布的一個幫助開發(fā)者將iPad應用移植到macOS上的服務,這些網(wǎng)上有很多資料,就不說了。。但是因為純iPad應用在移植過程中,可能還要針對Mac版本進行二次開發(fā),比如添加StatusBarItem等。但是Mac-Catalyst僅可使用AppKit API的一小部分,如果你在代碼中直接使用例如NSWindow等AppKit API中的類,你就會得到這種報錯。。。

????最后找到了訪問AppKit API的兩種方式:使用?Dynamic或者使用Mac bundle。在我的項目里面我采用的是后者的方式,具體實現(xiàn)步驟如下:
1、添加Mac Bundle

我們將其命名為MacPlugin
2、在主Target添加MacPlugin

3、在MacPlugin中創(chuàng)建一個protocol

@objc(Plugin)
protocolPlugin:NSObjectProtocol {
init()
func sayHello()
}
4、實現(xiàn)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!以上