开发者社区 > 博文 > Widget开发实践
分享
  • 打开微信扫码分享

  • 点击前往QQ分享

  • 点击前往微博分享

  • 点击复制链接

Widget开发实践

  • 京麦研发团队
  • 2021-03-26
  • IP归属:未知
  • 493760浏览

    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处理


    共0条评论