应用程序扩展-探索小部件

大家好,来到这里真是太好了! 好吧,如果您想知道我现在在哪里,请点击以下链接。

https://itechroof.wordpress.com/

让我们开始吧。

iOS现在具有版本11.3(在撰写本文时),但我们将跳回到本文的版本8,并探讨引入的功能。 好吧,我们不要再拖下去了。 它称为应用程序扩展。

我们不会涵盖所有应用程序扩展,因为每种类型本身都可以是博客文章。 因此,我们将介绍“今日小工具”或最常见的“小工具”。 在这篇文章中,我们将介绍

  1. 什么是应用程序扩展程序?
  2. 它的类型
  3. 生命周期
  4. 受限制的API
  5. 今天扩展
  6. 创建Today扩展的步骤

应用程式扩充功能:

应用程序扩展提供了访问自定义功能或应用程序内容到其他应用程序(包括系统应用程序)的桥梁。

为了更好地理解,我们要说的是执行特定的任务,例如共享选项,以将内容/媒体从一个应用程序发布到另一个应用程序,或者将自定义键盘扩展名提供给其他应用程序/系统本身使用。

类型:

苹果提供各种应用程序扩展。 要浏览所有内容,可以导航至文件->新建->目标->应用程序扩展

生命周期:

App Extension具有自己的生命周期和环境。 它与普通应用程序不同。 但是您需要了解有关“包含应用程序和主机应用程序”的知识。

包含应用程序是拥有扩展名的应用程序。 在我们的方案中,该应用将具有一个Today小部件。 因此我们的应用程序称为“包含应用程序”。

主机应用是访问应用扩展的应用。 例如,假设(包含)应用程序中有一个应用程序扩展。 现在,苹果照片具有共享功能,单击该功能会显示可以共享照片的应用程序列表。 在这种情况下,如果调用我们的应用程序扩展将照片与我们(包含的)应用程序共享,则“照片”应用程序称为“主机”应用程序。

在显示的应用程序列表中,通过单击我们的应用程序,请求将被发送到应用程序扩展。 应用扩展程序将处理请求,并在完成任务后终止。

对于上图,一旦用户按下共享按钮,主机应用就会调用应用扩展。 该扩展程序提供了将照片发布到我们的应用程序的功能。 在此过程中,应用扩展程序将在主机应用程序(在我们的情况下为照片应用程序)的上下文中具有自己的视图。 根据用户输入/请求,扩展程序会将结果返回到主机应用程序。 如果需要,扩展程序还可以执行后台处理。 请求完成后,系统将终止扩展。

由于扩展程序可以与主机应用程序通信,因此主机应用程序将向扩展程序发出请求,并且扩展程序将向主机应用程序发送响应。

应用扩展程序和包含应用程序的应用程序不直接通信。 应用程序扩展程序及其包含的应用程序通过私有定义的共享容器进行通信。 通常,当包含的扩展程序正在处理来自主机应用程序的请求时,包含的应用程序甚至无法运行。

受限制的API:

  1. 应用扩展程序无法执行长时间运行的后台任务。 限制可能因平台而异。
  2. 它可以通过AirDrop发送数据,但无法接收数据。
  3. 它无法访问sharedApplication对象。
  4. 应用扩展程序不能使用在NS_EXTENSION_UNAVAILABLE宏或类似的不可用性宏下标记的任何API。
  5. 它不能在不可用的框架中使用任何API。
  6. 它无法访问iOS设备上的相机或麦克风(iMessage扩展名除外)。

今日扩展:

如前所述,它也称为Widget。 今天,扩展程序将在我们的应用程序中吸引用户。 即使没有启动包含应用程序的应用程序,应用程序扩展也会在通知中心和“锁定”屏幕中显示最新的应用程序信息。 您还可以在应用的快速操作菜单中访问扩展程序(使用3D Touch)。

让我们做一些编码😉

创建扩展的步骤:

使用Single View App模板创建示例项目。

转到文件>新建>目标>应用程序扩展>今天的扩展以创建今天的扩展。

现在,此模板将创建一个包含情节提要和视图控制器的文件夹,以供今天扩展以及它们的info.plist和权利。

让我们创建一些标签以在“今天”小部件中反映我们的内容。 在下面的演示应用程序中,我考虑过为旅行创建一个小部件。 我已为报价创建了一个标签,并创建了另一个标签以提供目的地的详细信息(如果已选择)。

下一步,在包含应用程序和应用程序扩展名之间创建一个共享容器。 我们将使用应用程序组共享内容。

在开发者帐户中创建应用组。

导航到功能>应用程序组>启用,以打开包含应用程序和应用程序扩展目标的应用程序组功能。

注意:确保在两个目标上使用相同的应用程序组。

现在,我们可以使用UserDefault来访问包含应用程序和应用程序扩展名之间的内容。

现在,单击按钮,将显示具有不同目的地的警报视图。 选择目的地后,将使用UserDefault在共享容器上设置内容。

在应用扩展程序上,相同的应用程序组用于访问共享内容。 WidgetPerformUpdate方法检查窗口小部件内容中是否有新更改。 我们确定此方法的更改。

上面的代码将使用套件名称访问应用程序组,然后使用密钥访问相应的内容。 如果内容发生更改,它将反映在标签中,并在完成后,处理程序将返回新数据。 如果没有内容更改,则将不包含任何数据将其返回。

为了使您的小部件成为可折叠和可扩展的视图。 提及显示模式已展开。

上面的代码将在小部件中显示更多。 单击显示更多时,将调用widgetActiveDisplayModeDidChange方法。 使用preferredContentSize ,我们可以在方法中调整窗口小部件和高度。

要考虑的重要注意事项是小部件中的内存管理。 内存泄漏可能导致系统杀死小部件。 保持尽可能低的内存将改善平滑和交互式的性能。

好吧,我们做到了。 该小部件应该已经启动并正在运行。 您可以在此处找到演示项目。让我知道这篇帖子是否可以改进或对您有帮助。

如果您想要更多这样的帖子,并且您认为这确实很有帮助,请给我一些鼓掌。

跟我来即将发布的帖子。 Claaapppsss…