您的位置:1010cc时时彩经典版 > 操作系统 > iOS8扩展插件开发配置,iOS应用之间的通信

iOS8扩展插件开发配置,iOS应用之间的通信

发布时间:2019-08-09 09:47编辑:操作系统浏览(185)

    App Extensions篇之Share Extension,appextensionshare

    转发请注解出处:

    转发请注脚出处:

    转载请评释出处:

    出于安全着想,iOS系统的沙盒机制规定每一种应用都不得不访问当前沙盒目录上面包车型客车文件(也可能有分裂,举例系统通信录能在用户授权的景况下被第三方选择访谈),那几个法则把iOS系统的密封性展现的痛快淋漓。详细能够参照笔者的iOS四线程技艺的篇章。

    一.iOS8恢宏插件概述

    WWDC14除了公布了OS X v10.10和switf外,iOS8.0也起初变得更为开放了。提及开放,当然要数应用扩大(App Extension)了。从名称想到所包罗的意义,应用增加允许开采者扩张应用的自定义作用和剧情,能够让用户在应用另外应用程序时使用该项功能,进而完结各种应用程序间的效应和能源分享。能够将增加通晓为叁个轻量级(nimble and lightweight)的分娩。

    以下为周围的三类插件:

    Target Type

    Extension point identifier

    Scenarios

    Today Extension

    com.apple.widget-extension

    系统通知栏下拉显示

    Share Extension

    com.apple.share-services

    Host App(照片、Safari、邮件、语音等)分享菜单第一行

    Action Extension(UI)

    com.apple.ui-services

    Host App(照片、Safari、邮件、语音等)分享菜单第二行

    下图为iPhone/iOS8中的【照片】分享:

    图片 1

    举个例子【微信】最多补助分享9张(NSExtensionActivationSupportsImageWithMaxCount=9)照片给密友或到对象圈。

    1.前言

    此处根本是对App Extension的有些介绍以及详细给大家介绍一下Share Extension,早先时期会加多任何的Extension介绍。

    1.前言

    这里关键是对App Extension的一对介绍以及详细给大家介绍一下Share Extension,中期会增添其他的Extension介绍。

    1.前言

    这里最首假若对App Extension的片段介绍以及详细给我们介绍一下Share Extension,早先时期会增多另外的Extension介绍。

    图片 2image.png

    二.插件职业体制

    1.插件只好与Host App通过上下文直接通讯

    图片 3

    2.插件可经过分享能源区与Containing App直接通讯

    图片 4

    3.Host App-Extension-Containing App专门的学业流程

    • Host App透过点击系统分享菜单中的插件Logo调起扩大程序——Share/ActionExtension (*.appex)。
    • iOS系统(Host App)通过扩张上下文(NSExtensionContext)向Share/ActionExtension传递欲分享的数量。
    • Share/Action Extension领取数额并类别化到以AppGroup ID标记的分享能源区NSUserDefaults/AppGroup Container(containerU途乐LForSecurityApplicationGroupIdentifier)中。
    • Share/Action Extension通过URL Scheme呼起ContainingApp,再者插件通过上下文向iOS系统(HostApp)发出request completion文告,以便回到到Host App(iOS系统会dismiss插件UIViewController)。
    • Containing App通过App Group ID从NSUserDefaults/containerUEvoqueL中读取分享过来的数据,并对分享数据开始展览后续管理。

     

    有鉴于此,扩充插件将Host App与Containing App勾搭起来,而App Group Container则架起了数据交互的鹊桥。

    此地必要小心的是,在iOS 8.0中,只有Today Extension才支撑直接调用NSExtensionContextopenURL:completionHandler:展开U奥迪Q5L链接;Share/Action Extension要想实现URubiconL Scheme,只可以创制多少个Sink UIWebVew对URL进行loadRequest完结曲线救国(所谓“Sink”是指隐而不显,比方frame=CGRectZero)。

    4.插件的UI形态

    插件在UI上以UIViewController格局存在,被parentViewController(Host App)以模态窗口方式弹出(present as modal viewController)。

    插件工程在Info.plist的NSExtension中通过NSExtensionMainStoryboard钦命UI视图入口。当然,假如不想行使storyboard,也得以选取NSExtensionPrincipalClass钦定自定义UIViewController子类名(也能够打包到UINavigationController)。

    注意:

     

    • 新建Extension Target后(Deployment Target≥8.0),需在Build Settings|Architectures|Valid Architectures中增加arm64
    • 开首安装Containing App时,扩大插件并未使能,必要到【更加的多】中张开按键。

    2.开始

    首要对App Extension和Share Extension进行介绍。请继续往下看:

    2.开始

    要害对App Extension和Share Extension实行介绍。请继续往下看:

    2.开始

    根本对App Extension和Share Extension进行介绍。请继续往下看:

    是因为沙盒机制的存在,iOS应用之间的通信就只可以通过直接的点子。正如苹果官方文书档案 ## Inter-App Communication所说。

    三.插件的局限性

    以下文字节选自《App Extension Programming Guide》,首要列举了插件的局限性,以知其可为不可为。


    1.Design a Streamlined UI

    • An extension`s UI should be simple, restrained, and focused on facilitating a single task.
    • To improve performance and the user`s experience, avoid including extraneous UI that doesn`t support your extension`s main task.

    2.Optimize Efficiency and Performance

    (1)App extensions should feel nimble and lightweight to users.

    • Design your app extension to launch quickly, aiming for well  style="text-decoration: underline">under one second.
    • An extension that launches too slowly is terminated by the system.

     (2)Memory limits for running app extensions are significantly lower than the memory limits imposed on a foreground app.

    • On both platforms, the system may aggressively terminate extensions because users want to return to their main goal in the host app.
    • Some extensions may have lower memory limits than others.

     (3)Your app extension doesn`t own the main run loop, so it`s crucial that you follow the established rules for good behavior in main runloops.

    • For example, if your extension blocks the main runloop, it can create a bad user experience in another extension or app.

     (4)Keep in mind that theGPU is a shared resource in the system.

    • App extensions do not get top priority for shared resources; for example, a Today widget that runs a graphics-intensive game might give users a bad experience. The system is likely to terminate such an extension because of memory pressure. 
    • Functionality that makes heavy use of system resources is appropriate for an app, not an app extension.

    同理可得,iOS系统对插件要求从简至上:UI运转要快、内部存款和储蓄器消耗要少、runloop推行耗费时间要短。

    iOS系统对插件的限定决定了付出的插件必须轻量,发点Twitter/乐乎分享、小图片文件分享、U中华VL跳转还是能的;奢望丰富炫人眼目的UI或然用来传大文件等大动作是不相宜的。

    理当如此,借使愿意扩充(就算脱离)奉行长期职务(比方上传/下载),能够行使NSURLSession来创设二个上传/下载session,并开端化三个后台上传/下载职责。

    注意:

    Apple也限制了扩充在API使用方面包车型大巴权柄,在扩展中禁止使用的API原型评释被标上了NS_EXTENSION_UNAVAILABLE宏。例如:

    (UIApplication*)sharedApplication NS_EXTENSION_UNAVAILABLE_IOS;

    对sharedApplication的范围实际上正是不让插件直接获得访问宿主应用(Host App的UIApplication)对象。

    2.1: App Extension的介绍

     官方给的传教是:App Extension能够使你扩充你的APP的自定义作用和剧情,使用户能够在与别的使用只怕系统实行相互的时候去行使它。翻译的不必然标准,那样说可能会好精晓:大家一贯看来的Widget、微信和QQ的share等等,都以App Extension,下图是部分事例:

    图片 5图片 6图片 7

    实在即是大家常常看到的Widget,可是Widget只是Today Extension,除了Today Extension,还或然有为数相当的多。

    一个支撑扩充的系统区域叫做二个extension point(扩张点)。各样增加点的恢弘都有温馨唯有的施用格局和API。你能够依照你的须要来选拔差别的壮大。官方API里面提议了贰个名词叫:Host app,大家得以把它精通为宿主的App也正是提供使用扩大分界面呈现恐怕功效的App。还会有八个container app,大家能够把它精通为容器App,就如上航海用体育场合的微信share extension,容器app正是微信。

    扩大和app不一样,扩大不能够独立上架AppStore。固然你不可能不运用个app来含有并且分发你的extension,extension也是三个独自的二进制文件,独立于用于传递和散发的container app。

    你能够由此File--->New --->Target来创造Extension,它和任何的target一样,它和你的app project组合成为四个产品。二个app能够有二个扩大,也得以有四个扩展。最棒的创建扩张的法门就是通过Xcode提供的Extension类别采取自个儿索要的来创立,里面含有了必备的API以及艺术达成。

    若是你想让用户去行令你的强大,那么就须求吗你的containing app发表到AppStore,当用户设置了您的Containing app,扩张也就安装了。差异的扩张运维的艺术也不一致等,举个例子Today Extension,你须求Widget来展现到你的文告宗旨。扩张也毫不乱用,增加的最棒用户体验向来都以希望用户操作更简短、越来越高速,並且注意于单个任务。

     

    2.1: App Extension的介绍

     官方给的布道是:App Extension能够使你扩大你的APP的自定义作用和剧情,使用户能够在与任何使用可能系统开始展览彼此的时候去行使它。翻译的不自然标准,那样说也许会好明白:大家一贯阅览的Widget、微信和QQ的share等等,都是App Extension,下图是部分事例:

    图片 8图片 9图片 10

    实在就是大家平常看到的Widget,可是Widget只是Today Extension,除了Today Extension,还会有多数。

    三个支持扩张的系统区域叫做叁个extension point(扩展点)。每一种扩充点的庞大都有友好只有的施用情势和API。你能够依靠你的供给来抉择不一样的扩大。官方API里面建议了一个名词叫:Host app,我们能够把它驾驭为宿主的App约等于提供利用扩大界面显示只怕成效的App。还会有一个container app,大家可以把它明白为容器App,就如上海体育场合的微信share extension,容器app便是微信。

    推而广之和app分化,增添不可能独立上架AppStore。固然你必须利用个app来含有何况分发你的extension,extension也是贰个独立的二进制文件,独立于用于传递和散发的container app。

    您能够透过File--->New --->Target来创设Extension,它和其余的target同样,它和您的app project组合成为二个成品。二个app能够有一个扩充,也能够有多个扩充。最棒的创办扩充的格局正是由此Xcode提供的Extension种类选拔自个儿须要的来创制,里面含有了必需的API以及艺术达成。

    假若你想让用户去采取你的扩张,那么就须要呢你的containing app公布到AppStore,当用户安装了您的Containing app,扩大也就设置了。差别的恢宏运行的办法也不一致等,比方Today Extension,你供给Widget来显示到你的打招呼核心。扩大也毫不乱用,扩张的极品用户体验平素都以希望用户操作更简洁、越来越高速,何况注意于单个任务。

     

    2.1: App Extension的介绍

     官方给的说教是:App Extension能够令你扩大你的应用程式的自定义作用和剧情,使用户能够在与别的使用恐怕系统举行互动的时候去行使它。翻译的不必然标准,这样说或许会好驾驭:大家一向见到的Widget、微信和QQ的share等等,都是App Extension,下图是部分事例:

    图片 11图片 12图片 13

    实则正是大家经常看到的Widget,不过Widget只是Today Extension,除了Today Extension,还恐怕有为数比很多。

    一个支撑扩展的种类区域叫做八个extension point(扩大点)。各个扩张点的壮大都有投机独有的选择办法和API。你能够遵照你的须求来挑选差别的增加。官方API里面提议了四个名词叫:Host app,大家能够把它精晓为宿主的App也正是提供利用扩充界面展现只怕功用的App。还应该有多少个container app,大家得以把它知道为容器App,就好像上海体育场合的微信share extension,容器app正是微信。

    扩张和app差异,扩充不也许独立上架AppStore。固然你必须利用个app来含有並且分发你的extension,extension也是二个单身的二进制文件,独立于用于传递和分发的container app。

    你能够经过File--->New --->Target来创制Extension,它和另外的target同样,它和你的app project组合成为贰个出品。二个app能够有贰个恢弘,也足以有多个扩展。最棒的创立扩充的主意正是透过Xcode提供的Extension种类选拔本人索要的来创建,里面包蕴了必需的API以及艺术完毕。

    比如您想让用户去行令你的扩展,那么就要求呢你的containing app发表到AppStore,当用户安装了你的Containing app,扩大也就设置了。分化的扩展运维的措施也不等同,举例Today Extension,你要求Widget来体现到您的文告宗旨。扩充也并非乱用,扩大的特级用户体验平素都是希望用户操作更简单、越来越高速,并且注意于单个职务。

     

    Apps communicate only indirectly with other apps on a device. You can use AirDrop to share files and data with other apps. You can also define a custom URL scheme so that apps can send information to your app using URLs.

    1. airDrop, 该措施平时是苹果设备之间传递文件使用,当然你也能够通过该方法分享safari里面包车型客车网页给别的一台道具的safari。
    2. 通过服务器来兑现,跨应用和跨设备之间的通讯。比如:QQ通讯录帮手,QQ, 微信,新浪今日头条等等等。
    3. 系统品级的施用,比方:通讯录,相册,健康等由系统会集管理的数据的行使,第三方选拔能够因此在info.plist里面注册认证用途,调用系统API来调用获取相应的数目,关于隐私数据苹果审查越来越严刻,也就要求info.plist里面表明数据用途尽大概详细具体,才更便于通过AppStore的稽核。
    4. 透过自定义U陆风X8L Scheme的花样,平时用来贰个选择调用别的二个采取,举个例子:社交化方面包车型大巴第三方登入,共享(QQ, 微信,天涯论坛等)。富含常用的第三方社交化框架ShareSDK、友盟也根本是根据此才具达成调用第三方应用程式进行登入依然分享等授权功效。当然开采者也足以自定义的款式来促成该部分机能,能够参见我作品:iOS晋级篇-应用之间的跳转
    5. 由此UIDocumentInteractionController恐怕是UIActivityViewController那俩个iOS SDK中封装好的类在App之间发送数据、分享数据和操作数据。该部分常用于跨应用展开文件:举例通过QQ传递过来的PDF文件,用PDF阅读器打来。
    6. 最后一种是App Extension,该片段机能是iOS8的SDK中提供开始展览新天品质。能够达成跨应用程式应用之间的操作和享用。

    四.Share/Action扩张插件援助的媒体类型配置

    Info.plist中的NSExtension|NSExtensionAttributes|NSExtensionActivationRule Dictionary能够布置插件帮忙的传播媒介类型及数码:

     

    iOS扩展插件支持媒体类型配置键

    描述

    配置

    说明

    NSExtensionActivationSupportsAttachmentsWithMaxCount

    附件最多限制

    20

    附件包括下面的File、Image和Movie三大类,单一、混选总量不超过20

    NSExtensionActivationSupportsAttachmentsWithMinCount

    附件最少限制

    上面非零时,default=1

    默认至少选择1个附件,【分享】中才显示扩展插件图标

        NSExtensionActivationSupportsFileWithMaxCount

    文件最多限制

    20

    文件泛指除Image/Movie之外的附件,例如【邮件】附件、【语音备忘录】等。

    单一、混选均不超过20。

        NSExtensionActivationSupportsImageWithMaxCount

    图片最多限制

    20

    单一、混选均不超过20

        NSExtensionActivationSupportsMovieWithMaxCount

    视频最多限制

    20

    单一、混选均不超过20

    NSExtensionActivationSupportsText

    文本类型

    default=0

    默认不支持文本分享,例如【备忘录】

    NSExtensionActivationSupportsWebURLWithMaxCount

    Web链接最多限制

    default=0

    默认不支持分享超链接,例如【Safari】

    NSExtensionActivationSupportsWebPageWithMaxCount

    Web页面最多限制

    default=0

    默认不支持Web页面分享,例如【Safari】

     

     

    宿主应用(Host App)提供三个上下文(NSExtensionContext)向增加(appex)传递数据,包括了待处理的多少(inputItems)。其传递的多寡是一组NSExtensionItem对象,个中要享受的图纸、录像、U汉兰达L等附属类小部件就保存在NSExtensionItem的attachments数组中。

    关于UTIs,参考UniformType Identifiers Reference | System-Declared Uniform Type Identifiers。

    媒体类型

    文件UTI

    图片(public.image)

    kUTTypeImage

    kUTTypeJPEG

    kUTTypePNG

    kUTTypeGIF

    kUTTypeTIFF

    kUTTypeBMP

    kUTTypeICO

    视频(public.movie)

    kUTTypeMovie

        kUTTypeQuickTimeMovie

        kUTTypeMPEG

        kUTTypeMPEG4

        kUTTypeAVIMovie

        @"public.3gpp"

        @"com.real.realmedia"

        @"com.microsoft.windows-media-wmv"

    @"com.microsoft.advanced-systems-format"

    音频(public.audio)

    kUTTypeAudio

    kUTTypeMP3

    kUTTypeMPEG4Audio

    kUTTypeWaveformAudio

    @"com.microsoft.windows-media-wma"

    文档

    kUTTypePDF

    @"com.microsoft.word.doc"

    @"com.microsoft.excel.xls"

    kUTTypePresentation

        @"com.microsoft.powerpoint.ppt"

        @"com.apple.keynote.key"

    压缩包

    kUTTypeZipArchive

    kUTTypeGNUZipArchive

    kUTTypeBzip2Archive

    @"public.tar-archive"

    @"org.gnu.gnu-zip-tar-archive"

    五.插件与Containing App的App Group证书配置

    Containing App及其Extension是透过以App Group ID标记的分享能源区—App Group Container来落到实处多中国少年共产党享的。

    Containing App及其Extension的App ID必须是Explicit,且Extension App ID必须以Containing App ID为Prefix/Seed,并且配备到同一App Group下。

    App ID配置到Info.plist的BundleIdentifier中;App Group在target的【Xcode Target|Capabilities】中启用,配置到【Xcode Target|Build Settings|Code Signing|Code Signing Entitlements】中的*.entitlements文件的com.apple.security.application-groups

    键中。

    表明和Provisioning Profile的报名以及Code Signing配置流程同以前一般的App,详细的情况请参照他事他说加以考察《iOS开荒证书要点详解》。

    2.1.1: Extension的种类

    作者们能够在Xcode的File--->New--->Target里面看到差异平台的Extension,富含iOS、watchOS、tvOS、macOS等等。这里根本介绍iOS,主要不外乎以下两种Extensions:

    1.Action Extension:动作扩张,在另八个应用程序的前后文中操作依然查看内容

    2.奥迪(Audi)o Unit Extension:音频单元扩大

    3.Broadcast UI Extension:广播UI 扩展

    4.布罗兹cast Upload Extension:广播上传扩充

    5.Call Directory Extension:呼叫目录扩展

    6.Content Blocker Extension:内容拦截器扩充

    7.Custom Keyboard Extension:键盘扩张,比方第三方的键盘,搜狗输入法,百度输入法等。

    8.iMessage Extension:新闻的扩展

    9.Intents Extension:Intents扩展

    10.Intents UI Extension:Intents UI扩展

    11.Notification Content Extension:布告内容扩大

    12.Notification Service Extension:布告服务扩充

    13.Photo 艾德iting Extension:图片编辑扩大,在照片app中编辑照片依旧录像

    14.Share Extension:分享增添,宣布贰个分享网址或然与其余使用分享内容。

    15.Shared Links Extension:分享链接扩展

    16.Spotlight Index Extension:Spotlight 索引扩充

    17.Sticker Pack Extension:贴纸包扩张

    18.Today Extension:Today扩大,能够便捷获得更新恐怕在布告中央的最近视图中执行一项飞速职务。

    等等。也可直接在那边参见更加的多extension。

    2.1.1: Extension的种类

    作者们能够在Xcode的File--->New--->Target里面看到差别平台的Extension,包含iOS、watchOS、tvOS、macOS等等。这里根本介绍iOS,首要归纳以下二种Extensions:

    1.Action Extension:动作扩张,在另三个应用程序的左右文中操作依然查看内容

    2.奥迪o Unit Extension:音频单元扩充

    3.Broadcast UI Extension:广播UI 扩展

    4.布罗兹cast Upload Extension:广播上传扩大

    5.Call Directory Extension:呼叫目录扩张

    6.Content Blocker Extension:内容拦截器扩大

    7.Custom Keyboard Extension:键盘扩张,举个例子第三方的键盘,搜狗输入法,百度输入法等。

    8.iMessage Extension:新闻的恢弘

    9.Intents Extension:Intents扩展

    10.Intents UI Extension:Intents UI扩展

    11.Notification Content Extension:文告内容扩张

    12.Notification ServiceExtension:公告服务扩展

    13.Photo Editing Extension:图片编辑扩大,在照片app中编辑照片恐怕录制

    14.Share Extension:分享扩充,发表多个分享网址仍旧与别的使用分享内容。

    15.Shared Links Extension:分享链接增加

    16.Spotlight Index Extension:Spotlight 索引扩大

    17.Sticker Pack Extension:贴纸包扩展

    18.Today Extension:Today扩张,能够相当的慢获得更新也许在通报中央的近年视图中进行一项火速职责。

    等等。也可直接在这里参见越来越多extension。

    2.1.1: Extension的种类

    小编们得以在Xcode的File--->New--->Target里面来看分化平台的Extension,满含iOS、watchOS、tvOS、macOS等等。这里根本介绍iOS,首要不外乎以下三种Extensions:

    1.Action Extension:动作增添,在另三个应用程序的前后文中操作照旧查看内容

    2.奥迪(Audi)o Unit Extension:音频单元扩大

    3.Broadcast UI Extension:广播UI 扩展

    4.Broadcast Upload Extension:广播上传扩充

    5.Call Directory Extension:呼叫目录扩展

    6.Content Blocker Extension:内容拦截器扩充

    7.Custom Keyboard Extension:键盘扩大,举个例子第三方的键盘,搜狗输入法,百度输入法等。

    8.iMessage Extension:信息的强大

    9.Intents Extension:Intents扩展

    10.Intents UI Extension:Intents UI扩展

    11.Notification Content Extension:公告内容扩张

    12.Notification ServiceExtension:通告服务扩充

    13.Photo 艾德iting Extension:图片编辑扩充,在照片app中编辑照片只怕摄像

    14.Share Extension:分享扩大,宣布一个分享网址或然与其余使用分享内容。

    15.Shared Links Extension:分享链接扩大

    16.Spotlight Index Extension:Spotlight 索引扩张

    17.Sticker Pack Extension:贴纸包扩张

    18.Today Extension:Today扩张,能够飞快获得更新可能在通告大旨的这两天视图中施行一项快捷职责。

    等等。也可径直在这里参见越来越多extension。

    本篇小说将围绕格局5和艺术6进展介绍那上边的技艺,也等于苹果原生提供的依据iOS SDK的享受技艺。同一时间引进俩篇苹果开辟者中心的文书档案:Inter-App Communication和Document Interaction Programming Topics for iOS

    六.Containing App的Build Phases配置(embed app extensions)

    Containing App 的【Xcode target|BuildPhases|Target Dependencies】中得以增加或移除插件target。

    Containing App 的【Xcode target|BuildPhases|Embed App Extensions】下Destination为Plugins中得以增进或移除插件product(*.appex)。

    注意:暗中同意了勾选“Copy only when installing”,表示从AppStore安装(包罗提高覆盖)时才拷贝插件。Xcode连接真机调节和测验时,需取消该改项,不然系统【分享】菜单中不会产出插件

    本文由1010cc时时彩经典版发布于操作系统,转载请注明出处:iOS8扩展插件开发配置,iOS应用之间的通信

    关键词: