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 | 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
13guard 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.json1
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