日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iOS之widget开发(Today Extension)

發布時間:2025/3/18 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS之widget开发(Today Extension) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

extension是iOS8新開放的一種對幾個固定系統區域的擴展機制,它可以在一定程度上彌補iOS的沙盒機制對應用間通信的限制。

extension的出現,為用戶提供了在其它應用中使用我們應用提供的服務的便捷方式,比如用戶可以在Today Extension中查看應用展示的簡略信息,而不用再進到我們的應用中,同樣可以快捷操作app的功能,這將是一種全新的用戶體驗。

今天我們介紹一下給工程添加Today Extension的步驟。

添加Today Extension工程

在原有的工程基礎上,想要使用Today Extension,我們需要創建一個新的target,點擊File-->New-->Target-->Today Extention,如下圖所示:

添加Target

選擇Today Extension

添加成功后項目的目錄會如下圖所示:

工程目錄

運行項目會看到如下圖所示的效果:

運行效果

定制UI

由于我習慣使用純代碼寫UI,所以我會選擇刪除默認創建的MainInterface.storyboard,并在info.plist中刪除NSExtensionMainStoryboard,添加NSExtensionPrincipalClass為TodayViewController,如下圖所示:

配置controller
我們可以使用以下方法配置視圖的大小 //配置Today Extension展示視圖的大小 self.preferredContentSize = CGSizeMake([UIScreen mainScreen].bounds.size.width, 100);復制代碼

實現下面的協議,配置邊距,否則會發現一個問題:繪制的內容與左側邊界有一定距離。

