你的位置:首页 > 软件开发 > 操作系统 > App Today Extension开发注意事项

App Today Extension开发注意事项

发布时间:2016-11-16 19:01:14
从iOS 8起,就有了App Extension。Extension的种类至今也扩充到了19种,应用也很广泛,值得重点关注起来。Extension几乎可以看做一个内嵌的独立App,拥有独立的BundleID、证书、概要配置文件、进程空间、沙盒等等。只是需要打包在App内,类似于寄 ...

从iOS 8起,就有了App Extension。Extension的种类至今也扩充到了19种,应用也很广泛,值得重点关注起来。

Extension几乎可以看做一个内嵌的独立App,拥有独立的BundleID、证书、概要配置文件、进程空间、沙盒等等。只是需要打包在App内,类似于寄生在宿主App内,捆绑安装。不过一旦安装应用后,扩展可以由系统独立调用,执行扩展内的代码逻辑。

这篇只记录之前开发Today Extension的过程中,值得注意的事项。其实大多都是通用的。

 

1.创建Extension和证书管理

在已创建的项目中,新建File->New->Target->Today Extension,确定名称后,就可以在工程文件的Targets列表中,看到新建的extension。

在General栏可以看到,Extension有独立的Identity内容,Bundle Identifier一般具有宿主应用的Bundle Identifier前缀。如果使用Xcode8的自动管理证书,并登录了开发者账号,可以在开发者中心看到自动创建的该AppID。

接着为该AppID创建Provisioning files即可。

 

2.MainInterface.storyboard和主要的类

新创建的Extension与App的主Target分别在不同的文件目录下,彼此隔离。主界面、Info.plist和本地化文件等都是单独管理的,所以可创建并修改InfoPlist.strings的本地化文件中CFBundleDisplayName字段,单独为扩展命名,如果不修改,将默认使用宿主App的显示名称。

扩展和宿主App是隔离的,不能使用彼此的类、框架、资源,如果想使用宿主的类库或者资源文件等,最直接的办法就是拷贝到当前Target或者增加需要Link的框架。不过,查看Extension的Build Settings,Prefix Header可以填写宿主App的Prefix Header,并使用其引用头文件中的宏定义。

扩展默认使用了MainInterface.storyboard,并绑定了一个类TodayViewController,并已经创建了一个Hello World视图,我们可以直接使用并修改。但是如果不想使用storyboard或者需要修改启动类,可以将Info.plist文件中NSExtension字典的NSExtensionMainInterface项去掉,增加NSExtensionPrincipalClass项,value则为指定启动类的类名,例如TodayViewController。

 

3.生命周期

扩展的视图控制器与宿主的视图控制器一样,具有常见的生命周期方法。例如当第一次在下拉的“今日”列表中显示本应用扩展,则会执行viewDidLoad方法,然后依次执行其他方法;消失和再次出现,则会调用disappear和appear系列方法;即将被销毁时候,调用dealloc方法。

 

4.Today Extension的size

iOS10以后,重新规定了Today Extension的size。宽度是固定(例如在iPhone6上是359),所以无法改变;但是高度方面,提供了两种模式:

NCWidgetDisplayModeCompact:固定高度,则为110

NCWidgetDisplayModeExpanded:可以变化的高度,区间为110~616

使用如下代码可以修改模式:

  if ([[UIDevice currentDevice].systemVersion floatValue] >= 10) {       

    self.extensionContext.widgetLargestAvailableDisplayMode = NCWidgetDisplayModeExpanded;

原标题:App Today Extension开发注意事项

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录