前言
嘗試開發(fā)TodayWidget前查了些資料,自己動(dòng)手時(shí)發(fā)現(xiàn),那些技術(shù)博客等文檔,對于widget的開發(fā),大多都有些陳舊。在Xcode 9環(huán)境下,無需itunes connect申請widget ID,無需安裝繁多的證書,可以直接進(jìn)行開發(fā)!!!本文將會(huì)涵蓋widget開發(fā)的所有入門內(nèi)容,保證從0開始,一步步搭建一個(gè)可上架的widget項(xiàng)目!
重點(diǎn)
1. 無需安裝證書及申請額外Bundle identifier;
2. 不能調(diào)整widget視圖高度(iOS 11);
3. 文件數(shù)據(jù)共享要點(diǎn);
4. widget搭建完整流程。
文章目錄
1. 添加widget
2. 設(shè)計(jì)UI(代碼實(shí)現(xiàn))
3. 共享數(shù)據(jù)及文件
4. 額外功能的實(shí)現(xiàn)(App跳轉(zhuǎn))
5. 需要注意的事項(xiàng)
1. 添加widget
File? -->? New? -->? Target
命名,添加后,工程目錄下會(huì)看到這個(gè)group:
現(xiàn)在widget已經(jīng)添加完成了。
對!就是那么簡單!不需要額外申請ID,不需要安裝證書,運(yùn)行一下就可以在Today Extension下看到一個(gè)“hello word”小組件了。
2. 設(shè)計(jì)UI(代碼實(shí)現(xiàn))
這里只介紹代碼實(shí)現(xiàn)的方法,需要修改一下info.plist配置。如果喜歡用storyboard,那和普通的視圖搭建沒什么區(qū)別~
點(diǎn)擊上圖中的info.plist文件
- 刪除 NSExtensionMainStoryboard
- 添加NSExtensionPrincipalClass? (String) TodayViewController
得到以下結(jié)果:
開始設(shè)計(jì)UI
在唯一的viewController文件,和一般的視圖搭建沒有太多不同。講幾點(diǎn)需要注意的。
-widget高度調(diào)整
widget默認(rèn)高度110像素,搜索到的資料顯示,調(diào)整高度用這個(gè)方法
在iOS 11系統(tǒng)下,此方法無效。
筆者添加了手機(jī)上250+個(gè)App的所有widget組件,全部都是默認(rèn)高度!未發(fā)現(xiàn)一個(gè)例外!!!
至此,大致可以下結(jié)論:
iOS 11中,TodayWidget高度不可調(diào)整。上圖方法雖然沒有標(biāo)明已經(jīng)棄用,雖然打斷點(diǎn)發(fā)現(xiàn)依然被執(zhí)行,但是很可惜,并沒有效果。【望各位不要和筆者一樣苦苦鉆研,才終于明發(fā)現(xiàn)這一事實(shí)。】
-數(shù)據(jù)共享
當(dāng)需要調(diào)用主App中的持久化數(shù)據(jù)、文件、圖片等一切資料時(shí),務(wù)必共享數(shù)據(jù)!!!這一點(diǎn)在下一部分著重展開。
3. 共享數(shù)據(jù)及文件
-文件、圖片等
這一類比較簡單,步驟如下:
點(diǎn)擊需要共享的文件,右側(cè)Target Membership點(diǎn)選TodayWidget,共享文件。
或者在添加文件時(shí),點(diǎn)擊Options ,點(diǎn)選TodayWidget
就可以使用了:)
-持久化數(shù)據(jù)(NSUserDefault)
將TodayWidget和主App設(shè)置在同一組內(nèi)【需聯(lián)網(wǎng)】
通過NSUserDefault進(jìn)行數(shù)據(jù)共享。
保存:
提取:
搞定。??
4. 額外功能的實(shí)現(xiàn)
-widget跳轉(zhuǎn)主App
需要通過URL Schemes進(jìn)行跳轉(zhuǎn)。
設(shè)置App的URL:
主App的info.plist文件中添加以下字段:
在widget中使用如下方法跳轉(zhuǎn):
-其他有需要再補(bǔ)充……
5. 需要注意的事項(xiàng)
-版本號需保持相同
Project 中,主App與TodayWidget版本號需一致。
提交二進(jìn)制文件時(shí),若版本號不一致,會(huì)報(bào)錯(cuò),但仍然可以成功上傳,不知道直接上架會(huì)發(fā)生什么錯(cuò)誤。
-widget視圖進(jìn)行NSLog
運(yùn)行的項(xiàng)目選擇widget,這個(gè)大家應(yīng)該都知道哦。
最后成品,用自己的App《問卦六爻》為例。
Today Extension:
3D Touch:
完。