非常感谢大家利用自己宝贵的时间来阅读我的文章 ,好久没有写东西了,这几天给项目添加苹果iOS8之后的shareExtension功能,踩了些坑,做下总结,希望后面的朋友们做这个功能的时候可以在这里一站式解决😄。希望这篇文章能给你的开发过程带来一些帮助。喜欢的可以关注一下我的简书、我的博客
关于shareExtension的基本功能和实现网上有很多资料,作者不想多说并向你扔了个传送门iOS Share Extension开发
下面主要说一下再整个过程中个人觉得比较重要的几个地方
#1、NSExtensionActivationRule配置
NSExtensionActivationSupportsAttachmentsWithMaxCount(附件最多限制)NSExtensionActivationSupportsAttachmentsWithMinCount(附件最少限制)NSExtensionActivationSupportsImageWithMaxCount(图片最多限制)NSExtensionActivationSupportsMovieWithMaxCount(视频最多限制)NSExtensionActivationSupportsWebPageWithMaxCount(Web页面最多限制)NSExtensionActivationSupportsWebURLWithMaxCount(Web链接最多限制)NSExtensionActivationSupportsFileWithMaxCount(文件最多限制)NSExtensionActivationSupportsText(是否支持文本类型)
这些属性根据自己的需求设置好数量就行。说一下可能遇到的问题
**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
#2、获取分享数据搭建UI
在自定义VC的viewDidLoad异步获取分享数据,获取完毕刷新UI
[MBProgressHUD showHUDAddedTo:self.view animated:YES];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{//异步获取分享内容
dispatch_group_t group = dispatch_group_create();
[self.extensionContext.inputItems enumerateObjectsUsingBlock:^(NSExtensionItem * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
[obj.attachments enumerateObjectsUsingBlock:^(NSItemProvider * _Nonnull itemProvider, NSUInteger idx, BOOL * _Nonnull stop) {
dispatch_group_enter(group);
NSString *utiStr = @"要分享文件的UTI";
if ([itemProvider hasItemConformingToTypeIdentifier:utiStr])
{
[itemProvider loadItemForTypeIdentifier:“utiStr” options:nil completionHandler:^(id<NSSecureCoding> _Nullable item, NSError * _Null_unspecified error) {//在这里保存获取到的分享数据
if ([(NSObject *)item isKindOfClass:[NSURL class]]){
} else if ([(NSObject *)item isKindOfClass:[UIImage class]]) {//截图||APP图片
}else if ([(NSObject *)item isKindOfClass:[NSString class]]) {//文本
}
dispatch_group_leave(group);
}];
}
}];
}];
dispatch