iOS_Widget搭建
前言
尝试开发TodayWidget前查了些资料,自己动手时发现,那些技术博客等文档,对于widget的开发,大多都有些陈旧。在Xcode 9环境下,无需itunes connect申请widget ID,无需安装繁多的证书,可以直接进行开发!!!本文将会涵盖widget开发的所有入门内容,保证从0开始,一步步搭建一个可上架的widget项目!
重点
1. 无需安装证书及申请额外Bundle identifier;
2. 不能调整widget视图高度(iOS 11);
3. 文件数据共享要点;
4. widget搭建完整流程。
文章目录
1. 添加widget
2. 设计UI(代码实现)
3. 共享数据及文件
4. 额外功能的实现(App跳转)
5. 需要注意的事项
1. 添加widget
File --> New --> Target
![](https://img.haomeiwen.com/i5992327/ceea4aab06f5ca78.png)
命名,添加后,工程目录下会看到这个group:
![](https://img.haomeiwen.com/i5992327/cdd493ede52b9ac3.png)
现在widget已经添加完成了。
对!就是那么简单!不需要额外申请ID,不需要安装证书,运行一下就可以在Today Extension下看到一个“hello word”小组件了。
2. 设计UI(代码实现)
这里只介绍代码实现的方法,需要修改一下info.plist配置。如果喜欢用storyboard,那和普通的视图搭建没什么区别~
点击上图中的info.plist文件
- 删除 NSExtensionMainStoryboard
- 添加NSExtensionPrincipalClass (String) TodayViewController
得到以下结果:
![](https://img.haomeiwen.com/i5992327/175592c81f1f25b2.png)
开始设计UI
在唯一的viewController文件,和一般的视图搭建没有太多不同。讲几点需要注意的。
-widget高度调整
widget默认高度110像素,搜索到的资料显示,调整高度用这个方法
![](https://img.haomeiwen.com/i5992327/b50317f1058926c2.png)
在iOS 11系统下,此方法无效。
笔者添加了手机上250+个App的所有widget组件,全部都是默认高度!未发现一个例外!!!
至此,大致可以下结论:
iOS 11中,TodayWidget高度不可调整。上图方法虽然没有标明已经弃用,虽然打断点发现依然被执行,但是很可惜,并没有效果。【望各位不要和笔者一样苦苦钻研,才终于明发现这一事实。】
-数据共享
当需要调用主App中的持久化数据、文件、图片等一切资料时,务必共享数据!!!这一点在下一部分着重展开。
3. 共享数据及文件
-文件、图片等
这一类比较简单,步骤如下:
点击需要共享的文件,右侧Target Membership点选TodayWidget,共享文件。
![](https://img.haomeiwen.com/i5992327/3004ddde41c9a28c.png)
或者在添加文件时,点击Options ,点选TodayWidget
![](https://img.haomeiwen.com/i5992327/85103b684fe0c8a4.png)
就可以使用了:)
-持久化数据(NSUserDefault)
将TodayWidget和主App设置在同一组内【需联网】
![](https://img.haomeiwen.com/i5992327/95565359fab6c36c.png)
通过NSUserDefault进行数据共享。
保存:
![](https://img.haomeiwen.com/i5992327/65cb3036181ab714.png)
提取:
![](https://img.haomeiwen.com/i5992327/55442a0378f0c788.png)
搞定。👌
![](https://img.haomeiwen.com/i5992327/7cb5bb79fa1a17a7.png)
4. 额外功能的实现
-widget跳转主App
需要通过URL Schemes进行跳转。
设置App的URL:
主App的info.plist文件中添加以下字段:
![](https://img.haomeiwen.com/i5992327/27755e614f69b854.png)
在widget中使用如下方法跳转:
![](https://img.haomeiwen.com/i5992327/ab2cb1f117721dc9.png)
-其他有需要再补充……
5. 需要注意的事项
-版本号需保持相同
Project 中,主App与TodayWidget版本号需一致。
![](https://img.haomeiwen.com/i5992327/9a4f33d4f97988a4.png)
提交二进制文件时,若版本号不一致,会报错,但仍然可以成功上传,不知道直接上架会发生什么错误。
![](https://img.haomeiwen.com/i5992327/c0a4c3eaeb910148.png)
-widget视图进行NSLog
运行的项目选择widget,这个大家应该都知道哦。
![](https://img.haomeiwen.com/i5992327/1dbf8003e46efb36.png)
最后成品,用自己的App《问卦六爻》为例。
Today Extension:
![](https://img.haomeiwen.com/i5992327/3c46d0b1d8947013.png)
3D Touch:
![](https://img.haomeiwen.com/i5992327/457a0ae43b5436ca.png)
完。