iOS App Clips学习笔记

AppClip是苹果推出的一种轻量级应用程序,允许用户无需下载完整APP即可体验部分功能。本文介绍了AppClip的工作原理,触发场景,如何在Xcode中创建,代码与资源的复用策略,访问调用URL的方法,以及AppClip的限制和注意事项。
一、什么是App Clip?

App Clip是一个App的轻量版,用来提供一些用户所需功能,我们可以把它看成苹果的小程序。它不需要下载就直接能打开。这样即可达到不下载完整版APP便可体验APP的部分功能,即用即走。

二、App Clip触发场景
  • 扫描NFC标签或者二维码
  • 点击来自Siri中基于位置的建议
  • 点击地图app中的链接
  • 点击网站上智能推荐应用横幅
  • 点击通过“信息”App分享的链接
三、App Clip 体验准备

开发环境:Xcode12 beta,iOS14系统

四、创建App Clip

创建App Clip的前提是必须先有一个App(没有项目则需先新建),然后在已有的App项目上新建Target:

(1)使用App Clip 模板添加一个Target:Xcode菜单项File->New->Target…

target.png

(2)输入App Clip的Product Name,选择开发相关配置,点击完成

target2.png

(3)项目结构与完整版App一致

project_arch.png

五、代码与资源复用

因为App必须包含App Clip的所有功能,所以App Clip代码应该是APP代码的子集。这样便会存在项目代码和资源的复用问题。

1、关于代码复用:
我们可以把重用代码拆分成重用组件,使用cocoapods来管理(新项目推荐使用Swift Packages)


source 'https://github.com/CocoaPods/Specs.git'

platform :ios, '8.0'

def pod_Target_TestDemo
	pod 'AFNetworking'
end

def pod_Target_Share
	pod 'SDWebImage'
end

target 'TestDemo' do
  pod_Target_TestDemo
  pod_Target_Share
end

target 'TestDemoAppClip' do
  pod_Target_Share
end


2、使用条件编译:
某些场景下,有些代码可能无法在App Clip的Target中使用:
(1)Objective-C中,我们可以通过在App Clip Target的Build Settings中找到Preprocessor Macros,新增APPCLIP项:

build_settings1.png

在代码中使用:


#ifndef APPCLIP
    NSLog(@"this is not App Clip!");
#else
    NSLog(@"this is App Clip!");
#endif

(2)Swift中,我们可以通过在App Clip Target的Build Settings中找到Active Compilation Conditions,新增APPCLIP项:

build_settings2.png

在代码中使用:


#if !APPCLIP
	print("this is not App Clip!")
#else
	print("this is App Clip!")
#endif


3、关于图片资源复用:
我们可以添加一个新的Asset Catalog作为一个共享的assets,然后在完整版App和App Clip中共用这些资源。

share_assets.png

六、App Clip访问调用URL

当用户启动一个App Clip,App Clip相关联的生命周期方法将被调用,我们会接收到一个NSUserActivity对象,后续便可通过访问这个NSUserActivity对象来处理任何状态和数据。

不同UI框架的生命周期方法需实现的回调方法不一致:

1、基于SwiftUI的App Clip和完整版App,需实现:

onContinueUserActivity(:perform:)

2、基于UIKit 的App Clip和完整版App
(1)生命周期事件定义在UISceneDelegate中,需实现:

scene:continueUserActivity:

(2)生命周期事件定义在UIApplicationDelegate中,需实现:

application:continueUserActivity:restorationHandler:

注意:完整版App必须处理App Clip所需处理的全部调用。启动时,需确保调用类型为NSUserActivityTypeBrowsingWeb,然后再访问已启动App Clip的URL。

七、App Clip有哪些限制?
  • 大小限制:不能超过10MB。

  • 一个App有且只能有一个App Clip,且App的功能必须包含一个App Clip中的所有功能。

  • App Clip无法把数据存储到keychain来共享给完整版App,数据共用只能通过一个共享的app container 或者 user defaults ,注意不要在app container或user defaults中存储用户敏感信息。

  • App Clip不可用的frameworks:CallKit、CareKit、CloudKit、HealthKit、HomeKit、ResearchKit、SensorKit、 Speech。

  • App Clip无法获取到设备名([UIDevice name])和广告标识符(identifierForVendor),其对应的API会返回空串。

  • App Clip不能执行后台任务:例如,在App Clip不使用时,用NSURLSession进行后台联网或保持蓝牙连接。

  • App Clip的通知和定位权限是免申请,用户可以主动关闭:通知在8小时内有效,位置只能获取一次,第二天凌晨4点会自动重置。如需重度使用,可通过弹窗申请。

  • App Clip无法访问以下数据:

      运动和健身数据
      
      苹果音乐和媒体
      
      联系人,文件,消息,提醒和照片等应用数据
    
