iOS14 小組件遇到的問題及解決方案

先吐個槽:隨著iOS14系統(tǒng)發(fā)布草姻,新的小組件掀起了一股熱潮钓猬,在距離十一假期還有3天的時候,領(lǐng)導看著App Store排行榜沉思了一秒鐘就做出了決定:我們也要做小組件撩独,并且要在十一假期前上架App Store敞曹,先搶占一波流量。但是對我而言跌榔,WidgetKit沒看過异雁、swiftUI沒用過、swift不熟練僧须,所以只能現(xiàn)學現(xiàn)賣了纲刀。領(lǐng)導動動嘴,我們累斷了腰啊,沒辦法示绊,Just Do IT吧??

正文

widgetKit出來已經(jīng)有段時間了锭部,關(guān)于新小組件的說明和原理網(wǎng)上很多,蘋果開發(fā)者網(wǎng)站也有詳細的解釋說明面褐,這里就不贅述了拌禾,需要了解基礎(chǔ)的同學可以去?Developer查看官方文檔,目前網(wǎng)上的說明和示例基本都是翻譯的官方文檔展哭,今天主要說一下我自己在開發(fā)小組件中遇到的問題及解決方案(主要是原理和想法上的問題湃窍,不涉及具體方法的實現(xiàn))。

一匪傍、小組件與主APP數(shù)據(jù)互通

