Today Extension和3D Touch

Today Extension

1.点击文件,选择如下图








2.选择scheme为demo,run之后显示“hello world”

在MainInterface.storyboard里或在TodayViewController里的viewdidload方法里布局UI(跟app开发一样)

3.当需要与主app共享数据时,需配置App Group,具体如下图


注:App Group为空时,请点左下角的”+”

1
let userDefault = UserDefaults(suiteName: "group.shine")!

使用userDefault来存储需要共享的数据

4.当extension需要调用主app的方法时通过URL方式
1
2
3
self.extensionContext?.open(URL(string: "shineDemo://todayExtension?index=0")!, completionHandler: { (res) in

})

主App配置URL的scheme

3D Touch

上代码(动态3D Touch方式)

1
2
3
4
5
6
7
8
9
10
11
12
13
guard let filePath = Bundle.main.url(forResource: "3dtouchdemo", withExtension: "json"),
let data = try? Data.init(contentsOf: filePath),
let json = (try? JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.mutableContainers)) as? [[String: Any]] else {
return
}

var items = [UIApplicationShortcutItem]()
for jsonItem in json {
let icon = UIApplicationShortcutIcon(type: shortcutIconWithType(jsonItem["icon"] as! String))
let item = UIApplicationShortcutItem(type: jsonItem["icon"] as! String, localizedTitle: jsonItem["title"] as! String, localizedSubtitle: (jsonItem["subtitle"] as! String), icon: icon, userInfo: jsonItem["userInfo"] as? [AnyHashable : Any])
items.append(item)
}
UIApplication.shared.shortcutItems = items

附:3dtouchdemo.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[{
"icon": "add",
"title": "增加",
"subtitle": "增加-add",
"userInfo": {
"type": "add"
}
},{
"icon": "alarm",
"title": "闹钟",
"subtitle": "闹钟-alarm",
"userInfo": {
"type": "alarm"
}
}]

在AppDelegate委托方法里实现点击后的事件处理,可以通过UIApplicationShortcutItem的type来判断不同的Item

-------------本文结束感谢您的阅读-------------