Как нотариально заверить комплект приложений, содержащий встроенные в него помощники?

Кто-нибудь знает, как отправить пакет приложений Mac, содержащий встроенные пакеты вспомогательных приложений, на нотариальное заверение Apple? Когда я пытаюсь заархивировать простое приложение, все идет гладко. Приложение должным образом заархивировано, и я могу загрузить архив, и мое приложение будет заверено нотариально в течение нескольких минут.

Однако, когда я пытаюсь заархивировать пакет приложений, содержащий в себе пакеты вспомогательных приложений, не только мое основное приложение исчезает из пакета, но и процесс архивации полностью портит иерархию, необходимую для работы моего основного приложения и его помощников, и загрузку Кнопка не активирована. Единственное, что предлагается, - это сделать копию архива или экспортировать построенные продукты.

Любая помощь приветствуется.

3 ответа

Благодаря новой документации Apple, выпущенной во время WWDC 2019, я наконец смог решить эту проблему, что было невозможно раньше, даже после использования билета DTS. По сути, если у вас есть сложный пакет и вам нужно создать его автоматически с помощью скриптов, вы НЕ МОЖЕТЕ использовать автоматический рабочий процесс через Архив, а затем загрузить пакет приложения через Организатор в Xcode.

Итак, для тех, у кого есть эта проблема сейчас и в будущем, вот что решило мою проблему:

1) Перейдите в панель навигации проекта и щелкните свой проект.

2) Перейдите к каждой из ваших целей, нажав на "Параметры сборки" и внесите следующие изменения (введите слово "подпись" в поле поиска, так как это сужает отображаемые параметры сборки):

  • Перейдите в раздел Идентификация подписи кода и в сборке выпуска измените Mac Developer (значение по умолчанию) на свое приложение Developer ID в вашей связке ключей.
  • Перейдите к разделу Базовые права на внедрение подписи кода и в сборке выпуска измените Да (значение по умолчанию) на Нет. Если вы этого не сделаете, ваш пакет приложений будет отклонен сервером нотариального заверения, поскольку вы разрешаете внедрение кода в свое приложение, что необходимо для отладки, но представляет собой угрозу безопасности.
  • Перейдите в раздел "Стиль подписи кода" и в сборке выпуска измените " Автоматически" на " Вручную". Если вы этого не сделаете, правильная подпись не удастся.
  • Перейдите к другим флагам подписи кода и в сборке выпуска добавьте --timestamp. Это отметит Xcode, что вы хотите добавить безопасную метку времени в свое приложение. Если вы этого не сделаете, ваш комплект приложений будет отклонен сервером нотариального заверения.

3) Чтобы собрать приложение для распространения, сделайте следующее:

  • Создайте новую схему, которая включает все цели, используя настройки сборки выпуска
  • Нажмите Build или Command + B в качестве сочетания клавиш, и весь ваш пакет будет правильно подписан, если вы будете следовать правилу вывернутого наизнанку (т. Е. Код в каталогах более глубокого уровня должен быть подписан первым!)

4) Чтобы нотариально заверить только что созданный и подписанный пакет приложений с действующей безопасной меткой времени, у вас есть несколько вариантов:

  • Создайте образ диска.dmg и следуйте инструкциям в этом ответе. Однако пропустите инструкции по подписанию кода, поскольку то, что я объясняю здесь, охватывает все проблемы и оговорки, объясненные там. Кроме того, вы можете заархивировать и загрузить zip-файл, как я объясню ниже:
  • Сожмите пакет приложений в zip-файл, используя это в Терминале: /usr/bin/ditto -ck --keepParent "*APP_PATH*" "*ZIP_PATH*"

5) Загрузите образ диска или zip-файл, используя его в Терминале: xcrun altool --notarize-app --primary-bundle-id "your-primary-bundle-id-here" --username "*your-username*" --password "*your-app-specific-password-here*" --file *your-path-here*. Вам необходимо перейти в свою учетную запись appleid.apple.com, чтобы сгенерировать пароль приложения дляaltoolприложение. Это мера безопасности, чтобы вы не отправляли свой пароль Apple ID в открытом виде. Вы можете сделать это на панели "Безопасность" вашей учетной записи управления Apple ID. Не делайте ничего, пока не получите подтверждение об успешной загрузке.

6) Чтобы запросить статус истории нотариального заверения, запустите это в Терминале: xcrun altool --notarization-history 0 -u "*your-account*" -p "*your-app-specific-password-here*". Вы должны увидеть список загрузок с соответствующими датами и RequestUUID. Последняя загрузка обычно стоит первой в списке.

7) Чтобы запросить статус нотариального заверения, включая доступ к файлу журнала нотариального заверения, запустите это в Терминале: xcrun altool --notarization-info RequestUUID -u "*your-account*"

8) Если вы получили статус, что ваш пакет приложений был одобрен, вы можете закрепить это одобрение, запустив это в Терминале: xcrun stapler staple *path-to-your-app-bundle*.

Вы можете найти полезную информацию здесь

Посмотрим, сможете ли вы пройти нотариальное заверение. Для меня я должен распаковать несколько банок и подписать файлы в нем и перепаковать его.

Другая проблема, с которой я столкнулся, заключается в том, что Java-приложения не могут запускаться, когда вы кодируете его с помощью опции "runtime", что может быть той же проблемой, что и у вас (исчезнуть). Чтобы увидеть ошибки, вы можете запустить свое приложение из терминала, и вы увидите ошибки. В этом случае вы можете попробовать использовать --entitlements добавить некоторые исключения.

Вот права, которые я использовал для запуска приложения

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.security.cs.allow-jit</key>
    <true/>
    <key>com.apple.security.cs.allow-unsigned-executable-memory</key>
    <true/>
    <key>com.apple.security.cs.disable-executable-page-protection</key>
    <true/>
    <key>com.apple.security.cs.disable-library-validation</key>
        <true/>
        <key>com.apple.security.cs.allow-dyld-environment-variables</key>
        <true/>
</dict>
</plist>

Команда для подписи приложения:

codesign --force  --verbose=9 -s "Developer ID Application: XXXXXXX" --options runtime --deep --entitlements ./entitlements Myapp.app

У меня была та же проблема, когда мне нужно было создать и распространить отдельный инструмент командной строки, и я нашел здесь хорошую отправную точку: https://scriptingosx.com/2019/09/notarize-a-command-line-tool/

Я следовал этому руководству со своим дополнительным вспомогательным приложением, пока не появилась команда

      xcodebuild clean install

Это создает подписанное приложение, которое я затем копирую в

       "AppRelease/myApp/Contents/MacOS"

который затем нотариально заверяется с использованием

      codesign --deep --timestamp --options runtime ...
hdiutil create  ... "myInstaller.dmg"
xcrun altool --notarize-app -...  --file "myInstaller.dmg"

Мне потребовалось довольно много времени, чтобы сделать эту работу правильно. Подписание Mac и сертификаты - это боль ...

Другие вопросы по тегам