美文网首页
Widget、3DTouch、自动化打包

Widget、3DTouch、自动化打包

作者: 风ai翔 | 来源:发表于2019-02-19 14:54 被阅读0次

这篇文章主要记录开发及打包Widget项目时遇到的坑,及解决方案。
具体开发过程可参考:
Widget开发
3DTouch开发

一、Widget发展史

1、Widget也叫作 Today Extension,iOS8推出第一版,iOS10大幅度修改,支持收缩展开功能,且可自定义高度,系统默认的高度为110pt。

2、3D Touch也叫作 Shortcut,从iPhone 6s及其以上机型开始支持,iOS9以上系统才支持,iOS10后 3D Touch支持显示一个Widget。

二、开发中问题

1、一个项目可加多个Widget,3D Touch时显示哪个Widget是可配的:


image
  • 在Info.plist 中添加 UIApplicationShortcutWidget,其 Value 代表快捷菜单中展示的 Extension 的 Bundle id
  • value为空字符串,可以让3D Touch不显示Widget,但有人透露无法通过上线审核。

2、隐藏和显示Widget方法:

#import <NotificationCenter/NotificationCenter.h>

    BOOL show = NO;
    NSString *bundleID = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleIdentifier"];
    NCWidgetController *widgetController = [NCWidgetController widgetController];
    [widgetController setHasContent:show forWidgetWithBundleIdentifier:bundleID];

3、3D Touch最多可以给用户自定义4个Item,AppStore的包系统自动添加分享“**”,TestFlight的包系统自动添加发送Beta版反馈。也就是最多5个Item。

4、Widget的BundleID的前缀必须是 主Target的BundleID,否则编译报错。

5、3D Touch支持APP内事件、APP外事件,APP外事件效果可查看系统的照片邮件APP,代码实现可参考上面附件。

6、Widget可以使用的内存远远低于APP的可用内存,因此当内存吃紧的时候,会优先杀死Widget。

7、使用图片也是必不可少,然而直接 imageNamed: 和 imageWithContentsOfFile: 两种方式加载都不行,即使设置了文件的 target 为 Widget Extension,后来在其target 内部建立一个 .xcassets 文件,再使用 imageNamed: 和 imageWithContentsOfFile: 即可加载图片。图片最好压缩一次,推荐TinyPNG

8、图片太大、内存不足会导致Widget闪退,Widget闪退也会有UI展示,如下图: -w555

9、Widget可以单独看作是一个app:

  • Mach-O Type和主Target一样,是Executable
  • 在Widget的代码上打断点,会发现没有效果
  • 共享数据需要使用APP Group
  • 宿主app被杀进程不影响Widget
  • 与宿主app的交互使用openURL: Scheme

10、Widget的调试方法:


-w280
  • 选择Widget的Target,直接运行,断点这时候才会生效

11、重启Widget的方式:
发现Widget闪退了,怎么重启呢?
重启手机,修改系统语言,卸载重装,触发内存不足

12、Widget生命周期:

  • Widget的代码是写在一个ViewController里的,第一次(启动)运行时,生命周期同普通VC一样。
  • 如果Widget短时间内过于频繁的消失显示,VC直接只会执行viewWillAppear方法。
  • 当Widget从屏幕上消失2s左右,就会调用dealloc,再次出现在屏幕中时,都会重新调用viewDidLoad
    但是Widget APP进程并没有被杀死,内存不足才会被杀死。

13、新增一个Target,XCode能自动获取主Target的自定义字段,一些编译前数据可以保存在这里进行数据共享。说明所有Target共享使用App.xcconfig文件。

-w497
三、打包时问题

正常开发原本已经完成,但是我们的项目需要支持Jenkins自动化打包和重签名,因此引发这个模块问题总结。

1、描述文件问题:

  • fastlane sigh生成PP文件命令,添加参数 指定BundleID、指定输出PP文件名,输出主Target和Widget的两个PP文件。
  • 打包配置文件exportOptions.plist改成自动管理PP模式
<dict>
    <key>compileBitcode</key>
    <false/>
    <key>method</key>
    <string>ad-hoc</string>
</dict>
</plist>

2、重签名命令fastlane sigh resign 可以直接指定多个bundleID和PP文件,只要一一对应上就行。

3、APP Group ID问题:

  • 同一个开发者账号下的所有APP,可以通过同一个Group ID垮APP共享数据。打破沙盒环境的限制。
  • Group ID 与 BundleID 一样,必须唯一。因此马甲包重签名后,必须使用另外一个Group ID,这里就使用了XCode的App.xcconfig文件和User-Defined字段来配置。

相关文章

网友评论

      本文标题:Widget、3DTouch、自动化打包

      本文链接:https://www.haomeiwen.com/subject/dsxfyqtx.html