ios10 Extension Today Widget

一、背景

最近工作不是特別繁瑣,所以空閑時(shí)間給自己充充電,提升技術(shù)的同時(shí)對(duì)自己的寫(xiě)東西和表達(dá)能力也會(huì)有所加強(qiáng)。WWDC2016 對(duì)于我等屌絲來(lái)說(shuō)也只能遠(yuǎn)觀之,所以在介紹 Today Widget 之前先來(lái)簡(jiǎn)單聊聊WWDC的 xcode8 ios10

二、xcode8 ios10

xcode

1.View Debugging 可以幫助我們查找內(nèi)存問(wèn)題
2.自動(dòng)匹配證書(shū)描述文件這塊做了很大的改進(jìn)
3.兼容了swift3的改進(jìn),swift3改變很大(學(xué)習(xí)中)
...

ios10

1.SiriKit
2.User Notifications
3.iMessage Apps
...

三、Extension

2014年ios8發(fā)布以來(lái)對(duì)于擴(kuò)展(Extension)一直在更新,現(xiàn)在到ios10也增加了很多不同擴(kuò)展。蘋(píng)果也是在慢慢對(duì)開(kāi)發(fā)者放開(kāi)權(quán)限,下面就來(lái)介紹一個(gè)Today Widget

四、Today Widget

ios10 對(duì)Today Widget做了一些功能更新,更新如下

  • 鎖屏下拉通知欄左滑可以看到我們的Widget,在Widget的右上角有一個(gè)“展開(kāi)”、“折疊”的功能
  • 在支持3D Touch的蘋(píng)果手機(jī)上,長(zhǎng)按可以彈出折疊后的Widget

廢話少說(shuō)下面開(kāi)始我們的工作

環(huán)境: xcode8 iOS10 swift

步驟一:創(chuàng)建Today Widget
  • 在我們已有的工程里面創(chuàng)建(demo:在文章的最下面有g(shù)ithub連接 SwiftTodayWidget) File->New->Target->Today Widget


    Today Widget.png
步驟二:創(chuàng)建支持?jǐn)?shù)據(jù)共享的App Groups
  • 在我們的開(kāi)發(fā)者賬號(hào)中找到App Groups創(chuàng)建id:group.com.tyjy.SwiftTodayWidget
    groups.png
步驟三:創(chuàng)建應(yīng)用
  • 主應(yīng)用:com.tyjy.SwiftTodayWidget
  • 擴(kuò)展:com.tyjy.SwiftTodayWidget.SwiftTodayWidgetExt

重要:主應(yīng)用和擴(kuò)展相當(dāng)于兩個(gè)獨(dú)立的應(yīng)用,發(fā)布到AppStore要用兩個(gè)不同的Bundle Identifier、兩個(gè)不同的描述文件

創(chuàng)建兩個(gè)應(yīng)用.png
步驟四:打開(kāi)App Groups
  • 在主程序和擴(kuò)展中都得打開(kāi)App Groups,同事勾選步驟二創(chuàng)建的group.com.tyjy.SwiftTodayWidget
打開(kāi)groups.png
步驟五:共享數(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();
步驟六:展開(kāi)、折疊功能
 @IBOutlet weak var lbNumber: UILabel!
    override func viewDidLoad() {
        super.viewDidLoad()
        //設(shè)置展開(kāi)與收縮
        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ò)展可以喚醒到主程序的不同頁(yè)面,在喚醒過(guò)程中擴(kuò)展可以傳值到主程序,這里就不介紹了,主要是在主程序plist里面添加如下:


跳轉(zhuǎn).png

總結(jié):

1.如果在共享數(shù)據(jù)擴(kuò)展沒(méi)有及時(shí)更新的時(shí)候,我們手動(dòng)關(guān)掉擴(kuò)展再打開(kāi)就解決了
2.證書(shū)這塊xcode8可以自動(dòng)為我們創(chuàng)建很多東西,不用我們手動(dòng)創(chuàng)建了,重復(fù):發(fā)布到AppStore必須是不同的bundle id 和描述文件
3.demo源碼:https://github.com/wudanfeng/SwiftTodayWidget.git
4.為了方便demo的圖片、名字和證書(shū)都用的公司的一個(gè)項(xiàng)目

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容