Widget开发的那点儿事

Widget理解

官方解释:

1、app extension:extension是iOS8新开放的一种对几个固定系统区域的扩展机制,extension并不是一个独立的app,它有一个包含在app bundle中的独立bundle,extension的bundle后缀名是.appex。当然它有好多类型,如下图官方文档上介绍的那天,今天我们主要讲解的就是Today中的,又叫做widget。

2、containing app:包含extension的app就是containning app,因为extension不能单独存在,所以必须得依附在一个正常的app里,这样才能提交商店。
3、host app:能够调起extension的app被称为host app,比如widget的host app就是Today。
我们看下它们三者之间是如何工作的,如下图:


个人理解:

在我看来,widget其实就是一个小型的APP,可做简单,可做复杂,最简单的:一个主APP的logo,一个按钮(可点击进入主APP);比较复杂的:Widget有主APP的某一个或者几个模块的功能,其中有UI的展示和数据的对接等。

Widget开发流程

BundleId的创建 

就像前文说的,我们做的这个Widget其实就是一个新的小型APP,所以需要有一个对应的BundleId,创建流程如下:
File->New->Target

选择 Today Extension

输入这个Widget的名字

工程如下图,会多了一个Widget的文件夹,里边会有一个控制器,一个故事版和一个plist文件

证书创建(此证书需要支持APP GroupS功能)

这个证书的创建我在前边有两篇文章都有概述了,可以移步: 苹果推送的那点儿事儿,这篇文章里有推送证书的创建,APP Groups和这个是一样的,有点差别就是这个是需要创建APP Groups,支持APP Groups功能。如图:

先创建一个App Groups字符串


填写对应的字符串和这个App Groups的名字,点击继续,即可创建成功



然后我们就是在App IDs中把相应的ID加上app Groups功能即可。
由于widget是一个新的APP,所以我们在创建这个证书的时候,其实是应该创建两个的,两个是一套,主APP一个,Widget一个。BundleID命名最好是主APP的bundleID,加上“.widget”,知道这个证书是干嘛的。两个bundleID都有哪个APP Groups功能,通过上边的app Groups中的group字符串联系起来。

工程设置:

上边两步把widget和APP Groups创建出来,就是为了这一步服务,找到工程->capabilities->App Groups,点击开启,输入刚创建的App Groups字符串,主APP和widget都需要这么操作:如下图

代码实现:

这个东西肯定是要写AppDelegate中的,由于功能可能比较繁琐,建议一个单例类,专门用来管这个Widget跳转逻辑的,在APPDelegate中由如下方法可用:

//iOS8~iOS10
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
    if ([[JumpToHostApp shareInstance] isWidgetEventWithUrl:url]) {
        [[JumpToHostApp shareInstance] setLaunchURL:url canJump:mAppLaunched];
    }
     return YES;
}
//ios 10及以后走
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options {
    if ([[JumpToHostApp shareInstance] isWidgetEventWithUrl:url]) {
        [[JumpToHostApp shareInstance] setLaunchURL:url canJump:mAppLaunched];
    }
    return YES;
}

我们在做的时候主要就是依赖于这个app groups字符串,数据共享,跳转主APP都会用到。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值