先感謝無私分享的博主大大們,一并附上一波入門貼:
iOS開發(fā)之widget實現(xiàn)
iOS開發(fā)之widget的簡單實現(xiàn)
從0到1思考與實現(xiàn)iOS-Widget
iOS widget開發(fā)
iOS開發(fā)-widget基礎(chǔ)
iOS之widget開發(fā)(Today Extension)
1. widget是一個什么東西?
Web Widget,中文譯名被稱作是微件,是一小塊可以在任意一個基于HTML的Web頁面上執(zhí)行的代碼,它的表現(xiàn)形式可能是視頻,地圖,新聞,小游戲等等垦江。它的根本思想來源于代碼復用,通常情況下Widget的代碼形式包含了DHTML,JavaScript以及Adobe Flash。
簡單點說就是一個小掛件,小應(yīng)用,為主應(yīng)用服務(wù)的一個小而美的存在形式
在iOS中這樣的掛件類似于通知欄,存在于在屏幕的最左邊,然后還可以在支持3D touch功能的設(shè)備上按住可以看到縮小版的widget的一個快捷方式.
2. 如何創(chuàng)建這樣一個應(yīng)用?
打開Xcode->File->New 一個 Target-> iOS Today Extension 直接創(chuàng)建就ok啦
3. 需要做哪些配置?
使用的是純代碼,所以把系統(tǒng)自動生成的StoryBoard刪掉,然后在info.plst里添加字段NSExtension
,對應(yīng)的Value是一個字典類型,代碼如下:
<dict>
<key>NSExtensionPointIdentifier</key>
<string>com.apple.widget-extension</string>
<key>NSExtensionPrincipalClass</key>
<string>TodayViewController</string>
</dict>
做好這些配置之后,進行g(shù)roupID的綁定
當然是自定義的這個ID,保證主app與widget兩邊的通信,數(shù)據(jù)互通
操作如下: 點擊藍色工程->Capabilities -> APP Groups 打開開關(guān)按鈕-> + 創(chuàng)建一個groupID
然后會自動生成兩個文件,一個是宿主app的,一個是widget的, 是plist格式的文件, 它的XML代碼如下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.application-groups</key>
<array>
<string>group.com.t.widget.app</string>
</array>
</dict>
</plist>
4. 代碼如何構(gòu)建?
不知道是什么問題,調(diào)用不了宿主APP里的文件,搞得我重新創(chuàng)建了一些輔助類,布局類Masonry也用不了,貌似要用pod打入~~ 后續(xù)再看, 寫代碼和宿主app一個樣,幾個代理方法以及生命周期的時機把控
主要是事件的處理和app跳轉(zhuǎn),解析參數(shù)之類的一些技巧.
在app里新建一個url scheme , widgetDemo , 跳轉(zhuǎn)的時候拼上參數(shù), widgetDemo: //args = homePage
然后在Appdelegate的- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
回調(diào)方法里做解析判斷,然后做一些事情...
5. 有什么用途?
- 在不改變宿主app本身的情況下,新增了一個APP入口或展示切面,shortCut操作更加快捷以及方便
- 輕量級的應(yīng)用使用方便,不占用空間
- 提升了app的逼格以及用戶的體驗
......