iOS 使用Swift開發(fā)Widget

最近玩手機(jī)發(fā)現(xiàn)了widget這個app外的控件還是蠻有意思的,于是在上網(wǎng)查了一下資料,是iOS 8的系統(tǒng)開始開放的一個快捷顯示操作功能,這個功能彌補(bǔ)了沒有3D touch功能的iPhone。雖然網(wǎng)上百度可以查看到很相關(guān)的開發(fā)資料,但是我發(fā)現(xiàn)基本上都是Objective-C的例子,關(guān)于Swift開發(fā)的我僅僅只是看到了一篇(可能有一些我沒看到),主要是都不夠詳細(xì),作為一個新手的我,也為了讓新手們少爬一些坑,我將詳細(xì)為大家講解如何玩轉(zhuǎn)這個widget功能。附上圖片

屏幕快照 2017-02-17 11.24.25.png

開發(fā)環(huán)境:Xcode 8.2.1
開發(fā)語言:Swift 3.0(以上)

1.第一步:如何創(chuàng)建widget
如何創(chuàng)建?在網(wǎng)上有已經(jīng)有很多了,這里我還是給大家截圖一下:

屏幕快照 2017-02-17 11.30.49.png
屏幕快照 2017-02-17 11.31.42.png

選擇Today Extension ,點擊Next ,項目中就會自動創(chuàng)建一個如下圖所示的文件夾:

屏幕快照 2017-02-17 11.35.22.png

(這里的swiftWidget文件夾是我自己命名的)

屏幕快照 2017-02-17 11.37.32.png

里面有一個TodayViewController.swift、MainInterface.storyboard和Info.plist文件(里面的image的兩個文件夾是我后來放的圖片)

到這里就創(chuàng)建完成了!可以運(yùn)行下看看效果(建議真機(jī)上運(yùn)行效果更加)

2.第二步:界面UI布局
widget的UI布局,一般來講以iOS 10為分界線,iOS 10和10以上是一種,iOS 8至iOS 10(不包含iOS 10)又是一種,如下圖:

iOS 10及以上.png
iOS 10以下.png

主要是背景的不同,雖然widget也可以自定義背景色,但是最好還是用系統(tǒng)自帶的!這里我給了兩套UI。

編寫UI界面布局有兩種,這里要注意用純代碼編寫需要修改widget文件夾里面的Info.plist文件里面的NSExtension的配置文件:如下

NSExtensionMainStoryboard:MainInterface(你的storyboard)這個是默認(rèn)的

屏幕快照 2017-02-17 13.45.54.png

NSExtensionPrincipalClass:TodayViewController(你widget控制器的名稱)

屏幕快照 2017-02-17 13.48.24.png

重點注意:(我自爬出來的坑)
用Swift開發(fā)(目前的swift3.0版本)widget的UI布局必須用storyboard拉取控件,也就是上面默認(rèn)的,如果你用純代碼編寫是不會有效果出來的(本人也是個純代碼控,這里Swift這個坑確實難搞,我經(jīng)過數(shù)十次的嘗試才發(fā)現(xiàn)這個bug。網(wǎng)上根本沒有人記載,apple官方文檔我也看不懂,問大神也不知道是怎么回事,爬坑的過程是痛苦的...。如果有大神知道如何用Swift純代碼來布局UI的話,迫切希望您能告訴我,我也收回說這是Swift語言的bug的話)。但是Objective-C兩者都行,這里我只說Swift如何來寫。


用storyboard來編寫UI布局.png

具體如何給約束,還是你們自己去搞吧!這個不難!當(dāng)然Swift雖說不能用純代碼來UI,但是用storyboard拉取控件定義的屬性和方法還是必須要用代碼來寫的,要不然就不能開發(fā)widget了!_
對于如何使用兩套UI,這個就要根據(jù)iOS 系統(tǒng)來做判斷,改變image了!

3.證書申請:
如果要上架的,那么必須要申請證書了。我的這個demo一開始就用的證書運(yùn)行的(本人強(qiáng)迫癥,只要真機(jī)運(yùn)行就要用證書)這里我就跟大家講講需要注意哪些事情:
因為widget是一個單獨(dú)的控件,所有它是需要獨(dú)立的bundle ID和證書的

widget的證書.png

