创建一个App Clip

官方Demo下载地址Feature-Rich App, 建议学者下载此Demo参考。

概述

在你的Xcode项目中,在你的应用程序中target需要新建一个你的App Clip,App Clip与你的主应用程序共享code和assets。在你的工程中App Clip与其他targets一样,您可以使用Xcode在模拟器或设备上构建、运行和调试App Clip。此外,您必须配置web服务器以使系统能够验证App Clip的真实性。
*** Important
在创建App Clip之前,请参见:Developing a Great App Clip或者笔者的App Clips功能***

添加一个App Clip Target

创建一个App Clip,需要提供至少与App clip相同功能的主应用工程,并且你应该对主应用和App clip使用相同的Xcode项目。如果你要启动一个新的应用项目,首先用Xcode创建一个新的iOS项目。如果要将App Clip添加到现有应用程序中,请打开其Xcode项目,然后,将app clip target添加到Xcode项目:

  1. 添加App Clip Target


    5.png
  2. 选择好Project,填写其它选项,点击“Finish”


    6.png

Xcode会为你选择的选项创建所有必需的文件,并为你的App Clip添加一个Target:

  • 会创建一个App Clip Scheme用于build和run你的App Clip。

  • 会创建一个新增能力On Demand Install Capable

  • Parent Application Identifiers Entitlement

  • App Clip的Bundle Identifier使用主应用的Bundle Identifier作为其前缀,后跟一个字符串。例如,如果主应用的Bundle Identifier为(AppIdentifierPrefix)com.example.MyApp,App Clip的Bundle Identifier将为(AppIdentifierPrefix)com.example.MyApp.Clip。

  • _XCAppClipURL环境变量作为app clip方案的一部分,允许您测试调用。

  • 支持与主应用相同的设备,不包括macOS。

此外,Xcode为应用Target创建一个新的构建阶段,该阶段将App Clip嵌入到应用程序中。

在将自己的代码添加到App Clip Target之前,请在模拟器或设备上运行App Clip。此时,应用程序剪辑显示一个空白的白色屏幕,因为您还没有添加任何code和assets。

添加Associated Domains Entitlement

用户从将调用URL传递到App Clip中会启动App Clip,或者,如果用户安装主应用以替换App Clip,调用URL会启动主应用。无论您选择支持哪种调用,都必须将Associated Domains Entitlement添加到主应用和App Clip Target:

  1. 在Xcode中打开项目;然后,在Targets -> Signing & Capabilities中,点击“+ Capability”添加Associated Domains。
  2. 对于启动App Clip或主应用的每个URL,使用以下模式将其域名添加Associated Domains capability:appclips:<fully-qualified domain>。例如,添加appclips:example.com。


    7.png

除了添加Associated Domains Entitlement外,您还必须对服务器进行更改,以允许系统在启动前验证你的App Clip。有关详细信息,请参阅Configuring Your App Clip’s Launch Experience
有关Associated Domains的信息,请参阅Make Changes to Your Server and Your Xcode Project

添加 Code 和 Assets

App clips和主应用使用相同的框架,向App clip的Target添加代码或assert的方式与对其他Target添加方式都一样。创建新的源文件和assets,或将主应用现有源文件和assets用作App Clip目标的成员。为了提高项目的可维护性,主应用和App Clip应该尽可能多的共享代码:

  • 如果你创建了一个新的应用程序,在构建它时要考虑到创建一个App Clip,并尽量模块化、组件化代码。例如,创建可重用组件,将它们打包为 Swift Packages,并在主应用和App Clip中使用这些包。有关详细信息,请参阅Organizing Your Code with Local Packages

  • 如果你将一个App Clip添加到一个现有的应用程序中,花时间重构代码使之模块化,并在App Clip和主应用之间共享代码,以避免代码重复。

  • 将assets资源添加到新的assets目录下,主应用和App Clip可以使用该目录下的assets资源。有关详细信息,请参见 About Asset Catalogs

配置Active Compilation Conditions

在App Clip和主应用之间共用代码时,可能会遇到在App Clip中无法使用主应用的某些代码的情况。在这些情况下,请设置Active Compilation Conditions,在App Clip 的Targets ->Build Setting中可以声明排除代码的条件。


8.png

然后在需要的地方添加一个条件,以排除你不想在你的App Clip中使用的代码。例如:

#if !APPCLIP
// Code you don't want to use in your app clip.
#else
// Code your app clip may access.
#endif

对服务器和Xcode项目进行配置

在系统显示app clip card或允许调用app clip之前,系统会验证app clip的配置和启动的URL。如果无法执行验证,系统将不会在桌面显示app clip card,也不会启动app clip。要使系统能够验证你的app clip,您需要对web服务器和Xcode项目进行配置。

  1. 把 Apple App Site Association file添加到你的服务器上,可以参考Supporting Associated Domains in Your App
  2. 在服务端创建或者已存在apple-app-site-association文件,在此文件中为App Clip添加appclips键值。下面的代码是要添加的内容,请注意apps键的值是一个数组,其中只有一个是app clip的app identifier。
{
   "appclips": {
       "apps": ["ABCED12345.com.example.MyApp.Clip"]
   }
   ...
} 

例如在网页中配置App Clip的推荐条,若打开App Clip你还需要为你的HTML界面添加apple-itunes-app:

<meta name="apple-itunes-app" 
    content="app-clip-bundle-id=com.example.fruta.Clip,
    app-id=123456789">
  1. 在Xcode中,为app和app clip添加Associated Domains Entitlement配置。

配置和响应

你在App Store Connect中配置的URL,是为了系统来启动App Clip。因此,识别App Clip的URL来启动你的App Clip,在启动时对URL进行响应,并在app Store Connect中注册它们对创建App Clip至关重要。有关更多信息,请参考Configuring Your App Clip’s Launch ExperienceResponding to Invocations

发布App Clip

App Clip需要对应的主应用。准备发布App Clip时,请将其作为主应用Archive的一部分提交。请注意,你的App Clip必须在App Store通过审核后,才能发布。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,734评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,931评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,133评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,532评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,585评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,462评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,262评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,153评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,587评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,792评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,919评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,635评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,237评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,855评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,983评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,048评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,864评论 2 354