手把手教你Today應(yīng)用擴(kuò)展(一):創(chuàng)建擴(kuò)展和與主app通信

本章內(nèi)容

Paste_Image.png

1. 創(chuàng)建擴(kuò)展

Paste_Image.png

注意:這里的containing application指的是,當(dāng)前的app。

創(chuàng)建完成后將出現(xiàn)下面這個(gè)文件夾,對(duì)應(yīng)的是擴(kuò)展的SB和swift文件。


Paste_Image.png

運(yùn)行模擬器,就可以看到我們創(chuàng)建的Today了:


Paste_Image.png

2. 擴(kuò)展和應(yīng)用之間通信方式一:App Groups

通信原理:利用App Groups這個(gè)媒介,容器app和擴(kuò)展都能訪問它。那么,容器app將數(shù)據(jù)存到App Groups,然后擴(kuò)展從App Groups里面取出數(shù)據(jù),這樣產(chǎn)生通信。
缺點(diǎn):必須加入蘋果開發(fā)者計(jì)劃才能使用該功能

  • 激活容器app的App Groups
    在target-->capability中選擇如下圖


    Paste_Image.png

    Paste_Image.png
  • 激活擴(kuò)展的App Groups
    操作步驟跟上面一樣,只不過將target選擇對(duì)應(yīng)的擴(kuò)展。

  • 容器app將數(shù)據(jù)存入App Groups

        //這種初始化方法專門針對(duì)App Groups
        //參數(shù)為對(duì)應(yīng)app Groups的名稱
        let userDefault = NSUserDefaults(suiteName: "group.Alet")
        userDefault?.setObject("深圳", forKey: "city")
        userDefault?.synchronize()
  • 擴(kuò)展從App Groups里面取出數(shù)據(jù)
        let userDefault = NSUserDefaults(suiteName: "group.Alet")

        //從App Groups里面獲取數(shù)據(jù)
        let cityName: String = userDefault?.objectForKey("city") as! String
        
        //顯示在Today上
        city.text = cityName
Paste_Image.png

3. 通信方式二:擴(kuò)展直接調(diào)用容器app的API

優(yōu)點(diǎn):不用加入蘋果開發(fā)者計(jì)劃
原理:將容器app的API用單獨(dú)的文件封裝,使得擴(kuò)展也能使用這些文件里面的API,通過這些API來(lái)獲取數(shù)據(jù)。最好使用framework。

  • 創(chuàng)建framework


    Paste_Image.png
  • 將要封裝的swift文件扔進(jìn)framework的文件夾中


    Paste_Image.png

    這里要封裝的文件是:weatherDataLoad.swift 這個(gè)文件里面包含loadData這個(gè)類,用來(lái)讀取數(shù)據(jù)。

  • 將原來(lái)target中compile的文件刪掉


    Paste_Image.png
  • 給framework添加需要編譯的文件


    Paste_Image.png
  • 修改framework中文件的訪問權(quán)限
    因?yàn)橐郧暗奈募脑L問權(quán)限默認(rèn)為internal,而要訪問framework中的文件,就要設(shè)置類的訪問權(quán)限。
    可以根據(jù)需求,在文件里面對(duì)應(yīng)的類中設(shè)置,如下圖。


    Paste_Image.png

    Paste_Image.png
  • 設(shè)置擴(kuò)展能夠使用這個(gè)framework


    Paste_Image.png
  • 最后在擴(kuò)展的文件中引用這個(gè)framework包,就能使用對(duì)應(yīng)的類啦!

其實(shí)這樣做的目的是:使得容器app和擴(kuò)展都使用相同的API獲取數(shù)據(jù),但他們之間互不干擾。

最后編輯于
?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,872評(píng)論 25 709
  • WebSocket-Swift Starscream的使用 WebSocket 是 HTML5 一種新的協(xié)議。它實(shí)...
    香橙柚子閱讀 24,725評(píng)論 8 183
  • 秋天已經(jīng)來(lái)了,天氣預(yù)報(bào)說(shuō)明天會(huì)有雨。園子里的那些花兒還好嗎? 雖然氣溫一直沒有大幅度降低,秋日的蕭殺氣息依然撲面而...
    Crespololi閱讀 353評(píng)論 2 0
  • 鄭永皓剛要給拿鐵打拉花,看到那個(gè)女孩仍然像以往一樣,坐在靠窗的位置。但這次,她在流眼淚。 他還記得她來(lái)這間咖啡屋的...
    贊大炮閱讀 502評(píng)論 0 4
  • 說(shuō)說(shuō)這位前利物浦傳奇隊(duì)長(zhǎng)! Steven Gerrard 2015年夏天,杰拉德宣布離開母隊(duì)利物浦轉(zhuǎn)投美國(guó)大聯(lián)盟洛...
    徐先森KB24閱讀 746評(píng)論 0 2

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