1. 准备条件
-
两套证书-一套主项目的,一套widget的
-
widget的证书注意点:
- widge的Bundle ID 是在主项目的bundle id 的基础上加的:主-
com.dx.widgetTestMain
widget-com.dx.widgetTestMain.widgetTestWidget
- widget的app id创建的时候要配置App Groups项,创建app id 后要去创建一个app groups,然后把创建好的App groups 配置到对应的appid里面。
- widge的Bundle ID 是在主项目的bundle id 的基础上加的:主-
-
创建项目:在项目里新建Today Extension 创建一个新的Xcode项目,创建好之后在:创建
Xcode->File->New->Target->Widget Extension
创建我们的Widget -
项目配置:
NSExtensionPrincipalClass
自定义的启动界面用纯代码构建布局 -
<u>添加URL Schemes 在主app里配置Targets->MCWidegtDemo->Info->Url Types-> 设置url schemes 为TodayWidget </u>
-
通过app groups共享数据(IOS8新开放功能,主要用于同-Group下的App共享同一份读写空间),可以用NSUserDefaults和NSFileManager两种方式实现extension和主app之间的数据共享
-
创建app groups
-
<u>在主程序和扩展程序中分别设置打开app group设置group名称。
主App跟扩展app的groupName要相同
,并且与在开发者网站注册的app groups保持一致。</u> -
数据读取跟保存时必须指明group id
项目默认是有storyboard的,这里我想使用纯代码,所以把他删除了,删除后我们要配置一下启动界面,在TodayWidget->Info.plist->Extension
删除 NSExtensionMainStoryboard 选项
增加 NSExtensionPrincipalClass,value 为 类的名字 TodayViewController
这个时候你就可以用纯代码构建布局了
- 如果小部件提供用户可配置的属性,请选中Include Configuration Intent复选框。
- iOS13上的Widget不支持部件堆叠,通过上下滑动切换。而在14上支持。14还支持在任意主界面上进行Widget页面的编辑。
除了显示上的区别外,代码的实现上也有不同
iOS13上的Widget默认是根据开发语言的选择上为基础,生成组件。如OC的项目生成OC的Widget组件,Swift的项目生成Swift的Widget组件。而且14上则是默认里Swift和SwiftUI为语言基础进行开发。
<u>在14上使用的是新的WidgetKit框架而非13的Today Extension。UI部分只能够使用SwiftUI来开发,所以需要一定的SwiftUI和Swift基础。</u>
14的Widget需要依赖Xcode12.0版本。
屏幕尺寸 - portrait 小部件-systemSmall 中型部件-systemMedium 大部件-systemLarge
414x896 pt (XR/XsMax/11/11ProMax) 169x169pt 360x169pt 360x379pt
375x812 pt (X/Xs/11 Pro) 155x155 pt 329x155 pt 329x345 pt
414x736 pt (6p/6sp/7p) 159x159 pt 348x159 pt 348x357 pt
375x667 pt (6/6s/7/8) 148x148 pt 321x148 pt 321x324 pt
320x568 pt (5/5s/SE) 141x141 pt 292x141 pt 292x311 pt
demo
未完。。。。
网友评论