手把手教你Today應用擴展(一):創建擴展和與主app通信

本章內容

Paste_Image.png

1. 創建擴展

Paste_Image.png

注意:這里的containing application指的是,當前的app。

創建完成后將出現下面這個文件夾,對應的是擴展的SB和swift文件。


Paste_Image.png

運行模擬器,就可以看到我們創建的Today了:


Paste_Image.png

2. 擴展和應用之間通信方式一:App Groups

通信原理:利用App Groups這個媒介,容器app和擴展都能訪問它。那么,容器app將數據存到App Groups,然后擴展從App Groups里面取出數據,這樣產生通信。
缺點:必須加入蘋果開發者計劃才能使用該功能

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


    Paste_Image.png

    Paste_Image.png
  • 激活擴展的App Groups
    操作步驟跟上面一樣,只不過將target選擇對應的擴展。

  • 容器app將數據存入App Groups

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

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

3. 通信方式二:擴展直接調用容器app的API

優點:不用加入蘋果開發者計劃
原理:將容器app的API用單獨的文件封裝,使得擴展也能使用這些文件里面的API,通過這些API來獲取數據。最好使用framework。

  • 創建framework


    Paste_Image.png
  • 將要封裝的swift文件扔進framework的文件夾中


    Paste_Image.png

    這里要封裝的文件是:weatherDataLoad.swift 這個文件里面包含loadData這個類,用來讀取數據。

  • 將原來target中compile的文件刪掉


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


    Paste_Image.png
  • 修改framework中文件的訪問權限
    因為以前的文件的訪問權限默認為internal,而要訪問framework中的文件,就要設置類的訪問權限。
    可以根據需求,在文件里面對應的類中設置,如下圖。


    Paste_Image.png

    Paste_Image.png
  • 設置擴展能夠使用這個framework


    Paste_Image.png
  • 最后在擴展的文件中引用這個framework包,就能使用對應的類啦!

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,242評論 25 708
  • WebSocket-Swift Starscream的使用 WebSocket 是 HTML5 一種新的協議。它實...
    香橙柚子閱讀 24,099評論 8 183
  • 秋天已經來了,天氣預報說明天會有雨。園子里的那些花兒還好嗎? 雖然氣溫一直沒有大幅度降低,秋日的蕭殺氣息依然撲面而...
    Crespololi閱讀 325評論 2 0
  • 鄭永皓剛要給拿鐵打拉花,看到那個女孩仍然像以往一樣,坐在靠窗的位置。但這次,她在流眼淚。 他還記得她來這間咖啡屋的...
    贊大炮閱讀 455評論 0 4
  • 說說這位前利物浦傳奇隊長! Steven Gerrard 2015年夏天,杰拉德宣布離開母隊利物浦轉投美國大聯盟洛...
    徐先森KB24閱讀 667評論 0 2