Swift Widget

最近玩手機(jī)發(fā)現(xiàn)了widget這個(gè)app外的控件還是蠻有意思的胖秒,于是在上網(wǎng)查了一下資料钾怔,是iOS 8的系統(tǒng)開始開放的一個(gè)快捷顯示操作功能,這個(gè)功能彌補(bǔ)了沒有3D touch功能的iPhone。雖然網(wǎng)上百度可以查看到很相關(guān)的開發(fā)資料喇伯,但是我發(fā)現(xiàn)基本上都是Objective-C的例子,關(guān)于Swift開發(fā)的我僅僅只是看到了一篇(可能有一些我沒看到)拨与,主要是都不夠詳細(xì)稻据,作為一個(gè)新手的我,也為了讓新手們少爬一些坑买喧,我將詳細(xì)為大家講解如何玩轉(zhuǎn)這個(gè)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 今缚,點(diǎn)擊Next ,項(xiàng)目中就會(huì)自動(dòng)創(chuàng)建一個(gè)如下圖所示的文件夾:

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

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

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

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

到這里就創(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)這個(gè)是默認(rèn)的

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

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

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

重點(diǎn)注意:(我自爬出來的坑)

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

用storyboard來編寫UI布局.png

具體如何給約束灭必,還是你們自己去搞吧狞谱!這個(gè)不難!當(dāng)然Swift雖說不能用純代碼來UI,但是用storyboard拉取控件定義的屬性和方法還是必須要用代碼來寫的厂财,要不然就不能開發(fā)widget了!^_^

對(duì)于如何使用兩套UI芋簿,這個(gè)就要根據(jù)iOS 系統(tǒng)來做判斷峡懈,改變image了璃饱!

3.證書申請:

如果要上架的,那么必須要申請證書了肪康。我的這個(gè)demo一開始就用的證書運(yùn)行的(本人強(qiáng)迫癥荚恶,只要真機(jī)運(yùn)行就要用證書)這里我就跟大家講講需要注意哪些事情:

因?yàn)閣idget是一個(gè)單獨(dú)的控件,所有它是需要獨(dú)立的bundle ID和證書的

widget的證書.png

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

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

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

注意主app的id和widget的id設(shè)置都需要打開App Groups這個(gè)功能,這里我只用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

(一定能要更新證書后才能使用哦移盆!因?yàn)樘O果的證書在網(wǎng)站上更新后悼院,在你的xcode中并沒有更新,他會(huì)重新生成一個(gè)新的咒循,需要你手動(dòng)刪除再添加)据途。

至此绞愚,證書和App Groups的添加完成。如果有報(bào)錯(cuò)颖医,請仔細(xì)檢查(你要相信位衩,程序是不會(huì)故意報(bào)錯(cuò)的;有錯(cuò)誤熔萧,一定是你那里沒有做好蚂四,在自己身上找原因)。

4.數(shù)據(jù)共享和傳輸:

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

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

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

注意因?yàn)閣idget是單獨(dú)的控件操作爹殊,所以這么的點(diǎn)擊widget上的按鈕蜕乡,跳轉(zhuǎn)到主app,需要給主app一個(gè)URL Schemes:

主app的URL Schemes.png

然后在主app里面進(jìn)行判斷你存儲(chǔ)的數(shù)據(jù)(這里要注意梗夸,iPhone的程序有兩種情況层玲,一種是在后臺(tái)狀態(tài),一種是程序完全關(guān)閉狀態(tài))反症,跳轉(zhuǎn)相應(yīng)的界面辛块。說明一下,我上面的充電狀態(tài)是我自己給的死數(shù)據(jù)铅碍,沒有做相關(guān)的數(shù)據(jù)共享操作润绵,自己思考解決,很簡單的胞谈。如果有需要demo的尘盼,請?jiān)趃ithub下載:https://github.com/chenwupeng/CCwidget/tree/7f28c5f458a38cb174b7e038dc21db7a7710dcd6

