本文主要参考:如何从Mac Catalyst Apps拜访AppKit API,写得有点复杂,我就按我的想法从头写了一遍进程。
Demo地址:LottiePreviewer,用UIKit开发的Mac App Demo。
Lottie,有时候我想先看作用再写代码,但想看作用就得去官网上传文件才干够预览,感觉好麻烦。不如我自己写个demo来直接预览作用吧,不过要先把文件丢进项目再跑起来才干预览,相同好麻烦…
突然想到,用Drag and Drop
的话,是不是能打开个模拟器,直接把文件丢进去得了?试了下,不支持从Mac丢文件进模拟器的…
那只能搞个Mac App咯,还好SwiftUI支持多渠道开发,然而,UIKit的代码(预览lottie这部分的代码),不能运行在Mac环境上…
那咋办,根本代码已经写好了,真实不想用AppKit从头写一套… 经百度谷歌,本来苹果很早之前就推出了Mac Catalyst
,用于开发者运用UIKit开发Mac App,真的孤陋寡闻了。
Mac Catalyst的运用
- 创立一个UIKit工程,然后增加
Mac Catalyst
:
就这么简略,能够在Mac上运行iOS App了。
不过已然开发Mac App,一般都会需求用到AppKit
,例如设置菜单栏和状态栏之类的,而我这个小工具需求跟Mac进行数据交互,就需求运用AppKit
去拜访,持续。
- 首要增加Mac环境的Target:
有了这个Bundle就能够在这个Target里边运用AppKit
的代码了(也便是在Mac环境下)。
- 导入Bundle:
Bundle只挑选Mac Catalyst
渠道可运用,不然会报错,因为主Target是iOS环境,不认识AppKit
。
- 创立一个Channel协议类
这个Channel
是用来打通iOS和Mac、用于通信的协议类(主Target和刚刚增加的Bundle Target都能拜访)。
接着Mac这边创立一个名为MacPlugin
且遵守该协议的类,MacPlugin
是专门用来在Mac这边做事情的:
而iOS这边就创立一个MacChannel
类,然后通过Channel
类型笼统创立一个MacPlugin
的大局静态对象:
这样就能够在iOS这边叫MacPlugin
去帮忙干Mac的活了,相似Flutter的Channel,让它专门去跟Mac那儿对接:MacChannel(iOS) –> Channel –> MacPlugin(MacOS)。
运用Drag and Drop
我的目的是想直接丢文件进来就能够预览,这样就不必每次从头跑项目,经实测,Mac Catalyst
支持在Mac上运用UIKit的Drag and Drop
,至于Drag and Drop
的用法网上许多介绍,这儿不赘述了,能够看看这篇文章:DragAndDropKit-iOS15下一行代码集成跨运用间拖拽传递数据。
LottiePreviewer
LottiePreviewer是一个用于快速预览Lottie的Mac小工具,便是用Mac Catalyst
开发的,功能很简略,便是预览Lottie罢了,最主要是想熟悉一下Mac Catalyst
和AppKit
的根本运用。
- 快速预览lottie(把zip包丢进App即可)
- 截取动画任意一帧生成图片&导出动画视频
Demo地址:LottiePreviewer
- PS:编译之后把安装包丢到运用程序里边今后直接运用。