[英]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
不能跨進程工作,因此不能用於此目的。我知道這有點晚了,但其他人可能會發現它已滿。
對於進程間通知,iOS/macOS 使用Darwin Notification
。 這是一篇很好的文章,詳細說明了如何通知兩個/多個進程關於通過CoreData
上的一個進程所做的更改,但是可以使用相同的方法來通知任何事件。 即生成有關UserDefaults
更新的通知。 我已經嘗試過了,它對於共享AppGroup
的應用程序非常有效,不確定它是否適用於沒有AppGroup
的應用程序。
更新 1:這是一篇文章,討論了使用NSFilePresenter
進行進程間通知的不同方法,並添加了與DarwinNotification
的比較。 這是一篇很好的文章,可以全面了解 AppGroup/SharedContainers 和 IPC
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.