ios widget開發(fā)

1.證書配置:http://blog.csdn.net/songchunmin_/article/details/51316806

2.編碼階段:http://blog.csdn.net/songchunmin_/article/details/51291752

3.官方文檔:https://developer.apple.com/library/content/documentation/General/Conceptual/ExtensibilityPG/Today.html

4.國外有篇比較好的文檔:https://www.appcoda.com/app-extension-programming-today/

5.widget幾個常用功能的實現(xiàn):http://www.reibang.com/p/9b3d06236d19

術(shù)語:

主項目:往已有的A項目里添加widget残揉,那么A是主項目

Start~

環(huán)境搭建

1.蘋果后臺配置證書,下載Provisioning Profiles文件纪隙,得到4個Provisioning Profiles文件(主項目和widget分別有兩個:dev的和release的)遍膜。

注意widget項目和主項目其實是兩個獨立的appID,而通過app group來相互交互瓤湘。

2.對于主項目的配置:

(1)選擇新的pro證書

(2)打開targets-->Capabilities-->App Groups 選項瓢颅,然后選擇后臺配置的group:

3.添加widget項目。

將Bundle

Identifier改為和蘋果后臺配置的appid一樣弛说。并且注意當(dāng)時命名的時候挽懦,必須遵循如下規(guī)則:前綴要包括主項目的Bundle

Identifier。后綴不能是widget關(guān)鍵字(木人。信柿。。這里很坑醒第,試了很多次)渔嚷。然后因為我的XCode并沒有配置開發(fā)者賬號,所以將Automatically

manage singing的對勾去掉(反正證書文件都下載給你了)稠曼。

然后選擇好Provisioning Profile文件形病,dev和release的。當(dāng)前頁的error就都應(yīng)該消失了霞幅。

將Build Setting里的簽名設(shè)置好:

如果當(dāng)時在蘋果后臺配置證書的時候漠吻,deviceid都加上了你的手機,那么直接真機運行司恳,就可以在手機上看到一個“Hello World”的widget途乃。

第一次運行,可能看到左上角名字是WIDGET扔傅,這個有點延遲耍共,第二次就可以看到是“寶寶樹小時光”烫饼。

業(yè)務(wù)邏輯實現(xiàn)

1.純代碼實現(xiàn)布局:

通過以上步驟,添加的widget項目划提,使用的是Storyboard作為布局枫弟。使用純代碼需要:

(1)刪除Storyboard文件,widget項目的plist鹏往,刪除NSExtensionMainStoryboard

(2)添加NSExtensionPrincipalClass字段 并設(shè)為TodayViewController

2.TodayViewController生命周期:

經(jīng)過測試:基本上超過2秒淡诗,widget元素在屏幕上消失(手機沒有停留在widget頁面或者停留在widget頁面,沒有滑動到自己項目的widget)伊履,widget再次出現(xiàn)的時候韩容,都會重新調(diào)用ViewDidLoad。而短時間的消失再出現(xiàn)唐瀑,不會執(zhí)行ViewDidLoad而是執(zhí)行ViewWillAppear群凶。所以如果不進行處理,每次widget出現(xiàn)哄辣,就請求數(shù)據(jù)的話请梢,即時兩次數(shù)據(jù)相同也會閃一下(知乎),想不閃可以把數(shù)據(jù)緩存力穗,每次widget出現(xiàn)都加在緩存數(shù)據(jù)毅弧,并且發(fā)送請求,請求回的數(shù)據(jù)和當(dāng)前展示數(shù)據(jù)做對比当窗,如果一樣够坐,則不用刷新列表,如果不一樣則刷新列表崖面。然后緩存的機制元咙,因為一般請求的數(shù)據(jù)都是json,可以解析成dic對象巫员,使用plist進行緩存庶香,比較方便。

3.展開/折疊简识,在這個系統(tǒng)方法中設(shè)置展開脉课、折疊的高度即可,但是好像不能主動設(shè)置在什么情況下是展開的财异,在什么情況下的折疊的倘零,也就是說不能代碼控制展開還是折疊,只能是用戶點擊按鈕來展開和折疊戳寸,蘋果沒有給出那么多的自由呈驶。

- (void)widgetActiveDisplayModeDidChange:(NCWidgetDisplayMode)activeDisplayMode withMaximumSize:(CGSize)maxSize {

if(activeDisplayMode == NCWidgetDisplayModeCompact) {

self.preferredContentSize = CGSizeMake([UIScreen mainScreen].bounds.size.width, 105);

}else{

self.preferredContentSize = CGSizeMake([UIScreen mainScreen].bounds.size.width, 495);

}

}

