iPhone Today Extension

来源:互联网 发布:数据分析适合女生吗 编辑:程序博客网 时间:2024/06/14 02:41

我们项目中想要添加iPhone Today Extension功能,之前没有自己接触过Extension的新功能今天抽了点时间看了看。

ExtensioniOS8新添加的特性,主要是为了改善iOS沙河机制对应用间通信限制。iOS8新添加了6个扩展,iOS9又新添加了4个,分别是:

iOS8:

  • Today
  • Share
  • Action
  • Photo Editing
  • Storage Provider(Document Provider)
  • Custom Keyboard

iOS9新添加四个:

  • Audio Unit
  • Content Blocker
  • Shared Links
  • Spotlight Index

今天我们主要看一下Today Extension的实现。Today Extension(也叫Widget)究竟是个什么鬼呢,如下图:
img1

Today Extension创建步骤

开始之前先要创建一个iOS项目,因为Extension不能脱离containing app而存在。本项目实例名为,TodayExtensionDemo,项目创建完后
具体步骤如下:

  1. File -> New -> Target 选择Today Extension,点击继续。
    img2

  2. 给Extension起个响亮的名字后点击创建。
    img3

  3. 创建完后项目中会多三个文件:

    • TodayViewController.h/.m
    • MainInterface.storyboard
    • info.plist
  4. 运行,设置Active Scheme为刚创建的Extension,点击运行,点击运行后会出现一个选择框,选择Today就可以了,如下图:
    img4

img5
这时你就可以看到一个Hello World出现了。

接下来的工作就是自定义这个展示页面了,如果你习惯使用Storyboard直接在MainInterface.storyboard上修改即可,如果你习惯自己Coding,你需要先修改一下info.plist
修改方法:

删除

<key>NSExtensionMainStoryboard</key><string>MainInterface</string>

添加:

<key>NSExtensionPrincipalClass</key><string>TodayViewController</string>

部分代码

1.调整Widget的高度

-(void)awakeFromNib {    [super awakeFromNib];    [self setPreferredContentSize:CGSizeMake(0, 240)];}

2.如果你要访问http站点链接,iOS9之后因为苹果App Transport Security (ATS)新特性,无法直接访问http数据,你也需要在Extension的plist中添加如下代码:

<key>NSAppTransportSecurity</key><dict>    <key>NSAllowsArbitraryLoads</key>    <true/></dict>

3.因为Extension和containing app无法进行数据和文件共享,所以你还需要在Extenison中再添加一遍需要的文件。

4.在widget想要点击页面打开containing app。需要采用Open URL的方式打开containing app。

首先,在containing app的info.plist添加如下代码:

<key>CFBundleURLTypes</key><array>    <dict>        <key>CFBundleURLName</key>        <!--这个一定要唯一-->        <string>com.wildcat.TodayExtensionDemo</string>          <key>CFBundleURLSchemes</key>        <array>            <!--调转URL的host,例如:TodayDemo:// --->            <string>TodayDemo</string>                            </array>    </dict></array>

在today extension中实现:

-(void)openURLContainingAPP{    [self.extensionContext openURL:[NSURL URLWithString:@"lecoding://action=GotoHomePage"]                 completionHandler:^(BOOL success) {                     NSLog(@"open url result:%d",success);                 }];}

在 containing app appdelegate中添加如代码,接收跳转:

-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options{    NSString* prefix = @"TodayDemo://";    if ([[url absoluteString] rangeOfString:prefix].location != NSNotFound) {        NSString* action = [[url absoluteString] substringFromIndex:prefix.length];        if ([action isEqualToString:@"GotoHomePage"]) {        }        else if([action isEqualToString:@"GotoOtherPage"]) {         }    }    return YES;}

如何使用containing app中的图片

虽然Extention无法和containing app 公用库文件,但是可以公用图片,方法就是:

  1. 左侧选中containing app的Assets.xcassets,在右侧File Inspector中的Target Membership勾选Extension项目名。如下图:

img7

更多iOS、Android开发精彩文章请关注微信公众账号:lecoding,你也可以扫描下方二维码关注我们。

img45

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 不能吃小龙虾的人吃了怎么办 闲鱼退货卖家收到货不退款怎么办 没收到货申请退款卖家不同意怎么办 咸鱼买家不确认收货老退款怎么办 买家买了确认收货然后退款怎么办 买家收确认收货后还申请退款怎么办 淘宝收到货后买家故意说少货怎么办 对面商铺放很大声音乐怎么办 在店面住隔壁商铺一直放音乐怎么办 淘宝卖家把买家评论删了怎么办 淘宝店铺上当顾客说再看看怎么办 车辆摇号申请说手机号注册怎么办 如果在微商手上买到假东西怎么办? 登陆微信显示版本过低该怎么办 苹果手机登陆微信版本过低怎么办 微信版本过低无法登怎么办录 登入微信显示版本过低登不上怎么办 微信版本过低无法使用小程序怎么办 小米4s微信反应很慢怎么办 手机网页缓存的视频播放不了怎么办 ios微信占用内存太大了怎么办 爱奇艺离线视频显示暂无缓存怎么办 酷狗音乐不小心删了歌怎么办 苹果手机里系统占的空间太大怎么办 酷狗音乐歌单里有不同步的歌怎么办 一插耳机手机自带音乐就响怎么办 清理空间时不小心把图片删了怎么办 手机中清理误把照片删了怎么办 清理手机文件把照片给删了怎么办 清理手机不小心把照片删了怎么办 金牛不回微信我也不理他他会怎么办 华为手机微信文件自动删除怎么办 微信清理数据后不能登录了怎么办 k歌占内存又不想删除歌曲怎么办 把所有商品放在一起做链接怎么办 微信解冻短信验证总显示失败怎么办 淘金币能抵钱商家拿了淘金币怎么办 真实订单被系统判定虚假交易怎么办 淘宝买家号疑似虚假交易违规怎么办 货品交易一方收了定金违约了怎么办 饿了么店铺收到差评怎么办