2024-06-22 11:43:36
下面主要说一下再整个过程中个人觉得比较重要的几个地方
这些属性根据自己的需求设置好数量就行。说一下可能遇到的问题
1.1、 NSExtensionActivationSupportsText,主要用于备忘录之类文本分享,网上资料有的说设置bool类型,有的说设置string类型,值为YES,我这边都不好使,最后设置为值为1的number类型可以了。如果跟我遇到同样问题的可以试下
1.2、 在App Store分享APP时,有两个NSExtensionItem,UTI分别为public.url和public.png,loadItemForTypeIdentifier获取item类型为NSURL和UIImage,截图分享的item类型也为UIImage
在自定义VC的viewDidLoad异步获取分享数据,获取完毕刷新UI
这块是这个功能踩坑最多的地方,因为在widget中内存限制为120M,图片、视频、文件,随随便便都超了,这里说一下几个需要注意的地方
这里主要是多图时可能会出现内存过大的情况,我这边的处理是直接把图片copy到共享目录,然后跳转主App里发送原图。也可以直接将图片压缩后转成base64str数组然后写入共享目录,不过压缩比例不好控制,压缩后的总大小,小图不能压缩等都要考虑进去,下面把几个用到的方法和处理时机贴一下
3.1.1、 图片压缩方法
3.1.2、 图片base64str互转
3.1.3 、获取主要信息loadItemForTypeIdentifier方法里保存图片地址,用于UI展示及后续写入共享目录
3.1.4、 确认分享时把图片批量copy到共享目录,也可以选择压缩后转base64str数组写入文件
3.1.5、 呼起主APP后先从获取图片地址数组,在通过图片地址取分享数据
一方面是UI展示所需要的内容,如视频封面图、时长、大小,文件的大小、类型
这里说一下取文件大小时不能取NSData得length方式,大文件会导致内存溢出,应该使用NSFileManager获取,这里要注意下通过loadItemForTypeIdentifier取得的路径要先stringByRemovingPercentEncoding解码再截取/var之后的路径,比如你取得文件路径为file%3A%2F%2F%2Fprivate%2Fvar%2Fmobile%2FLibrary%2FMobile%20Documents%2Fcom%7Eapple%7ECloudDocs%2F%E6%9C%AA%E5%91%BD%E5%90%8D%E6%96%87%E4%BB%B6%E5%A4%B9%2Faaa.pdf
那你要用/var/mobile/Library/Mobile Documents/com~apple~CloudDocs/未命名文件夹/aaa.pdf去取文件大小,下面把主要用的方法贴一下
3.2.1、 文件大小以及格式化
3.2.2、 获取视频时长(这里要用全路径)
3.2.3、 获取视频封面图(这里也要用全路径)
3.2.4、 获取文件类型对应切图,把图片素材替换为你们UI给的切图
因为需要把分享的文件存储到group共享目录里去,当文件超过120M的时候,就不能使用writeToURL了,要不会内存溢出,这里使用NSFileManager的copyItemAtPath,在使用这个函数的时候两个路径都要使用解码后再截取/var之后的路径
目前能想到的就这么多啦,如果有什么疑问或者发现什么不足,欢迎评论指正。