八、App Clip需注意的地方

1、 App Clip不会显示在用户主屏幕上,且用户不能像管理完整版App一样管理App Clip,如果App Clip在一段时间内不活跃,系统会自动从设备中清理掉对应的App Clip。

2、App Clip应避免复杂的界面元素,如TabBar或复杂的表单,为了降低技术的复杂性,推荐使用Apple Pay和Sign in with Apple。

3、App Clip会给完整版App保留以下功能:

(1)高级网络功能(如Bonjour)或本地Wi-Fi网络配置

(2)App extensions

(3)自定义和设置:如创建一个settings bundle

(4)数据移交和打开文档

(5)内购和支付卡配置

(6)低级Unix功能如:BSD通知

(7)iPad上的分屏

(8)自定义URL schemes的注册

(9)使用StoreKit的requestReview(in:)方法请求用户对该应用进行评论

(10)搜索配对的蓝牙设备

九、对于App Clip的一些疑问

1、App Clip必须在iOS14上,推荐使用Swift开发。

2、关于数据共享问题:
App Clip与主App通信方式和普通Extension Target一致,添加App Groups,把App Clip和主App放到同一个App Groups中就能访问user defaults数据。

3、如果App Clip需要展示广告或者推荐其他APP,我们应该怎么做?
使用 SKOverlay或者SKStoreProductViewController。

由于目前没法配置App Clip测试,关于App Clip配置部分建议看苹果官方文档,后续实际开发再补充。

此文仅供学习交流,转载请注明出处!

iOS App Clips学习笔记:https://www.yangshebing.com/2020/07/12/iOS-App-Clips%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/

### 关于iOS Clips 应用开发的信息 Clips 是苹果公司推出的一款专注于短视频制作的应用程序,旨在让用户轻松创建并分享短片。尽管官方并未公开详细的开发文档来指导开发者如何构建类似于 Clips 的功能[^3],但从已有的资料和技术角度出发,可以总结一些关于 iOS 上开发类似 Clips 功能的关键技术点。 #### 1. **视频编辑框架** 在 iOS 开发中,`AVFoundation` 框架提供了强大的工具集用于处理音频和视频文件。通过该框架,开发者能够实现剪辑、拼接、滤镜效果等功能。以下是几个核心类及其用途: - `AVAsset`: 表示媒体资源(如视频或音频),可用于加载本地或远程的多媒体文件。 - `AVMutableComposition`: 提供了一种方法将多个音轨或视轨道组合成单一的时间线结构。 - `AVVideoCompositionCoreAnimationTool`: 可应用于向视频添加动画层的效果。 ```swift import AVFoundation let composition = AVMutableComposition() guard let videoTrack = composition.addMutableTrack(withMediaType: .video, preferredTrackID: Int32(kCMPersistentTrackID_Invalid)) else { return } do { try videoTrack.insertTimeRange(CMTimeRangeMake(start: CMTime.zero, duration: asset.duration), of: asset.tracks(withMediaType: .video)[0], at: CMTime.zero) } catch { print(error.localizedDescription) } ``` #### 2. **性能优化与内存管理** 对于像 Clips 这样的应用程序来说,高效的内存管理和良好的运行时表现至关重要。正如提到过的,在评估游戏或其他图形密集型应用的记忆体消耗方面,定期使用专门的分析工具有助于发现潜在问题[^2]。同样地,这些原则也适用于视频编辑软件: - 使用 Instruments 巛具中的 Allocations 和 Leaks 来检测是否存在泄漏以及哪些对象占用了过多空间; - 避免一次性载入大量素材到内存里,而是采用按需加载策略; #### 3. **用户体验设计考量** 除了技术和性能之外,优秀的 UI/UX 设计也是成功的重要因素之一。考虑到目标用户的多样性,界面应当直观易懂,操作流程简化流畅。例如,提供预设模板减少用户思考成本的同时增加创意可能性。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值