由于小組件是一個extension您市,需要在項目中新建一個target,所以在小組件中無法獲取到主APP的沙盒數(shù)據(jù)役衡,但可以通過APP Groups的方式實現(xiàn)數(shù)據(jù)互通茵休。
1.UserDefaults使用[[NSUserDefaults alloc] initWithSuiteName:@"group_id"]來獲取共享數(shù)據(jù)。
2.數(shù)據(jù)庫可以使用[[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group_id"]

筆者目前的做法是在主APP中設(shè)置完小組件內(nèi)容后手蝎,生成plist文件再通過[[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group_id"]的方式將plist文件保存到共享沙盒中榕莺,再在小組件中獲取,圖片同理棵介。

ps:通過網(wǎng)絡(luò)請求的方式钉鸯,將配置信息上傳到服務(wù)器,再在小組件中請求服務(wù)器信息應(yīng)該也可以鞍时。

二亏拉、持續(xù)刷新問題

小組件的刷新在Provider的getTimeline 方法里有一個 policy 參數(shù)扣蜻,表示刷新的時機逆巍,可以選擇.never(不自動刷新).atEnd(時間線中的數(shù)據(jù)顯示完畢之后自動刷新) 莽使、.after(date)(到達自己設(shè)置的時間后自動刷新)锐极。
然而在開發(fā)過程中發(fā)現(xiàn),有時候即使到達刷新時間或者時間線中的數(shù)據(jù)顯示完畢芳肌,小組件也不自動刷新灵再,這是由于小組件有自己的刷新機制,記得好像是15分鐘(不確定在哪里看到過)亿笤,既然如此那就在時間線中添加更多的entry來保證小組件可以持續(xù)刷新翎迁。然而事與愿違,當添加的entry太多時運行小組件崩潰净薛,顯示內(nèi)存不能超過30M汪榔。

由于組件中有圖片及其他自定義屬性,所以添加多個entry時內(nèi)存太大肃拜,于是嘗試使用單例的方式將entry中除Date之外的屬性和圖片全部放在單例中痴腌,這樣entry中只包含Date一個屬性雌团,創(chuàng)建多個entry占用的內(nèi)存也不會太大。

至此士聪,問題貌似解決了锦援,但每次添加和刷新小組件時需要更長的時間加載時間線中的內(nèi)容,導致小組件一片空白剥悟。目前只能平衡一下灵寺,在時間線中添加300條即5分鐘的數(shù)據(jù)。

ps:目前看了很多持續(xù)刷新的小組件(大多為時間顯示類)区岗,發(fā)現(xiàn)都存在刷新停止的問題替久,只有《氫時鐘》沒有這個問題,不知道是怎么做到的

三躏尉、用戶自定義配置的問題

用戶自己選擇小組件配置的方式是使用Configuration Intent配合Intent Extension來實現(xiàn)蚯根,這個倒是不難實現(xiàn),只是產(chǎn)品經(jīng)理要求我們只做小中大三個組件內(nèi)容根據(jù)用戶自己選擇的配置來顯示胀糜,且三個組件的內(nèi)容是分開的颅拦,即假如有時間、天氣教藻、和健康三個組件距帅,如果用戶在小組件中添加了時間組件,則在手機中添加的組件中只有小號組件的配置中有天氣選項括堤,而中號和大號組件中不能有天氣選項碌秸。

在網(wǎng)上找了好久也找不到解決方案,最后想到一個方案悄窃,使用3個Intent來實現(xiàn)讥电,機智!

解決方式:

Configuration.intentdefinition中添加小轧抗、中恩敌、大三個Intent,如圖:

Intent配置信息

再添加3個Intent Extension來處理這三個Intent中的數(shù)據(jù)横媚,如圖:


IntentHandler

Info.plistNSExtension->NSExtensionAttributes->IntentsSupported數(shù)組中添加對應(yīng)的Intent名稱纠炮,如:SmallIntentInfo.plist中添加SmallConfigurationIntent

注意:
1、添加的值是SmallConfigurationIntent而不是SmallConfiguration灯蝴,即SmallConfiguration后需要加上Intent
2恢口、如果修改了Configuration.intentdefinition中的值(包括Configuration的ParameterENUMSTYPES中的值)穷躁,在三個Info.plist文件中會自動增加小中大三個ConfigurationIntent耕肩,需要將其他兩個刪除,只保留一個對應(yīng)的ConfigurationIntent,坑翱戳啤沙峻!
3、如果需要與主APP數(shù)據(jù)互通两芳,那么三個Intent Extension中都需要添加App Groups

這里要吐槽一下XCode自動生成代碼是真的惡心摔寨,配置完Configuration.intentdefinition后在IntentHandler類中使用代理ConfigurationIntentHandling時總是提示找不到,開始我以為自己寫錯了怖辆,檢查了半天也不知道咋回事是复,后來莫名其妙又好了,最后才知道需要Clean后再Build一下才行竖螃,有時候需要退出Xcode才行淑廊。

距離項目完成已經(jīng)兩個星期,網(wǎng)上看了一下特咆,關(guān)于widgetKit的文章還是很少季惩,主要還是對基礎(chǔ)知識的介紹,而我之前遇到的問題大多還是找不到解決方案腻格,所以才有了這篇文章画拾,很多之前遇到的困擾我很久的問題現(xiàn)在卻想不起來了,這里只是記錄一下自己印象比較深的問題菜职。如果有其他問題可以留言青抛,共同討論。
如果這篇文章對你有幫助酬核,我很高興蜜另,如果有不對的地方也希望多多指教,謝謝嫡意!

Just Do IT举瑰!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市鹅很,隨后出現(xiàn)的幾起案子嘶居,更是在濱河造成了極大的恐慌,老刑警劉巖促煮,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異整袁,居然都是意外死亡菠齿,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進店門坐昙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來绳匀,“玉大人,你說我怎么就攤上這事〖部茫” “怎么了戈钢?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長是尔。 經(jīng)常有香客問我殉了,道長,這世上最難降的妖魔是什么拟枚? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任薪铜,我火速辦了婚禮,結(jié)果婚禮上恩溅,老公的妹妹穿的比我還像新娘隔箍。我一直安慰自己,他們只是感情好脚乡,可當我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布蜒滩。 她就那樣靜靜地躺著,像睡著了一般奶稠。 火紅的嫁衣襯著肌膚如雪帮掉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天窒典,我揣著相機與錄音蟆炊,去河邊找鬼。 笑死瀑志,一個胖子當著我的面吹牛涩搓,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播劈猪,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼昧甘,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了战得?” 一聲冷哼從身側(cè)響起充边,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎常侦,沒想到半個月后浇冰,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡聋亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年肘习,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片坡倔。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡漂佩,死狀恐怖脖含,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情投蝉,我是刑警寧澤养葵,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站瘩缆,受9級特大地震影響关拒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜咳榜,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一夏醉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧涌韩,春花似錦畔柔、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至雇毫,卻和暖如春玄捕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背棚放。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工枚粘, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人飘蚯。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓馍迄,卻偏偏與公主長得像,于是被迫代替她去往敵國和親局骤。 傳聞我的和親對象是個殘疾皇子攀圈,可洞房花燭夜當晚...
    茶點故事閱讀 42,828評論 2 345