CFMessagePort и песочница - PullRequest
       47

CFMessagePort и песочница

5 голосов
/ 27 марта 2012

Я адаптирую приложение MacOS для использования песочницы. Он использует вспомогательное приложение (exe-файл в том же пакете), которое завершается неудачно, когда я пытаюсь вызвать CFMessagePortCreateRemote с сообщением «deny mach-lookup» в консоли.

Я вижу, что ключ разрешения com.apple.security.temporary-exception.mach-lookup.global-name может решить эту проблему, но это только временно.

Есть ли способ установить связь между двумя приложениями с помощью порта Mach в изолированном приложении?

Ошибки:

let port = CFMessagePortCreateLocal(nil, "XXXYYYZZZZ.MyAppGroupName" as CFString, Callback, nil, nil)
let runLoopSource = CFMessagePortCreateRunLoopSource(kCFAllocatorDefault, port, 0)
CFRunLoopAddSource(CFRunLoopGetCurrent(), runLoopSource, .commonModes)

*** CFMessagePort: bootstrap_register (): ошибка 1100 (0x44c) «Отказано в доступе», порт = 0x14807, имя = «XXXYYYZZZZ.MyAppGroupName»

Ответы [ 2 ]

4 голосов
/ 09 марта 2017

Как для целевого приложения, так и для вспомогательного exe:

  • Включить изолированную программную среду
  • Добавить общую группу с префиксом вашей команды teamid

    Z123456789.com.example.app-group

Назовите свой порт маха, используя свой teamID, например:

Z123456789.com.example.app-group.Port_of_Kobe

Ссылка на документацию Apple

0 голосов
/ 19 октября 2018

Мой вызов CFMessagePortCreateRunLoopSource был сбой при использовании неправильного параметра CFStringRef name в CFMessagePortCreateLocal.

Я использовал имя своей группы приложений, XXXYYYZZZZ.MyAppGroupName.

После прочтения документации Apple я изменил ее на XXXYYYZZZZ.MyAppGroupName.someOtherString, и сбой исчез.

Имена портов Маха должны начинаться с идентификатора группы приложений, за которым следует точка (.) И имя по вашему выбору.

Например, если ваша группа приложений имеет имя Z123456789.com.example.app-group, вы можете создать порт Маха с именем Z123456789.com.example.app-group.Port_of_Kobe.

https://developer.apple.com/library/archive/documentation/Security/Conceptual/AppSandboxDesignGuide/AppSandboxInDepth/AppSandboxInDepth.html#//apple_ref/doc/uid/TP40011183-CH3-SW24

Редактировать:

На следующее утро я пытаюсь запустить тот же код. На этот раз я получаю сбой с с тем же приложенным ".someOtherString", который я использовал прошлой ночью. Он отлично работает, если я изменяю на другую строку. Это разочаровывает, поскольку я понятия не имею, когда / как эта строка становится недействительной.

Тема 1: EXC_BAD_ACCESS (код = 1, адрес = 0x8)

*** CFMessagePort: bootstrap_register (): сбой 1100 (0x44c) «Отказано в доступе», порт = 0xcd07, имя = «XXXYYYZZZZ.MyAppGroupName.someOtherString '

Редактировать 2:

Я снова попал в аварию, на этот раз с новой строкой. Возможно, проблема связана с запуском версии приложения из папки /Applications/ в дополнение к версии из моей папки сборки Xcode.

Имена портов обычно должны быть уникальными в контексте текущего пользователя; в противном случае вы можете столкнуться с конфликтами.

https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/Multithreading/RunLoopManagement/RunLoopManagement.html

...