先感谢无私分享的博主大大们,一并附上一波入门贴:
iOS开发之widget实现
iOS开发之widget的简单实现
从0到1思考与实现iOS-Widget
iOS widget开发
iOS开发-widget基础
iOS之widget开发(Today Extension)
1. widget是一个什么东西?
Web Widget,中文译名被称作是微件,是一小块可以在任意一个基于HTML的Web页面上执行的代码,它的表现形式可能是视频,地图,新闻,小游戏等等。它的根本思想来源于代码复用,通常情况下Widget的代码形式包含了DHTML,JavaScript以及Adobe Flash。
简单点说就是一个小挂件,小应用,为主应用服务的一个小而美的存在形式
在iOS中这样的挂件类似于通知栏,存在于在屏幕的最左边,然后还可以在支持3D touch功能的设备上按住可以看到缩小版的widget的一个快捷方式.
2. 如何创建这样一个应用?
打开Xcode->File->New 一个 Target-> iOS Today Extension 直接创建就ok啦
3. 需要做哪些配置?
使用的是纯代码,所以把系统自动生成的StoryBoard删掉,然后在info.plst里添加字段NSExtension
,对应的Value是一个字典类型,代码如下:
<dict>
<key>NSExtensionPointIdentifier</key>
<string>com.apple.widget-extension</string>
<key>NSExtensionPrincipalClass</key>
<string>TodayViewController</string>
</dict>
做好这些配置之后,进行groupID的绑定
当然是自定义的这个ID,保证主app与widget两边的通信,数据互通
操作如下: 点击蓝色工程->Capabilities -> APP Groups 打开开关按钮-> + 创建一个groupID
然后会自动生成两个文件,一个是宿主app的,一个是widget的, 是plist格式的文件, 它的XML代码如下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.application-groups</key>
<array>
<string>group.com.t.widget.app</string>
</array>
</dict>
</plist>
4. 代码如何构建?
不知道是什么问题,调用不了宿主APP里的文件,搞得我重新创建了一些辅助类,布局类Masonry也用不了,貌似要用pod打入~~ 后续再看, 写代码和宿主app一个样,几个代理方法以及生命周期的时机把控
主要是事件的处理和app跳转,解析参数之类的一些技巧.
在app里新建一个url scheme , widgetDemo , 跳转的时候拼上参数, widgetDemo: //args = homePage
然后在Appdelegate的- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
回调方法里做解析判断,然后做一些事情...
5. 有什么用途?
- 在不改变宿主app本身的情况下,新增了一个APP入口或展示切面,shortCut操作更加快捷以及方便
- 轻量级的应用使用方便,不占用空间
- 提升了app的逼格以及用户的体验
......
网友评论