一捶索、背景
最近工作不是特別繁瑣蜈膨,所以空閑時間給自己充充電躺翻,提升技術(shù)的同時對自己的寫東西和表達(dá)能力也會有所加強(qiáng)鳞芙。WWDC2016 對于我等屌絲來說也只能遠(yuǎn)觀之眷柔,所以在介紹 Today Widget 之前先來簡單聊聊WWDC的 xcode8 ios10期虾。
二、xcode8 ios10
xcode
1.View Debugging 可以幫助我們查找內(nèi)存問題
2.自動匹配證書描述文件這塊做了很大的改進(jìn)
3.兼容了swift3的改進(jìn)驯嘱,swift3改變很大(學(xué)習(xí)中)
...
ios10
1.SiriKit
2.User Notifications
3.iMessage Apps
...
三镶苞、Extension
2014年ios8發(fā)布以來對于擴(kuò)展(Extension)一直在更新,現(xiàn)在到ios10也增加了很多不同擴(kuò)展鞠评。蘋果也是在慢慢對開發(fā)者放開權(quán)限茂蚓,下面就來介紹一個Today Widget
四、Today Widget
ios10 對Today Widget做了一些功能更新剃幌,更新如下
- 鎖屏下拉通知欄左滑可以看到我們的Widget,在Widget的右上角有一個“展開”聋涨、“折疊”的功能
- 在支持3D Touch的蘋果手機(jī)上,長按可以彈出折疊后的Widget
廢話少說下面開始我們的工作
環(huán)境: xcode8 iOS10 swift
步驟一:創(chuàng)建Today Widget
-
在我們已有的工程里面創(chuàng)建(demo:在文章的最下面有g(shù)ithub連接 SwiftTodayWidget) File->New->Target->Today Widget
步驟二:創(chuàng)建支持?jǐn)?shù)據(jù)共享的App Groups
- 在我們的開發(fā)者賬號中找到App Groups創(chuàng)建id:group.com.tyjy.SwiftTodayWidget
步驟三:創(chuàng)建應(yīng)用
- 主應(yīng)用:com.tyjy.SwiftTodayWidget
- 擴(kuò)展:com.tyjy.SwiftTodayWidget.SwiftTodayWidgetExt
重要:主應(yīng)用和擴(kuò)展相當(dāng)于兩個獨(dú)立的應(yīng)用负乡,發(fā)布到AppStore要用兩個不同的Bundle Identifier牍白、兩個不同的描述文件
步驟四:打開App Groups
- 在主程序和擴(kuò)展中都得打開App Groups,同事勾選步驟二創(chuàng)建的group.com.tyjy.SwiftTodayWidget
步驟五:共享數(shù)據(jù)
- 主程序?qū)懭霐?shù)據(jù)
let userDef = UserDefaults.init(suiteName: "group.com.tyjy.SwiftTodayWidget");
userDef!.set(self.txtNumber.text, forKey: "numberValue");
userDef?.synchronize();
self.lbNumber.text = self.txtNumber.text!;
- 擴(kuò)展顯示
//獲取共享值
let userDef = UserDefaults.init(suiteName: "group.com.tyjy.SwiftTodayWidget");
self.lbNumber.text = String(userDef!.value(forKey: "numberValue")!);
userDef?.synchronize();
步驟六:展開抖棘、折疊功能
@IBOutlet weak var lbNumber: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
//設(shè)置展開與收縮
self.extensionContext?.widgetLargestAvailableDisplayMode = NCWidgetDisplayMode.expanded;
self.preferredContentSize = CGSize(width: UIScreen.main.bounds.width, height: 100);
//獲取共享值
let userDef = UserDefaults.init(suiteName: "group.com.tyjy.SwiftTodayWidget");
self.lbNumber.text = String(userDef!.value(forKey: "numberValue")!);
userDef?.synchronize();
}
func widgetActiveDisplayModeDidChange(_ activeDisplayMode: NCWidgetDisplayMode, withMaximumSize maxSize: CGSize) {
if activeDisplayMode == NCWidgetDisplayMode.compact {
self.preferredContentSize = CGSize(width: UIScreen.main.bounds.width, height: 100);
}else{
self.preferredContentSize = CGSize(width: UIScreen.main.bounds.width, height: 200);
}
}
步驟七:擴(kuò)展喚醒主程序
擴(kuò)展可以喚醒到主程序的不同頁面茂腥,在喚醒過程中擴(kuò)展可以傳值到主程序,這里就不介紹了切省,主要是在主程序plist里面添加如下:
總結(jié):
1.如果在共享數(shù)據(jù)擴(kuò)展沒有及時更新的時候最岗,我們手動關(guān)掉擴(kuò)展再打開就解決了
2.證書這塊xcode8可以自動為我們創(chuàng)建很多東西,不用我們手動創(chuàng)建了数尿,重復(fù):發(fā)布到AppStore必須是不同的bundle id 和描述文件
3.demo源碼:https://github.com/wudanfeng/SwiftTodayWidget.git
4.為了方便demo的圖片仑性、名字和證書都用的公司的一個項(xiàng)目