當(dāng)然主app的bundle ID也是一樣的,但是兩者不能相同的名字,這里我用的企業(yè)級證書申請的。

這里要注意的是widget是app的一個組件,要數(shù)據(jù)共享的話,這里涉及到一個叫做App Groups的id設(shè)置和申請:

BFF39167-B2C0-4E39-91A8-3489F6E2953D.png

注意主app的id和widget的id設(shè)置都需要打開App Groups這個功能,這里我只用widget的id的截圖做示范:

widget ID的App Groups和主app ID的App Groups都需要開啟.png

還需要與你申請的App Groups的ID和主app的ID相關(guān)聯(lián),如果你之前就已經(jīng)申請了證書但是未關(guān)聯(lián)的話,請編輯bundle ID,重新添加:

CB86CBB5-697E-4EE4-A491-C1C9DE02905A.png
選中申請的App Groups的ID.png

然后在Xcode中一定要重新更新證書,打開App Groups:

主app和widget都需要打開這里選中組件id.png
主app的App Groups.png

(一定能要更新證書后才能使用哦!因為蘋果的證書在網(wǎng)站上更新后,在你的xcode中并沒有更新,他會重新生成一個新的,需要你手動刪除再添加)。

至此,證書和App Groups的添加完成。如果有報錯,請仔細(xì)檢查(你要相信,程序是不會故意報錯的;有錯誤,一定是你那里沒有做好,在自己身上找原因)。

4.數(shù)據(jù)共享和傳輸:
有了上面的App Groups的添加,我們就可以用代碼進(jìn)行數(shù)據(jù)傳輸和共享了。一般來講,widget這個功能只是在手機(jī)上快捷顯示的數(shù)據(jù)和操作的功能,你可以用你手機(jī)上的支付寶來進(jìn)行測試操作一下。

這里我把代碼截圖出來,我用的UserDefaults來存儲數(shù)據(jù),在主app里面進(jìn)行判斷,打開相應(yīng)的界面。

在TodayViewController里面進(jìn)行相應(yīng)的操作.png

注意因為widget是單獨(dú)的控件操作,所以這么的點擊widget上的按鈕,跳轉(zhuǎn)到主app,需要給主app一個URL Schemes:

主app的URL Schemes.png

然后在主app里面進(jìn)行判斷你存儲的數(shù)據(jù)(這里要注意,iPhone的程序有兩種情況,一種是在后臺狀態(tài),一種是程序完全關(guān)閉狀態(tài)),跳轉(zhuǎn)相應(yīng)的界面。說明一下,我上面的充電狀態(tài)是我自己給的死數(shù)據(jù),沒有做相關(guān)的數(shù)據(jù)共享操作,自己思考解決,很簡單的。如果有需要demo的,請在github下載:https://github.com/chenwupeng/CCwidget/tree/7f28c5f458a38cb174b7e038dc21db7a7710dcd6
總結(jié)一下,這次用Swift開發(fā)Widget,確實走了很多彎路,不過還好的是,從坑里爬起來了,也希望蘋果能快點把這個坑填起來!在這里,希望我的這篇文章能對同行的你們有些幫助,如果發(fā)現(xiàn)有關(guān)swift開發(fā)的坑,盡量會幫大家指出來!

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

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

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,075評論 4 61
  • 雖說每天都是24小時,對每個人都沒有差別??墒嵌冗^的方式不同,感受又千差萬別。 有人只是簡單的重復(fù)前一天,有人卻在...
    呼啦啦啦飛閱讀 311評論 0 0
  • 我把眼淚藏在心里 不想讓你看見 沒想到匯成了河 于是我筑起了高高的大壩 并小心防護(hù)不讓它決堤 沒想到時間讓它變成了...
    yiyi_4f59閱讀 268評論 0 0
  • 讀太白、明遠(yuǎn)樂府詩《夜坐吟》,復(fù)憶裕之《雁邱詞》有感。故作之。 清夜曉寒霜露重,玉階不澄離草泣。 離草泣,霜葉枯,...
    玉階生白露閱讀 395評論 1 2
  • 這座小城已有三百年歷史。 有陽光、有海岸、有椰子樹,有高大豪華的大樓,有破舊的篷房,有豪華的超五星級酒店,有路邊燒...
    狗熊的熊閱讀 141評論 0 0

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