4.使用主項目的自定義類,以及第三方庫:

widget開發(fā)時疫鹊,肯定會遇到想使用主項目的類的情況袖瞻,只需要將要使用的類的.m文件司致,多加上一個target,選擇widget項目即可聋迎。

使用第三方庫脂矫,我的項目里暫時沒有遇到這種需求,但是通過pods維護第三方庫的時候霉晕,Podfile文件會指定每個第三方庫要加入的target庭再,那么在widget的target中,加上要使用的第三方庫牺堰,應(yīng)該就可以拄轻,可以自己試試。

5.數(shù)據(jù)共享

widget項目必然經(jīng)常要和主項目共享數(shù)據(jù)伟葫,可以通過NSUserDefault恨搓,注意和平時用有些不同,創(chuàng)建UserDefault的時候筏养,要指定groupid斧抱。上代碼:

// widget項目里取數(shù)據(jù)

+ (NSString*)widgetStringForKey:(NSString*)defaultName {

NSUserDefaults*shared = [[NSUserDefaultsalloc] initWithSuiteName:@"group.com.appname"];

return[shared stringForKey:defaultName];

}

// 主項目里存數(shù)據(jù)

+ (void)widgetSetObject:(id)value forKey:(NSString*)defaultName {

NSUserDefaults*shared = [[NSUserDefaultsalloc] initWithSuiteName:@"group.com.appname"];

[shared setObject:value forKey:defaultName];

[shared synchronize];

}

還有通過NSFileManager數(shù)據(jù)共享的方式,項目里沒有用到渐溶,可以自己查閱資料試一試辉浦。

6.喚起主項目

通過URL Schemes的方式:

(1)在主項目里配置一個對應(yīng)widget的URL。

(2)在需要喚起主項目的地方:

NSString*schemeString = [NSStringstringWithFormat:@"HMWidget://jumptab?number=%@",[NSStringencodeBase64String:@"3"]];

[self.extensionContext openURL:[NSURLURLWithString:schemeString] completionHandler:^(BOOLsuccess) {

}];

(3)在主項目appdelegate的代理方法中掌猛,截取URL,做處理:

- (BOOL)application:(UIApplication *)application openURL:(NSURL*)url sourceApplication:(NSString*)sourceApplication annotation:(id)annotation

{

if([url.description hasPrefix:@"HMWidget://"]) {

if(![HMUser isLogin]) {

returnYES;

}

return[HMSchemeUrlRouter handleScheme:url.description withAppDelegate:self];

}

}

最后編輯于
?著作權(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é)果婚禮上青瀑,老公的妹妹穿的比我還像新娘璧亮。我一直安慰自己,他們只是感情好狱窘,可當(dāng)我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布杜顺。 她就那樣靜靜地躺著,像睡著了一般蘸炸。 火紅的嫁衣襯著肌膚如雪躬络。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天搭儒,我揣著相機與錄音穷当,去河邊找鬼。 笑死淹禾,一個胖子當(dāng)著我的面吹牛馁菜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播铃岔,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼汪疮,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了毁习?” 一聲冷哼從身側(cè)響起智嚷,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎纺且,沒想到半個月后盏道,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡载碌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年猜嘱,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(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
  • 正文 我出身青樓馒疹,卻偏偏與公主長得像,于是被迫代替她去往敵國和親乙墙。 傳聞我的和親對象是個殘疾皇子颖变,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,828評論 2 345

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

  • 在說widget開發(fā)前,先來了解下APP Extensions和App Groups: 一听想、關(guān)于App Exten...
    P大迷妹閱讀 4,344評論 1 10
  • 一.什么是Widget? 百度百科: 其實Widget就是一個小組件,獨立于應(yīng)用之外的又一個新小應(yīng)用,但是和主應(yīng)用...
    LYSNote閱讀 3,162評論 3 19
  • 先感謝無私分享的博主大大們,一并附上一波入門貼: iOS開發(fā)之widget實現(xiàn)iOS開發(fā)之widget的簡單實現(xiàn)從...
    ChangeWorld閱讀 796評論 0 1
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理腥刹,服務(wù)發(fā)現(xiàn),斷路器哗魂,智...
    卡卡羅2017閱讀 134,600評論 18 139
  • 今天給大家介紹一下香港其實除了買買買以外肛走,還有不需多久就能到達的好去處漓雅。畢竟香港是一個很小而沿海的地方录别,所以很容易...
    3_be閱讀 780評論 4 2