繁体   English   中英

如何使用应用程序扩展中的 IPC 将信息异步发送到 iOS 上的包含应用程序?

[英]How can I use IPC from an app extension to asynchronously send information to the containing app on iOS?

我想在我的应用扩展中使用进程间通信来在扩展对应用组的UserDefaults数据库进行更改时通知其包含的应用。 目前,似乎没有办法在UserDefaults数据库被不同的进程更新时得到通知,所以我假设我必须在扩展和包含的应用程序之间建立 IPC。 根据 Apple 的文档,这似乎可以使用多种不同的方法:

组内的应用程序可以使用 IPC 机制与组内的其他成员通信,包括 Mach IPC、POSIX 信号量和共享 memory 和 UNIX 域 ZFFE33A3F6E35505FABA01D17FD07D641。 在 macOS 中,使用应用程序组在两个沙盒应用程序之间或一个沙盒应用程序和一个非沙盒应用程序之间启用 IPC 通信。

我做了一些研究,似乎这些技术中的大多数都是请求驱动的,而不是异步的。 有没有一种使用这些技术的好方法,以便我的扩展程序可以在更改应用程序组的UserDefaults时通知我的应用程序?

附加信息:

  • 我正在构建的扩展是一个广播上传扩展。
  • UserDefaults.didChangeNotification不能跨进程工作,因此不能用于此目的。
  • Swift 中的解决方案将是理想的,但 Objective-C 也很好。

我知道这有点晚了,但其他人可能会发现它已满。

对于进程间通知,iOS/macOS 使用Darwin Notification 这是一篇很好的文章,详细说明了如何通知两个/多个进程关于通过CoreData上的一个进程所做的更改,但是可以使用相同的方法来通知任何事件。 即生成有关UserDefaults更新的通知。 我已经尝试过了,它对于共享AppGroup的应用程序非常有效,不确定它是否适用于没有AppGroup的应用程序。

更新 1:这是一篇文章,讨论了使用NSFilePresenter进行进程间通知的不同方法,并添加了与DarwinNotification的比较。 这是一篇很好的文章,可以全面了解 AppGroup/SharedContainers 和 IPC

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM