【Mac开发之】如何在Mac-Catalyst应用访问AppKit

前言:最近在把一个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!以上

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 夜莺2517阅读 127,811评论 1 9
  • 版本:ios 1.2.1 亮点: 1.app角标可以实时更新天气温度或选择空气质量,建议处女座就不要选了,不然老想...
    我就是沉沉阅读 11,846评论 1 6
  • 我是一名过去式的高三狗,很可悲,在这三年里我没有恋爱,看着同龄的小伙伴们一对儿一对儿的,我的心不好受。怎么说呢,高...
    小娘纸阅读 8,733评论 4 7
  • 这些日子就像是一天一天在倒计时 一想到他走了 心里就是说不出的滋味 从几个月前认识他开始 就意识到终究会发生的 只...
    栗子a阅读 5,539评论 1 3

友情链接更多精彩内容