簡體   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