總結(jié)一下,這次用Swift開發(fā)Widget烦绳,確實(shí)走了很多彎路卿捎,不過還好的是,從坑里爬起來了爵嗅,也希望蘋果能快點(diǎn)把這個(gè)坑填起來娇澎!在這里,希望我的這篇文章能對(duì)同行的你們有些幫助睹晒,如果發(fā)現(xiàn)有關(guān)swift開發(fā)的坑趟庄,盡量會(huì)幫大家指出來!

作者:氫色的氣球

鏈接:http://www.reibang.com/p/44112b7bddef

來源:簡書

著作權(quán)歸作者所有括细。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處戚啥。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末奋单,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子猫十,更是在濱河造成了極大的恐慌览濒,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,820評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拖云,死亡現(xiàn)場離奇詭異贷笛,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)宙项,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門乏苦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人尤筐,你說我怎么就攤上這事汇荐。” “怎么了盆繁?”我有些...
    開封第一講書人閱讀 168,324評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵掀淘,是天一觀的道長。 經(jīng)常有香客問我油昂,道長革娄,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,714評(píng)論 1 297
  • 正文 為了忘掉前任秕狰,我火速辦了婚禮稠腊,結(jié)果婚禮上躁染,老公的妹妹穿的比我還像新娘鸣哀。我一直安慰自己,他們只是感情好吞彤,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評(píng)論 6 397
  • 文/花漫 我一把揭開白布我衬。 她就那樣靜靜地躺著,像睡著了一般饰恕。 火紅的嫁衣襯著肌膚如雪挠羔。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,328評(píng)論 1 310
  • 那天埋嵌,我揣著相機(jī)與錄音破加,去河邊找鬼。 笑死雹嗦,一個(gè)胖子當(dāng)著我的面吹牛范舀,可吹牛的內(nèi)容都是我干的合是。 我是一名探鬼主播,決...
    沈念sama閱讀 40,897評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼锭环,長吁一口氣:“原來是場噩夢啊……” “哼聪全!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起辅辩,我...
    開封第一講書人閱讀 39,804評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤难礼,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后玫锋,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蛾茉,經(jīng)...
    沈念sama閱讀 46,345評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評(píng)論 3 340
  • 正文 我和宋清朗相戀三年撩鹿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了臀稚。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,561評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡三痰,死狀恐怖吧寺,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情散劫,我是刑警寧澤稚机,帶...
    沈念sama閱讀 36,238評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站获搏,受9級(jí)特大地震影響赖条,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜常熙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評(píng)論 3 334
  • 文/蒙蒙 一纬乍、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧裸卫,春花似錦仿贬、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至聋袋,卻和暖如春队伟,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背幽勒。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評(píng)論 1 272
  • 我被黑心中介騙來泰國打工嗜侮, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,983評(píng)論 3 376
  • 正文 我出身青樓锈颗,卻偏偏與公主長得像缠借,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子宜猜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫泼返、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,120評(píng)論 4 61
  • 01. 我想每個(gè)進(jìn)入大學(xué)的大學(xué)生,一說起宿舍舍友叫乌,總是有說不完的不爽柴罐,道不盡的奇葩。 比如一向很愛干凈的田田說憨奸,她...
    默北望閱讀 5,046評(píng)論 93 102
  • 父母給了我生命革屠,此生來還債,只是很心疼母親排宰。有死的勇氣似芝,但是舍不得一些人。今天覺得板甘,我再活的自私一點(diǎn)我會(huì)心里舒服一...
    尋問一惑閱讀 185評(píng)論 0 0
  • 可曾感慨自我的孤單党瓮?在孤單中行走,在孤單中尋找盐类∧椋或者只是為了不孤單郁岩,一直在找嗦明,找尋屬于自己的不孤單疏叨。 漫步在...
    只想云知道閱讀 340評(píng)論 0 0
  • On Shakespeare by Samuel Johnson 第三句呢寡喝, 然後,Samuel John...
    演維閱讀 659評(píng)論 0 0