Процесс сопоставления и сопоставленный файл имеют разные идентификаторы команд - PullRequest
0 голосов
/ 27 апреля 2020

macOS 10.14.5 -> Извините, моя Каталина в карантине на работе! Xcode 11.2.1

com.apple.security.cs.disable-library-validation не работает так, как описано в документации.

Мое тестовое приложение основано на X11 (XQuartz) и, следовательно, нуждается в библиотеках из / opt / X11 / и / usr / lib /, чей идентификатор команды отличается от моего.

Приложение содержит двоичный файл C, который работает и вызывает "winteracter" небольшой двоичный файл FORTRAN, который отображает окно X11 и диалог. «winteracter» подписывается / укрепляется / помещается в «песочницу» (наследуется) перед импортом в Xcode. Он помещается в папку «Ресурсы», но его размещение в MacOS не имеет значения.

Права доступа следующие: Основное приложение:

<key>com.apple.security.cs.disable-library-validation</key>
<true/>
<key>com.apple.security.temporary-exception.files.absolute-path.read-only</key>
<array>
    <string>/opt/X11/lib/</string>
    <string>/usr/lib/</string>
</array>

Вспомогательные двоичные файлы:

<key>com.apple.security.inherit</key>
<true/>

Приложение успешно заверяет нотариус (таким образом, подписание, усиление и песочница в порядке) High Sierra: Это работает. Mojave: выдает ошибку времени выполнения (Консоль: error + fault + winteracter):

Library Validation failed: Rejecting '/opt/X11/lib/libXt.6.dylib' (Team ID: NA574AWV7E, platform: no) for process 'winteracter(11592)' (Team ID: P65398CN49, platform: no), reason: mapping process and mapped file (non-platform) **have different Team IDs**

Это странно по двум причинам: 1 - отклонение разных идентификаторов команды противоречит описанию Apple «disable-library» -validation "2- декабря 2019 г. Я получил функциональное нотариально заверенное приложение, просто используя кодовый знак командной строки с" -o runtime ". Это больше не работает.

Есть предложения?

1 Ответ

0 голосов
/ 29 апреля 2020

Вот более подробное описание моего решения.

Я наконец-то нашел решение для получения нотариально заверенного приложения, которое является функциональным. Пакет организован следующим образом:

  TestApp.app
     Contents
        MacOS
           testAppp  <--  a launcher (C binary)
           myAlert     <-- an alert dialogue (Cocoa binary)
        Resources
           winteracter <-- an X11 (Xquartz) window and dialogue (Fortran binary)

Двоичный "winteracter" основан на библиотеке Winteracter <<a href="http://www.winteracter.com" rel="nofollow noreferrer">http://www.winteracter.com>, которая использует OpenMotif и Xquartz

winteracter двоичный файл

Этот двоичный файл защищен вручную (т. Е. Вне XCode) до других:

codesign -d --force --options runtime --verbose=4 -s "$DEV_CERTIFICATE" --entitlements "winteracter.entitlements" "winteracter"

winteracter.entitlements должен содержать только следующий ключ:

<key>com.apple.security.cs.disable-library-validation</key>
<true>

testApp и myAlert двоичные файлы

Они подписаны и защищены либо вручную:

codesign -d --force --options runtime --verbose=4 -s "$DEV_CERTIFICATE" "$MYBINARY"

, либо с использованием Xcode:

In that case be sure to manually erase the field "*Code Signing Entitlements*" in Build Settings.

Он может оставаться заполненным, даже если вы удалите «Песочницу» из интерфейса возможностей.

После нотариального заверения приложение работает. Я пробовал «песочницу», но печально известная ошибка « процесс сопоставления и сопоставленный файл (не платформенный) имеют разные идентификаторы команд » вернулась!

Но в чем были мои ошибки?

1- Apple утверждает, что ключи песочницы должны появляться только один раз в файле прав основного двоичного файла, а другие имеют только ключ «наследовать». Я ошибочно предположил, что com.apple.security.cs.disable-library-validation также был унаследован.

2- Я думал, что ключ com.apple.security.app-sandbox является обязательным в файлах прав. Совсем нет!

3 - Я ошибочно предположил, что установка com.apple.security.app-sandbox в значение false эквивалентна отсутствию файла прав. Опять неправильно!

4- Я ошибочно предположил, что интерфейс Xcode "Signing & Capabilities" правильно управляет настройками сборки.

5- Я выполнил так много пробных ошибок, что не помню все всеми тупиками, где я заблудился.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...