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的创建
File->New->Target
选择 Today Extension
输入这个Widget的名字
工程如下图,会多了一个Widget的文件夹,里边会有一个控制器,一个故事版和一个plist文件
证书创建(此证书需要支持APP GroupS功能)
先创建一个App Groups字符串
填写对应的字符串和这个App Groups的名字,点击继续,即可创建成功
工程设置:
代码实现:
这个东西肯定是要写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都会用到。