AppEx 是一种 iOS 平台上的可驻留程序,它以应用扩展为中心。应用扩展主要分为三类:分享、操作和存储。其主要功能是共享信息、处理数据和进行数据存储,使用户能够更好地在设备上使用和共享信息,提高生产力。
一、为何需要 AppEx
1、应用之间共享数据
应用之间数据共享是移动应用程序开发中常遇到的一个问题。例如,当用户在社交应用上使用类似于Facebook、Twitter等的内容操作时,他们也很可能会同时使用其他的应用程序,设想一下用户需要从 Safari 中分享一些网页,而管理员希望允许其他社交应用程序能够使其用户分享链接,链接的信息需要传输到所需的应用之间。在这种情况下,开发人员就需要考虑引入一个应用扩展实现数据的传递。AppEx 提供的这个多进程通信接口可以让应用之间能够更容易地无缝连接在一起。
2、提高应用程序的交互性
某些应用程序需要用户允许其他应用程序来与其交互。但是,如果应用没有此功能,则不支持与其他应用程序交互。此时,AppEx 可以提供新的界面和功能扩展,从而使应用程序具有更高的交互性。例如,可以通过应用扩展向 iMessage 添加 Giphy 的功能,或者添加到 iOS 的共享扩展,从而在其他应用程序中查找和分享 GIF。
3、处理数据的能力
与开发者将应用程序放入固定的组件或框架中不同,AppEx 的优点在于,其能够完成从与用户进行交互、与内置应用程序集成的实现,乃至于提高性能等方面的所有任务。例如,可以通过应用扩展将 RawTherapee 固定于照片应用程序中,以便您在编辑照片时快速访问和使用 RawTherapee 的所有功能,并通过应用扩展进行处理。
二、应用扩展介绍
iOS 8.0 后提供了应用扩展的功能,包括分享、操作和存储。应用扩展通过 app 扩展点将有关信息传递给 AppEx。不同的扩展点支持不同的调用方法,包括单独运行或完全集成。
1、分享扩展
分享扩展使用 UIActivityViewController 调用。当用户希望从应用程序中分享内容时,可以选择要使用的应用程序。然后,该应用程序将用于在这些应用程序中共享内容。
<dict>
<key>NSExtensionAttributes</key>
<dict>
<key>NSExtensionActivationRule</key>
<string>FALSEPREDICATE</string>
<key>NSExtensionJavaScriptPreprocessingFile</key>
<string>action.js</string>
</dict>
<key>NSExtensionPointIdentifier</key>
<string>com.apple.share-services</string>
<key>NSExtensionPrincipalClass</key>
<string>MyShareExtensionViewController</string>
</dict>
2、操作扩展
操作扩展通过 action extension 扩展点调用。它主要用于对数据进行编辑或操作。例如,用户可以通过操作扩展从邮件应用程序中旋转照片。
<dict>
<key>NSExtensionAttributes</key>
<dict>
<key>NSExtensionActivationRule</key>
<string>FALSEPREDICATE</string>
<key>NSExtensionJavaScriptPreprocessingFile</key>
<string>action.js</string>
</dict>
<key>NSExtensionPointIdentifier</key>
<string>com.apple.ui-services</string>
<key>NSExtensionPrincipalClass</key>
<string>MyActionExtensionViewController</string>
</dict>
3、存储扩展
存储扩展使用 NSFileProviderAPI 扩展点调用,并具有添加或管理应用程序的文档的权限。
<dict>
<key>NSFileProviderPrimaryIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER).FileProvider</string>
<key>NSFileProviderDomainIdentifier</key>
<string>com.apple.samples.documentstorage</string>
<key>NSExtensionPointIdentifier</key>
<string>com.apple.fileprovider-ui</string>
<key>NSFileProviderSupportsEnumeration</key>
<true/>
<key>NSExtensionPrincipalClass</key>
<string>FileProviderExtension</string>
</dict>
三、开发 AppEx 的关键点
1、扩展本地化
应用扩展需要有自己的 UI,并与应用程序紧密集成。AppEx 提供了一套与应用程序一致的 UI,这是为了使用户体验更流畅、更像整个应用程序的一部分。因此,前端开发人员需要将其应用程序中使用的颜色、字体等视觉元素与 AppEx 统一,确保在设计上一致。
2、使用正确的扩展点
每个扩展点都提供了不同的 API,开发人员需要选择正确的扩展点并使用合适的 API。例如,分享扩展使用 UIActivityViewController 调用,而操作扩展使用 action extension 扩展点调用。
3、使用合适的接口传输数据
应用程序和应用扩展在传递数据时使用不同的 API。对于应用程序,由于没有跨进程通信的限制,可以使用本地通信机制(例如,通过 IPC 消息进行传递)。而对于 AppEx,必须使用公共接口和 API,以避免出现意外情况。
四、结语
本文主要介绍了 AppEx 在 iOS 平台上的应用扩展,及其在提高 iOS 应用程序的交互性、数据处理能力、数据共享等方面的应用。开发人员需要了解正确的扩展点和接口,并且确保扩展的本地化和用户体验一致。我们希望此文能为您设计出更加精美、有趣和能够满足用户需求的 iOS 应用程序做出贡献。