【问题标题】:Sharing UDP Data across apps (background/foreground or Split screen multitasking) in iOS在 iOS 中跨应用程序(后台/前台或分屏多任务处理)共享 UDP 数据
【发布时间】:2015-09-08 17:02:04
【问题描述】:

我正在编写一个研究应用程序,该应用程序利用通过 UDP 广播数据的特定传感器。有各种商业应用程序使用这种传感器,我们希望能够同时运行我们的应用程序和现有应用程序。

过去(iOS 8 及以下)我们会在后台运行我们的应用程序来记录数据,并在前台运行不同的应用程序。不幸的是,似乎只有一个应用程序能够绑定到传入的 UDP 数据(这是有道理的),但是随着即将到来的“并排”应用程序功能,我想知道是否有任何解决方案可以在应用程序之间共享数据。

我唯一能想到的就是让我们的应用程序以某种方式捕获数据并将其重新广播到其他应用程序,但我不知道这在 iOS 中是否可行,即使你是这样将确定“谁”锁定了 UDP 流。

位于https://developer.apple.com/library/prerelease/ios/documentation/WindowsViews/Conceptual/AdoptingMultitaskingOniPad/index.html#//apple_ref/doc/uid/TP40015145 的 Apple 文档似乎没有提供太多信息。

【问题讨论】:

  • 当应用程序处于后台时,您没有太多控制权,并且在一段时间后操作系统可以将其杀死以获取资源。您需要手动唤醒它以捕获和重新广播,但只有使用 CLLocationManager 的显着更改方法等解决方法。我什至不确定您的应用程序是否包含移动。说到后台,iOS 就这么受限制了……
  • 您是否已经使用 setsockopt(sock, SOL_SOCKET, SO_REUSEPORT, &opt, sizeof(opt)) 绑定了 UDP 地址以使其在 iOS8 上工作?

标签: ios udp multitasking ios9 split-screen-multitasking


【解决方案1】:

我不确定这是否适用于您的用例,但您可能希望使用 CloudKit 将数据发送到自定义应用容器。在您的第二个应用的应用功能部分,您可以访问共享容器。

来自iCloud Design Guide

当您启用 iCloud Documents 或 CloudKit 功能时,Xcode 配置您的应用程序以访问其名称所基于的 iCloud 容器 在应用程序的捆绑包 ID 上。大多数应用程序只需要访问 默认容器。 如果您的应用之间共享数据,请启用 “指定自定义容器标识符”选项并添加一个或多个 用于共享数据的容器 ID。

Sourced From Apple ~ see original for more details

在应用之间共享容器

(可选)将您的应用配置为使用多个容器或与其他应用共享一个容器。例如,您可以在内部使用一个应用程序以编程方式创建记录类型和记录,以将数据库返回到已知状态。此应用程序需要与您正在开发和测试的最终用户应用程序共享同一个容器。为此,您可以让第一个应用程序使用第二个应用程序的默认容器,或者创建两个应用程序共享的自定义容器。 iOS 和 Mac 应用程序也可以配置为共享相同的容器。

向应用添加容器

选择另一个应用使用的现有容器 ID 或创建一个新的。

将容器添加到应用程序

在 iCloud 设置下的“功能”窗格中,选择“指定自定义容器”。

当您之前选择 CloudKit 服务时,Xcode 会为您的应用创建一个与捆绑 ID 匹配的默认容器 ID。默认容器 ID 旁边会出现一个复选标记。

如有必要,单击容器表下方的刷新按钮,从会员中心下载其他应用程序使用的容器。 在您要添加的容器 ID 所在的行中,选中复选框。 Xcode 会更新权利文件中的容器 ID 列表。

下面的屏幕截图显示了 Curator 和 Gallery 应用共享 Gallery 应用的默认容器。

创建自定义容器

或者,创建一个由多个应用共享的自定义容器。

重要提示:只有团队管理员可以创建容器。如果您是个人,则您是单人团队的团队代理(具有管理员权限)。

创建自定义容器

如果选择“使用默认容器”,请选择“指定自定义容器”。

单击表格底部的添加按钮 (+)。 在出现的对话框中,输入要添加的容器的标识符。

警告:您无法删除容器 ID,因此请谨慎选择容器 ID。

容器 ID 以 iCloud 开头。后跟一个反向 DNS 表示法的字符串,如 iCloud.com.example.gkumar1.SharedGallery 容器 ID。

点击确定。

Xcode 将新的容器 ID 添加到 Xcode 项目权利文件和会员中心。

如果您想与其他应用共享新的容器 ID,请将容器添加到应用中,如将容器添加到应用中所述。

验证您的步骤

您可以在 iCloud 设置或会员中心查看您团队的所有容器 ID。在会员中心,您还可以添加容器和编辑容器名称。

在会员中心查看容器 ID

在会员中心,选择证书、标识符和配置文件。 在标识符下,选择 iCloud 容器。

【讨论】:

    猜你喜欢
    • 2011-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多