- (UIEdgeInsets)widgetMarginInsetsForProposedMarginInsets:(UIEdgeInsets)defaultMarginInsets {//配置邊距為0return UIEdgeInsetsMake(0.0, 0.0, 0.0, 0.0);}復制代碼

我們創建一個lable來充滿視圖,并且點擊可打開我們的app

//Today Extension的頁面加一個可點擊打開containingAPP的label UILabel *openAppLabel = [[UILabel alloc] init]; openAppLabel.textColor = [UIColor colorWithRed:(97.0/255.0) green:(97.0/255.0) blue:(97.0/255.0) alpha:1]; openAppLabel.backgroundColor = [UIColor clearColor]; openAppLabel.frame = CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 100); openAppLabel.textAlignment = NSTextAlignmentCenter; openAppLabel.text = @"點擊打開app"; openAppLabel.font = [UIFont systemFontOfSize:15]; [self.view addSubview:openAppLabel];openAppLabel.userInteractionEnabled = YES; UITapGestureRecognizer *openURLContainingAPP = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(openURLContainingAPP)]; [openAppLabel addGestureRecognizer:openURLContainingAPP];復制代碼

打開app

Today Extension只能通過openURL的方式來調起app,并且需要在info.plist文件中配置參數URL types,
app工程中配置如下

app schemes

Today Extension如下圖

跳轉URL types設置

URL identifier為app的bundle ID,URL Schemes配置為app的scheme
并且調用以下代碼來打開app

//通過openURL的方式啟動Containing APP - (void)openURLContainingAPP {//scheme為app的scheme[self.extensionContext openURL:[NSURL URLWithString:@"scheme://xxxx"]completionHandler:^(BOOL success) {NSLog(@"open url result:%d",success);}]; }復制代碼

demo代碼,由于后面的步驟是需要蘋果開發者賬號才能操作,所以demo的代碼到這里為止。

數據共享

首先需要去蘋果開發者中心的APP Groups中創建一個APP Group,命名方式"group.com.companyName.xxx",如下圖

創建App Group
完成之后你還要做以下修改
  • 編輯你的contain app的APP ID,Service中選中App Groups,并且點擊右邊的Edit按鈕選中剛剛創建的group,返回后,點擊Done完成APP ID的編輯
  • 此時contain app的Provisioning Profiles文件會顯示為無法使用,需要更新下文件,并且下載下來覆蓋安裝
  • Today Extension工程與app工程的配置都如下圖所示

    App Groups設置

    通過App Groups提供的同一group內app共同讀寫區域,可以用NSUserDefaults和NSFileManager兩種方式實現Today Extension和containing app之間的數據共享。

    通過NSUserDefaults共享數據

    - (void)saveDataByNSUserDefaults {NSUserDefaults *shared = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.xxx.xxx"];[shared setObject:@"test" forKey:@"widget"];[shared synchronize]; }- (NSString *)readDataFromNSUserDefaults {NSUserDefaults *shared = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.xxx.xxx"];NSString *value = [shared valueForKey:@"widget"];return value; }復制代碼

    通過NSFileManager共享數據

    - (BOOL)saveDataByNSFileManager {NSError *error = nil;NSURL *containerURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.com.xxx.xxx"];containerURL = [containerURL URLByAppendingPathComponent:@"Library/Caches/test"];NSString *value = @"test";BOOL result = [value writeToURL:containerURL atomically:YES encoding:NSUTF8StringEncoding error:&error];if (!result) {NSLog(@"%@",error);} else {NSLog(@"save value:%@ success.",value);}return result; }- (NSString *)readDataByNSFileManager {NSError *error = nil;NSURL *containerURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.com.xxx.xxx"];containerURL = [containerURL URLByAppendingPathComponent:@"Library/Caches/test"];NSString *value = [NSString stringWithContentsOfURL:containerURL encoding:NSUTF8StringEncoding error:&error];return value; }復制代碼

    這樣就實現了Today Extension與app的數據共享

    真機調試與打包

    我們把Today Extension當作一個單獨的app,各自有自己的App ID和Provisioning profile. 在Xcode里是兩個Target給不同的target設置自己的bundleID和Provisioning profile。所以你需要按以下步驟操作,才能真機調試以及打包

    去蘋果開發者中心操作以下步驟

  • 需要為Today Extension創建一個APP ID,一般命名方式為你的contain app的bundle id加上你創建的Today Extension工程名"com.companyName.xxx.xxx",App Services中勾選上App Groups,完成創建。如下圖
    Today Extension APP ID設置
  • 去Provisioning Profiles中創建Today Extension對應的profile文件,下載下來,安裝,真機調試和打包需要用到,如下圖
    Today Extension profile文件
  • 將Today Extension的bundleID修改為剛剛為Today Extension創建的APP ID
  • Today Extension版本號與contain app配置一致,否則審核上傳的時候會有警告
  • 打包或者真機調試的時候contain app與Today Extension選擇各自的profile文件。
  • 完成以上的準備工作之后,我們就可以開始真機調試以及打包了。

    總結

    本篇暫時只是Today Extension簡單的功能實現,我會在后面更新iOS10的適配,以及其他功能使用。如果有錯誤的地方歡迎指出~謝謝~

    擴展閱讀

  • WWDC2014之App Extensions學習筆記
  • 希望對您有幫助,如果文章中有問題,歡迎評論留言~,謝謝支持~歡迎關注,我會在空余時間更新技術文章~

    總結

    以上是生活随笔為你收集整理的iOS之widget开发(Today Extension)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 青青草自拍| 伊人春色影院 | 国产精品人人做人人爽人人添 | 成人福利在线看 | 精品人妻无码专区在线 | 亚洲综合第一区 | 女女同性女同一区二区三区九色 | 在线观看日韩av | 本道久久| 国产精品二三区 | 国产网站黄 | 欧美日韩在线观看免费 | 中文黄色片 | 双性人bbww欧美双性 | 亚洲男女视频 | 人妻一区二区三区视频 | 亚洲一区中文字幕在线观看 | 色婷五月| 亚洲再线| jizz在线免费观看 | 中国大陆一级毛片 | 一级黄色大片 | 国产精品第12页 | 91精品亚洲 | 裸体一区二区三区 | 台湾佬av| 四虎在线影视 | 欧美精品手机在线 | 成人免费视频网站在线观看 | 人人澡超碰碰 | 爱爱综合网 | 亚洲系列在线观看 | 久久aaa | 国产这里有精品 | 久久av网| 日韩电影二区 | 午夜毛片在线 | 国产精品v欧美精品v日韩精品 | 久久久久人妻一区二区三区 | 日本超碰 | 黄色片在哪看 | 日本高清免费aaaaa大片视频 | 国产aⅴ| 婷婷丁香一区二区三区 | 91漂亮少妇露脸在线播放 | 在线观看av日韩 | 日本美女逼| 伊人狠狠| 色久av| 亚洲一区二区三区在线免费观看 | 国产精品美女久久久网av | 午夜免费网址 | 日韩欧美国产激情 | 美女视频久久 | 亚洲日本护士毛茸茸 | 久久久久国产精品人妻 | 成人毛片一区二区三区 | 中国成熟妇女毛茸茸 | 日韩精品理论 | 久久久夜夜夜 | 96精品视频在线观看 | 好吊日精品视频 | 污漫网站 | 夜夜夜操操操 | 怎么可能高潮了就结束漫画 | xxxxxx黄色| 婷婷五月色综合 | 青青草伊人久久 | 欧美一区二区三区激情视频 | 久久精品国产99久久久 | 91亚洲一区 | 欧日韩一区二区三区 | www.av在线 | 极品久久久久 | 妞干网精品 | 国产欧美精品国产国产专区 | 免费超碰在线观看 | 三点尽露的大尺度国产 | 波多野吉衣一区二区 | 三年中文免费观看大全动漫 | 97人人爱 | 中文字幕无产乱码 | 影音先锋欧美在线 | 亚洲一区二区人妻 | 91成人精品国产刺激国语对白 | zzjj国产精品一区二区 | 蜜桃视频久久一区免费观看入口 | 午夜手机福利 | av成人在线看 | 欧美日韩亚洲在线 | 精品国产免费av | 91精品国产一区 | 911精品国产一区二区在线 | 欧亚免费视频 | 日本在线免费观看 | 国产精品久久久久久婷婷天堂 | 午夜色大片| 宅男午夜影院 | 日韩视频在线免费 |