美文网首页
Share Extension

Share Extension

作者: 小王在努力 | 来源:发表于2018-06-29 15:53 被阅读110次

    iOS - Share Extension

    1. 在学习 Share Extension 之前,我们需要 先了解一下iOS的App Extension

    2.1 创建Share Extension扩展Target

    //注意:扩展不能单独创建,必须依赖于应用工程项目也就是载体,因此如果你还没有创建一个应用工程,先去创建一个

    2.1.1、打开项目设置,在TARGETS侧栏地下点击“+”号来创建一个新的Target,如图:

    添加Target(这边我已经添加了一个MyAppShare步奏如下)

    2.1.2、然后选择”iOS” -> “Application Extension” -> “Share Extension”,点击“Next”。如图:

    差距选择

    创建ShareExtension扩展

    2.1.3、给扩展起个名字,这里填写了“MyAppShare”,点击“Finish”。如图:

    创建插件名称图

    2.1.4、这时候会提示创建一个Scheme,点击“Activate”

    那么,到了这里创建Share Extension的工作就算是完成了。接下来可以先进行一下编译运行。这里跟做App开发的时候会稍微有点不一样。因为Extension是需要Host App(宿主应用)来运行的。所以,XCode中会弹出界面让我们选择一个iOS的App来运行Extension。如图:

    宿主选择图

    选择宿主应用

    这里我选择了XCode建议的应用Safari,然后点击“Run”来进行调试运行。XCode会启动Safari,如图:

    启动图

    我们随便点开一个网页,点击分享按钮就会弹出分享菜单,如图:

    分享菜单弹框图

    运行效果图

    可以看到刚才建立的Share扩展已经显示在面板上了,如果你没有发现自己的扩展,那么你可以将菜单滑动到最右边,在“更多”选项中激活自己的扩展。如图:

    我们点击自己创建的分享项,其弹出一个分享窗口。如图:

    分享界面效果图

    2.2. 配置Share Extension

    接下来我们需要给他一些设置。我们展开XCode左侧栏的MyASppShare目录,找到Info.plist文件。如

    配置图

    我们只需要关注以下几个字段的设置:(更多详细的Information Property List Key Reference

    Bundle display name

    扩展的显示名称,默认跟你的项目名称相同,可以通过修改此字段来控制扩展的显示名称。

    NSExtension

    扩展描述字段,用于描述扩展的属性、设置等。作为一个扩展项目必须要包含此字段。

    NSExtensionAttributes

    扩展属性集合字段。用于描述扩展的属性。

    NSExtensionActivationRule

    激活扩展的规则。默认为字符串“TRUEPREDICATE”,表示在分享菜单中一直显示该扩展。可以将类型改为Dictionary类型,然后添加以下字段:
    NSExtensionActivationSupportsAttachmentsWithMaxCount
    NSExtensionActivationSupportsAttachmentsWithMinCount
    NSExtensionActivationSupportsImageWithMaxCount
    NSExtensionActivationSupportsMovieWithMaxCount
    NSExtensionActivationSupportsWebPageWithMaxCount
    NSExtensionActivationSupportsWebURLWithMaxCount

    NSExtensionMainStoryboard

    设置主界面的Storyboard,如果不想使用storyboard,也可以使用NSExtensionPrincipalClass指定自定义UIViewController子类名

    NSExtensionPointIdentifier

    扩展标识,在分享扩展中为:com.apple.share-services

    NSExtensionPrincipalClass

    自定义UI的类名

    NSExtensionActivationSupportsAttachmentsWithMaxCount

    附件最多限制,为数值类型。附件包括File、Image和Movie三大类,单一、混选总量不超过指定数量

    NSExtensionActivationSupportsAttachmentsWithMinCount

    附件最少限制,为数值类型。当设置NSExtensionActivationSupportsAttachmentsWithMaxCount时生效,默认至少选择1个附件,分享菜单中才显示扩展插件图标。

    NSExtensionActivationSupportsFileWithMaxCount

    文件最多限制,为数值类型。文件泛指除Image/Movie之外的附件,例如【邮件】附件、【语音备忘录】等。单一、混选均不超过指定数量。

    NSExtensionActivationSupportsImageWithMaxCount

    图片最多限制,为数值类型。单一、混选均不超过指定数量。

    NSExtensionActivationSupportsMovieWithMaxCount

    视频最多限制,为数值类型。单一、混选均不超过指定数量。

    NSExtensionActivationSupportsText

    是否支持文本类型,布尔类型,默认不支持。如【备忘录】的分享

    NSExtensionActivationSupportsWebURLWithMaxCountWeb

    链接最多限制,为数值类型。默认不支持分享超链接,需要自己设置一个数值。

    NSExtensionActivationSupportsWebPageWithMaxCount

    Web页面最多限制,为数值类型。默认不支持Web页面分享,需要自己设置一个数值。

    对于不同的应用里面有可能出现只允许接受某种类型的内容,那么Share Extension就不能一直出现在分享菜单中,因为不同的应用提供的分享内容不一样,这就需要通过设置NSExtensionActivationRule字段来决定Share Extension是否显示。例如,只想接受其他应用分享链接到自己的应用,那么可以通过下面的步骤来设置:

    将NSExtensionActivationRule字段类型由String改为Dictionary。

    展开NSExtensionActivationRule字段,创建其子项NSExtensionActivationSupportsWebURLWithMaxCount,并设置一个限制数量。

    2.3 处理Share Extension中的数据

    顶部包含取消和分享两个按钮同时在插件中也包含两个对应方法

    - (void)didSelectCancel;

    - (void)didSelectPost

    在这两个方法里面可以进行一些自定义的操作。一般情况下,当用户点击提交按钮的时候,扩展要做的事情就是要把数据取出来,并且放入一个与Containing App(容器程序,尽管苹果开放了Extension,但是在iOS中extension并不能单独存在,要想提交到AppStore,必须将Extension包含在一个App中提交,并且App的实现部分不能为空,这个包含Extension的App就叫Containing app。Extension会随着Containing App的安装而安装,同时随着ContainingApp的卸载而卸载。**)共享的数据介质中(包括NSUserDefault、Sqlite、CoreData),要跟容器程序进行数据交互需要借助AppGroups服务.下一篇我们会讲到如何实现我们的主程序和拓展程序之间的通讯。

    相关文章

      网友评论

          本文标题:Share Extension

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