APPClip实践
背景
距离上次开发者大会已经过去几个月了,网上课参考的资料也多了起来,iOS14的适配也已经基本完成验证,乘着项目周期间隙,终于可以研究一下新特性了。今天我们就来试试这个APPClip.
简介
App Clip是一种很好的让用户快速访问并体验你的App提供了什么内容的方式。App Clip是App的一部分,在需要的时候就可以找到它。App Clip很快也很轻,用户可以很快打开它们。当用户从这个饭馆点了外卖、租了一个滑板车或是第一次设置一个新连接上的设备,可以在短短几秒内开始并完成使用App的体验。当他们完成之后,用户就有机会下载你的App了。
上面这个是官方简介,看到这个就想起了微信小程序。没错,就是和微信小程序的功能一样,不过是用原生语言开发,对iOS开发者更加友好。后面还提到了APPClip码、NFC、二维码等使用场景,这让我想起了刷地铁卡的经历,可能之后可以在锁屏的情况下使用吧,人机交互会比微信更加便捷。
当然和原生比也有很多限制,比如大小10M等,这个就对开发者的要求变高了,现在随便个APP就要50多M..也就是说APPClip是原APP阉割版,功能更精简。
实践环境
开发开发工具:XCode 12Beta1(公司网络限制,下载新的太慢)
手机:iphonex(iOS14 beta6)
开始实践
首先新建一个工程,创建一个APPClip target。这步比较简单,步骤略过。
建好后我发现多了一个SceneDelegate.m
原来从xcode11开始,Appdelegate的一些功能分给了SceneDelegate,使用起来和原来的Appdelegate差不多。老项目需要新增SceneDelegate的话可以通过修改fileInfo.plist实现。
新增SceneDelegate.png增SceneDelegate.png)
cocoapods测试
cocoapods是常用的依赖管理工具,新建target自然也要测试一下cocoapods是否支持AppClip。正常pod install。
cocoapods.png没有报错,基本库私有库依赖都成功引用,完美。但是一运行就崩溃,报错是动态库找不到。打开包一看,动态库的frameWorks没有正常复制到包中。
[图片上传失败...(image-16c423-1598940228407)]
[图片上传失败...(image-6ed574-1598940228407)]
因为我们的私有库中依赖动态库,可能cocoapods对appclip还没适配吧,复制脚本不对(目前是1.9.3版本)去官网查看,果然有Beta版本。
cocoapods官网.png升级到1.10.0.beta.2后,在尝试一下instal,能正常找到framework了。
pod正常.png顺便看了下包大小13M。。引入基础依赖就超10M了。。用APPclip实现原本项目APP任重而道远啊。
环境配置
正常的APPClip启动是通过链接的方式打开的,然后配置文件需要放在服务器上,并且进行关联。但是作为开发者,xCode提供了一个很便捷的功能,在run的环境变量中配置参数就可以模拟用户点击链接。这样就不用麻烦服务器的同学,进行本地测试了。
环境配置.png启动测试
由于APPClip和原生APP共用一套代码,那么久需要区分是从APP远程进来的还是用APPClip进来的。通过测试原生启动和APPClip启动都会调用SceneDelegate中的以下方法
启动.png那么能区别的参数就是(UISceneConnectionOptions *)connectionOptions
了。
将两次进入的时候po出来做对比
原APP
原生.pngAPPClip
APPClip.png结果很明显了,那么怎么获得刚才设置的链接呢?毕竟还需要通过链接跳转到不同的页面。经过尝试,最终找到了链接。方法如下:
链接.png url.png代码层面的区别
上面说了启动的跳转方案,那么现在再讨论下代码层面如何区别。因为是2个target,有经验的同学应该都能想到Apple Clang - preprocessing
,自己手动加个标志就可以了。
#ifdef APPClip
// 可以在App Clip中使用的代码
#else
// 不想在App Clip中使用的代码
#endif
本地数据共享
APPClip和远程APP的使用还有个关键点,那就是本地数据共享。当然通过服务器共享是比较方便的。一般本地数据共享有这么几个方法:
- 沙盒缓存共享
- 钥匙串共享
但是APPClip和原生APP的BundleId不一样,是否可以通过上述方式共享呢?先测试下第一种沙盒模式
沙盒数据共享测试
首先就是获取沙盒地址,APPClip类似于小程序,在桌面没有应用,那么是否有沙盒呢?
本地沙盒.png
令我震惊的是,居然获取到了沙盒地址。。然后再测试下存文件,新建一个文件夹测试。
新建文件夹.png结果是建成功了,并且使用也是正常。那么这个沙盒和原APP是用同一个吗?这边又将相同的代码赋值到从原生APP进来进行测试,并不能获取到APPClip中创建的文件夹,因此沙盒是分开存储的。
获取沙盒.png
查了下资料,要使用共享容器进行数据交互,另外要是串只能和原本APP交互。这个需要配置证书,和widget一样使用,具体方法网上很多,这里就不再叙述了。
共享容器.png总结
总的来说,APPClip类似小程序,对原生开发者来说,没有语言上的门槛,还是很友好的。但是是否能普及还是有很大的疑问,毕竟在国内微信小程序已经培养了用户习惯,店家也不会无故增加成本做相同的东西。但是从技术的角度来说,还是有备无患才好。
网友评论