Widget、3DTouch、自动化打包

2019-02-19  本文已影响0人  风ai翔

这篇文章主要记录开发及打包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:

10、Widget的调试方法:


-w280

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

12、Widget生命周期:

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

-w497
三、打包时问题

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

1、描述文件问题:

<dict>
    <key>compileBitcode</key>
    <false/>
    <key>method</key>
    <string>ad-hoc</string>
</dict>
</plist>

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

3、APP Group ID问题:

上一篇下一篇

猜你喜欢

热点阅读