Widget支持iOS 14以上系统,UI必须为swift UI,所以需要SwiftUI和Swift基础,XCode 12开发工具,iOS 14以上手机,废话不多说,直接上干货!
创建步骤如下:
通过Xcode -> File ->New->Target


这个名字安装功能起就行,Include Configuration Intent这个选项暂时不勾选,这选项主要是用来支持你自定义一些属性配置(例如天气组件,用户可以选择城市,股票组件,用户可以编辑这个组件,不勾选的话是不会有编辑功能的),有兴趣的可以自己试试,这里就先不勾了,下一步

然后会在项目左侧栏中新加了一个文件夹如下:

直接运行看看效果

桌面会直接生成这个组件。然后长按组件点编辑主屏幕,点+,选中app会有三种尺寸。

JMWidgetDemo.swift文件解读


数据共享
App 与 Widget 可以通过网络数据和本地数据两种方式进行数据的共享。
1、 网络数据可通过 URLSession 完成数据的请求与解析。
2、本地数据共享可以通过 App Groups,它是 iOS 8 之后推出的在 App 之间共享数据的方式,只需要简单的配置就可以实现数据的共享。
通过App Group 来实现具体操作如下:
新建App Group
TARGETS->Signing & Capabiliities->+

双击就会自动生成

新建完App Group之后,我这边是用UserDefaults来实现共享数据,如下:
主app中保存数据
这个initWithSuiteName 就是上面新建App Group生成的:group.com.xxxxx,主app 中保存数据到UserDefaults中。

在JMWidgetDemo.swift文件中获取数据

OC主项目刷新Widget组件
系统提供在主app中控制widget刷新方法分别是
l 刷新所有的widget
WidgetCenter.shared.reloadAllTimelines()
l 根据widget名称对指定的widget进行刷新
WidgetCenter.shared.reloadTimelines(ofKind: "Widget1")
具体操作如下:
新建一个Swift文件,如下:

两Targets都要勾选哦,然后Create

可能有朋友会发现,为什么我的没有提示这个呢(可能工程之前有配置过,然后点了取消或者不创建那么之后就不会提示了)。那么:

把这个路径删除之后再重新创建文件就会有提示了,然后生成了JMDemo-Bridging-Header这个桥接文件(Swift调用oc会用到这个文件),我们可以看出它是以工程名-Bridging-Header这种方式命名的如下

然后我们command+B ,系统默认会给我们生成一个看不见的文件,JMDemo-Swift.h,这个文件就是co调用 Swift的关键文件。验证一下:

注意:一定要用<>导入要不然是找不到的。然后可以点进去看看这个文件:

主APP刷新Widget

然后我们command+B ,在点进刚才JMDemo-swift.h这个文件拉到最下面看一下你会发现咦?好熟悉,对没错帮我自动生成了oc方法,这样就能愉快的玩耍了:

那么Swift如何调用OC呢,具体操作如下:
导入需要用到的头文件就可以了

JMExtensionManager声明
![]()
Swift调用
![]()
View与主应用交互提供两种交互方式如下
1、widgetURL
2、Link
在-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options处理






