TodayExtension入坑指南

添加Today Extension

File > New > Target > Application Extension > Today Extension

_2016_08_18_12_01_36

Widget和主程序共享数据

App Groups
iOS8以后,同一个开发者账号可以通过group共享资源,我们可以通过App Groups,共享Widget和程序的NSUserDefaults的数据

  • 注意:suiteName必须和dev center中定义的app group的identifier ID一致
  • App的Target和Widget的Target都要设置为同一个group
    1
    NSUserDefaults *ud = [[NSUserDefaults alloc] initWithSuiteName:@"group.blacktea"];

_2016_08_17_7_48_46

同过Widget插件启动App

NSExtensionContext

  • 主程序设置URL Schemes

    _2016_08_17_11_42_19

  • 通过UIViewController的extensionContext属性,可以通过Scheme启动App主程序

1
[self.extensionContext openURL:[NSURL URLWithString:@"blacktea://finished"] completionHandler:nil];

调整Widget尺寸

设置preferredContentSize

  • 设置宽度是不生效的,默认是整屏的宽度,直接设置高度即可
1
self.preferredContentSize = CGSizeMake(0, 80 * 3);

调整Widget的Edge

1
2
3
4
5
6
7
8
- (UIEdgeInsets)widgetMarginInsetsForProposedMarginInsets:(UIEdgeInsets)margins
{
margins.bottom = 10.0;
margins.left = 0;
margins.right = 0;
margins.top = 10.0;
return margins;
}

系统通知用户刷新界面

系统会在适当的时候让Widget刷新数据。可以做一些网络数据请求,并更新Widget视图的数据。

  • 需要实现NCWidgetProviding协议和widgetPerformUpdateWithCompletionHandler方法
1
2
3
4
5
6
7
8
9
10
- (void)widgetPerformUpdateWithCompletionHandler:(void (^)(NCUpdateResult))completionHandler {
// Perform any setup necessary in order to update the view.
// If an error is encountered, use NCUpdateResultFailed
// If there's no update required, use NCUpdateResultNoData
// If there's an update, use NCUpdateResultNewData
// 网络请求,成功或失败通过completionHandler告知系统
completionHandler(NCUpdateResultNewData);
}

Widget 调试

  • 调试

需要通过Debug设置才能对Wigget代码进行调试
Debug > Attach to Process by PID or Name

_2016_08_18_11_17_49

  • Log

Widget的Log需要通过Devices的console查看
Windows > Devices > 对应的设备

_2016_08_18_11_29_49

Blacktea wechat
ex. subscribe to my blog by scanning my public wechat account
记录生活于感悟,您的支持将鼓励我继续创作!