Я создаю изолированное приложение macOS с помощью Swift, которое содержит дочернее приложение внутри.
Что я хочу реализовать:
- Родитель может запускать несколько дочерних приложений
- Родитель отправляет разный контент каждому дочернему приложению для отображения
- И родительское, и дочернее приложение имеют свои собственные пользовательские интерфейсы.
Способ реализации, о котором я думал:
Распределенное уведомление
Распределенное уведомление с информационными объектами пользователя запрещено песочницей.
CFMessagePort
Для этого требуется, чтобы родительское и дочернее приложения находились в одной группе приложений и были подписаны с помощью соответствующих профилей предоставления. Но в Xcode это всегда None required
в настройках профиля обеспечения, поэтому негде изменить настройки. Кроме того, нет никаких документов или сообщений, объясняющих, как использовать CFMessagePort в Swift. Я попробовал приведенный ниже код, но он каждый раз падает, так как песочница запрещает его.
let portName = "{team_identifier}.{app_group_identifier}.{port_name}"
let remote = CFMessagePortCreateRemote(nil, portName as CFString)
var returnData: Unmanaged<CFData>? = nil
if kCFMessagePortSuccess == CFMessagePortSendRequest(remote, 0, data as CFData, 1, 1, CFRunLoopMode.defaultMode.rawValue, &returnData) && nil != returnData {
}
Соединение NSXPC
Я не думаю, что XPC подходит для этой ситуации, так как XPC предназначен для связи между невидимой службой и клиентским приложением, в то время как служба встроена в приложение. Я сомневаюсь, что это сработает для модели родитель-ребенок.
Итак, есть ли лучший способ достичь моей цели? Я чувствую, что мне следует использовать CFMessagePort, но мне также нужна дополнительная помощь в том, как использовать его со Swift. Спасибо!