Sign in Join
Wiki copytemporary

Notarization for macOS 10.14.5+/ru: what changed

Revision 3 to 4. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
11## Обзор
22
33Начиная с macOS 10.14.5 (Mojave), программное обеспечение, подписанное новым сертификатом разработчика Apple, и все новые или обновленные расширения ядра должны быть нотариально заверены для запуска. Начиная с macOS 10.15 (Catalina), все программное обеспечение, созданное после 1 июня 2019 года, и код, подписанный сертификатом разработчика Apple, необходимо нотариально заверить. *Нотариальное заверение не требуется для программного обеспечения, распространяемого через Apple App Store*, поскольку процесс отправки в App Store уже включает эквивалентные проверки безопасности.
44
55Нотариальное заверение разработано Apple, чтобы дать пользователям больше уверенности в том, что программное обеспечение, подписанное разработчиками Apple, было проверено Apple на наличие вредоносных компонентов. Нотариальное заверение - это не проверка приложения. Нотариальная служба Apple - это автоматизированная система, которая сканирует программное обеспечение на наличие вредоносного содержимого, проверяет наличие проблем с подписью кода и возвращает результаты. Если проблем нет, нотариальная служба генерирует удостоверение для установки программного обеспечения; нотариальная служба также публикует это удостоверение в Интернете, где его может найти Gatekeeper (прим.перев.: букв. *привратник*).
66
77Когда пользователь впервые устанавливает или запускает программное обеспечение, наличие удостоверения (онлайн или прикрепленного к исполняемому файлу) сообщает Gatekeeper, что Apple нотариально заверила программное обеспечение. Затем Gatekeeper помещает описательную информацию в диалоговое окно первоначального запуска, чтобы помочь пользователю сделать осознанный выбор, запускать ли приложение.
88
99> **Note:** Даже если приложение не было нотариально заверено, его все равно можно запустить, щелкнув приложение, удерживая клавишу Control, или щелкнув правой кнопкой мыши для вызова контекстного меню, выбрав «Открыть» - см. диалоговое "обходное" окно Gatekeeper в галерее [[Notarization for macOS 10.14.5+/ru|ниже]].
1010
1111Подписание кода приложения без нотариального заверения - теперь совершенно бессмысленное упражнение, *если только* вы не распространяете свое приложение только через App Store.
1212
1313## Диалоговые окна Gatekeeper
1414
1515![](/wiki-images/2/29/Macos-mojave-app-downloaded-from-internet-alert-dark.jpg)
1616
1717Диалоговое окно Gatekeeper до Catalina, в котором сначала открывается нотариально не заверенное приложение (диалоговое окно Mojave macOS 10.14 )
1818
1919![](/wiki-images/c/c6/Screenshot_2020-01-02_at_22.42.01.png)
2020
2121Диалоговое окно Gatekeeper, в котором сначала открывается подписанное и нотариально заверенное приложение (диалоговое окно Catalina macOS 10.15.1)
2222
2323![](/wiki-images/4/4a/Gatekeep_no.png)
2424
2525Сначала открывается диалоговое окно Gatekeeper, в котором приложение не подписано и не заверено нотариально. (диалоговое окно Catalina macOS 10.15.1)
2626
2727![](/wiki-images/2/21/Macos-catalina-alert-unsigned-override.jpg)
2828
2929Диалоговое "обходное" окно Gatekeeper, доступ к которому можно получить, щелкнув приложение, удерживая клавишу Control. (диалоговое окно Catalina macOS 10.15.3)
3030
3131## Требования к нотариальному заверению
3232
3333Для нотариального заверения требуются инструменты командной строки Xcode от Xcode 10 или новее. Для создания нового приложения для нотариального заверения требуется macOS 10.13.6 или новее. Для прикрепления приложения требуется macOS 10.12 или новее.
3434
3535Нотариальная служба Apple требует от вас:
3636
3737- Включения подписывания кода для всех распространяемых вами исполняемых файлов.
3838- Включения возможности заверения через [[Hardened runtime for macOS|Hardened Runtime]] для вашего приложения и целей командной строки.
3939- Использования приложения «Developer ID», расширения ядра или сертификата установщика для подписи кода.
4040- Включения безопасной метки времени в свою подпись для подписи кода (включения параметра --timestamp при запуске инструмента кодовой подписи).
4141- Не включать право com.apple.security.get-task-allow со значением, равным любому варианту истинного. Если в вашем программном обеспечении размещаются сторонние плагины и требуется это право для отладки плагина в контексте исполняемого файла хоста, см. [Avoid the Get-Task-Allow Entitlement](https://developer.apple.com/documentation/xcode/notarizing_macos_software_before_distribution/resolving_common_notarization_issues#3087731).
4242- Ссылки на SDK для macOS 10.9 или новее.
4343
44443 сентября 2019 года Apple объявила, что до января 2020 года разработчики могут нотариально заверить новые версии приложений, даже если они не были заверены через [[Hardened runtime for macOS|hardened]] или полностью соответствуют обычным требованиям. **Позднее этот срок был продлен до 3 февраля 2020 года. Вышеуказанные требования к нотариальному удостоверению теперь действуют в полной мере.**
4545
4646### Заявление Apple от 23 декабря 2019 г.
4747
4848В июне мы объявили, что все программное обеспечение Mac, распространяемое за пределами Mac App Store, должно быть нотариально заверено Apple, чтобы оно могло работать по умолчанию на macOS Catalina. В сентябре мы временно скорректировали предварительные условия нотариального заверения, чтобы упростить этот переход и защитить пользователей macOS Catalina, которые продолжают использовать более старые версии программного обеспечения. Начиная с 3 февраля 2020 года, все представленное программное обеспечение должно соответствовать предварительным требованиям для нотариального заверения.
4949
5050Если вы еще не сделали этого, загрузите программное обеспечение в нотариальную службу и просмотрите журнал разработчика на наличие предупреждений. Эти предупреждения станут ошибками с 3 февраля и должны быть исправлены, чтобы ваше программное обеспечение было нотариально заверенным. Программное обеспечение, нотариально заверенное до 3 февраля, по умолчанию будет продолжать работать на macOS Catalina.
5151
5252Напоминаем, что все пакеты установщика должны быть подписаны, поскольку они могут содержать исполняемый код. Образы дисков не нужно подписывать, хотя их подписание может помочь вашим пользователям проверить их содержимое.
5353
5454## Нотариальное заверение заявки
5555
5656В этих инструкциях предполагается, что вы выполнили другие подготовительные шаги: [[Code Signing for macOS|подписание кода]] приложения, реализованное в [[Hardened runtime for macOS|усиленной среде выполнения]], [[Code Signing for macOS|подписание кода]] установщика pkg (если он у вас есть) и т.д.
5757
5858Вы не можете выгрузить пакет .app непосредственно в нотариальную службу, вам необходимо создать сжатый архив, содержащий приложение, или вы можете поместить приложения, расширения ядра и другое программное обеспечение в контейнер, например образ диска, и нотариально заверить контейнер. Нотариальная служба принимает образы дисков (формат UDIF), подписанный установщиком плоских пакетов, и ZIP-архивы. Он также обрабатывает вложенные контейнеры, например пакеты внутри образа диска.
5959
6060### Шаг 1 - Создание образа диска
6161
6262Создайте образ диска, открыв Терминал и выполнив следующую команду:
6363
6464``` bash
6565hdiutil create -volname MyApp -srcfolder /path/to/folder -ov -format UDBZ MyApp.dmg
6666```
6767
6868### Шаг 2 - Код для подписи образа диска
6969
7070Код подписывает образ диска, открыв Терминал и выполнив следующую команду:
7171
7272``` bash
7373codesign -s "Developer ID Application: Your Name (Team ID)" --timestamp MyApp.dmg
7474```
7575
7676### Шаг 3. Создание пароля для конкретного приложения
7777
7878Чтобы сгенерировать пароль для конкретного приложения, обратитесь к этой [статье службы поддержки Apple](https://support.apple.com/en-us/HT204397).
7979
8080> **Note:** это пароль, который будет специфическим для приложения нотариального заверения (xcrun altool), а не для нотариально заверенного приложения. Поэтому вам нужно сделать это только один раз, но убедитесь, что вы скопировали сгенерированный пароль и сохранили его где-нибудь.
8181
8282> **Tip:** Сохраните пароль в связке ключей с помощью:\
8383> `xcrun altool -u "<your email>" -p "<app-specific pwd>" --store-password-in-keychain-item "<name for pwd>"`\
8484> \
8585> А затем вы можете использовать `"@keychain:<name for pwd>"` вместо `"<app-specific pwd>"` в следующих командах.
8686
8787### Шаг 4 - Загрузка образа диска в нотариальную службу
8888
8989> **Note:** Когда вы нотариально заверяете образ диска контейнера, altool также нотариально заверяет приложение внутри, поэтому вы можете пропустить этап нотариального заверения самого приложения.
9090
9191Загрузите файл образа диска в нотариальную службу Apple, открыв Терминал и выполнив следующую команду:
9292
9393``` bash
9494xcrun altool --notarize-app --primary-bundle-id "<your identifier>" -u "<your email>" -p "<app-specific pwd>" -t osx -f /path/to/MyApp.dmg
9595```
9696
9797*primary-bundle-id* помогает отслеживать автоматическую корреспонденцию от службы нотариального заверения. Указанное вами значение не обязательно должно совпадать с идентификатором пакета отправленного приложения или иметь какое-либо конкретное значение. Это должно иметь смысл только для вас. Служба нотариального заверения включает значение всякий раз, когда она отправляет вам электронное письмо относительно данного `altool` представления.
9898
9999Если загрузка прошла успешно, вы должны получить следующий результат:
100100
101101 No errors uploading 'MyApp.dmg'.
102102 RequestUUID = 3af4e56f-162b-75bc-827f-7233f92bf20c
103103
104104### Шаг 5 - Проверка процесса нотариального заверения
105105
106106Процесс нотариального заверения обычно занимает менее часа, поэтому вы можете время от времени проверять его ход, открывая Терминал и выполняя следующую команду:
107107
108108``` bash
109109xcrun altool --notarization-history 0 -u "<your email>" -p "<app-specific pwd>"
110110```
111111
112112Когда процесс нотариального заверения завершится успешно, вышеуказанная команда вернет информацию, подобную следующей:
113113
114114 Notarization History - page 0
115115
116116 Date RequestUUID Status Status Code Status Message
117117 ------------------------- ------------------------------------ ------- ----------- ----------------
118118 2019-12-08 06:24:03 +0000 3af4e56f-162b-75bc-827f-7233f92bf20c success 0 Package Approved
119119
120120 Next page value: 1575786243000
121121
122122Вы также должны получить электронное письмо от Apple, подобное приведенному ниже, в случае успешного нотариального заверения:
123123
124124 Dear <First_Name>,
125125
126126 Your Mac software has been notarized. You can now export this software and distribute it directly to users.(rus: Программное обеспечение вашего Mac было нотариально заверено. Теперь вы можете экспортировать это программное обеспечение и распространять его непосредственно среди пользователей.)
127127
128128 Bundle Identifier: com.example.MyApp.001
129129 Request Identifier: 3af4e56f-162b-75bc-827f-7233f92bf20c
130130
131131 For details on exporting a notarized app, visit Xcode Help or the notarization guide.(rus: Для получения дополнительных сведений об экспорте нотариально заверенного приложения посетите справку Xcode или руководство по нотариальному заверению.)
132132
133133 Best Regards,
134134 Apple Developer Relations
135135
136136### Шаг 6 - Прикрепление удостоверения к образу диска
137137
138138В процессе нотариального заверения создается удостоверение, которое сообщает Gatekeeper, что ваше приложение нотариально заверено. После успешного завершения нотариального заверения в следующий раз, когда любой пользователь попытается запустить ваше приложение в macOS 10.14 или более поздней версии, Gatekeeper найдет удостоверение в Интернете. Сюда входят пользователи, которые загрузили ваше приложение до нотариального заверения.
139139
140140После того, как на шаге 5 будет получено сообщение о статусе «Пакет одобрен», вы также должны прикрепить удостоверение к файлу образа диска с помощью инструмента прикрепления, чтобы в будущие дистрибутивы включили билет. Это гарантирует, что Gatekeeper сможет найти удостоверение, даже если сетевое соединение недоступно.
141141
142142Чтобы прикрепить удостоверение к файлу образа диска, откройте Терминал и выполните следующую команду:
143143
144144``` bash
145145xcrun stapler staple /path/to/MyApp.dmg
146146```
147147
148148Если команда завершится успешно, вывод должен быть похож на:
149149
150150 Processing: /Path/to/MyApp.dmg
151151 Processing: /Path/to/MyApp.dmg
152152 The staple and validate action worked!
153153
154154### Шаг 7 - Подтверждение нотариального заверения образа диска
155155
156156Чтобы подтвердить нотариальное заверение образа диска, откройте Терминал и выполните следующую команду:
157157
158158``` bash
159159spctl -a -vv -t install MyApp.dmg
160160```
161161
162162Успешная проверка процесса нотариального заверения должна привести к примерно следующему результату:
163163
164164 MyApp.dmg: accepted
165165 source=Notarized Developer ID
166166 origin=Developer ID Application: <Developer Name> (<TEAM_ID>)
167167
168168### Шаг 8 - Подтвердить нотариальное заверение приложения
169169
170170Чтобы подтвердить нотариальное заверение приложения, установите приложение, откройте Терминал и выполните следующую команду:
171171
172172``` bash
173173spctl -a -vv /Applications/MyApp.app
174174```
175175
176176Успешное подтверждение процесса нотариального заверения должна привести к примерно следующему результату:
177177
178178 /Applications/MyApp.app: accepted
179179 source=Notarized Developer ID
180180 origin=Developer ID Application: <Developer Name> (<TEAM_ID>)
181181
182182**Важно:** протестируйте приложение, поместив его в каталог Applications. Оно по-разному обрабатывается Gatekeeper'ом, когда находится в "установленном" месте.
183183
184184В качестве альтернативы, рекомендуемый Apple способ проверить нотариальное заверение приложения - открыть Терминал и выполнить следующую команду:
185185
186186 xcrun stapler validate MyApp.app
187187
188188Успешная верификация процесса нотариального заверения должна привести к примерно следующему результату:
189189
190190 Processing: MyApp.app
191191 The validate action worked!
192192
193193## Нотариальное заверение инструмента командной строки
194194
195195Инструменты командной строки могут быть подписаны кодом, но их нелегко нотариально заверить, потому что у них нет [[Application Bundle]] и отдельного `Info.plist` [[macOS property list files|property list file]]. Вы можете относительно легко вставить файл `Info.plist` в исполняемый файл инструмента командной строки.
196196
197197### Вставка Info.plist в исполняемый файл командной строки
198198
199199Вот шаблон, который вы можете настроить для своей утилиты командной строки. Я извлек его из исполняемого файла утилиты командной строки, написанного на C и названного "simplereach", который я создал с помощью Xcode 11.3.1 в Mojave после включения "Create Info.plist Section in Binary"(Создать раздел Info.plist в двоичном формате) в параметрах "Packaging"(Упаковка) (я пропустил ненужные Xcode-related build info).
200200
201201``` xml
202202<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
203203<plist version="1.0">
204204<dict>
205205 <key>BuildMachineOSBuild</key>
206206 <string>18G8022</string>
207207 <key>CFBundleDevelopmentRegion</key>
208208 <string>English</string>
209209 <key>CFBundleDocumentTypes</key>
210210 <array>
211211 <dict>
212212 <key>CFBundleTypeOSTypes</key>
213213 <array>
214214 <string>fold</string>
215215 <string>disk</string>
216216 <string>****</string>
217217 </array>
218218 </dict>
219219 </array>
220220 <key>CFBundleExecutable</key>
221221 <string>simplereach</string>
222222 <key>CFBundleIdentifier</key>
223223 <string>com.mycompany.simplereach</string>
224224 <key>CFBundleInfoDictionaryVersion</key>
225225 <string>6.0</string>
226226 <key>CFBundleName</key>
227227 <string>simplereach</string>
228228 <key>CFBundlePackageType</key>
229229 <string>APPL</string>
230230 <key>CFBundleShortVersionString</key>
231231 <string>1.0</string>
232232 <key>CFBundleSupportedPlatforms</key>
233233 <array>
234234 <string>MacOSX</string>
235235 </array>
236236 <key>CFBundleVersion</key>
237237 <string>1</string>
238238 <key>LSMinimumSystemVersion</key>
239239 <string>10.14</string>
240240</dict>
241241</plist>
242242```
243243
244244Вам нужно будет изменить несколько ключевых строк в приведенном выше файле. Замените свой:
245245
246246- **BuildMachineOSBuild** строку можно получить из Терминала с помощью команды `sw_vers`. '18G8022' предназначена строго для Mojave 10.14.6.
247247- **CFBundleDevelopmentRegion** строка, если она не "английская".
248248- **CFBundleExecutable** строка с названием вашей утилиты.
249249- **CFBundleIdentifier** строка (обычно ваше доменное имя в обратном порядке, за которым следует имя утилиты; не стесняйтесь использовать что-нибудь уникальное).
250250- **CFBundleName** строка (используйте то же значение, что и для CFBundleExecutable).
251251- **CFBundleShortVersionString** строка с номером вашей версии.
252252- **LSMinimumSystemVersion** строка с минимальной версией macOS, на которой будет работать ваша утилита.
253253
254254Затем вы можете вставить файл `Info.plist` в свое приложение, указав компоновщику добавить его как раздел __TEXT с именем __info_plist:
255255
256-`fpc -k"-sectcreate __TEXT __info_plist Info.plist" my_utility.pas`
256+```text
257+fpc -k"-sectcreate __TEXT __info_plist Info.plist" my_utility.pas
258+```
257259
258260Чтобы проверить, успешно ли он вставлен, вы можете запустить следующую команду в Терминале:
259261
260-`otool -X -v -s __TEXT __info_plist my_utility`
262+```text
263+otool -X -v -s __TEXT __info_plist my_utility
264+```
261265
262266### Подпись исполняемого файла командной строки
263267
264268Теперь, когда файл `Info.plist` был вставлен в исполняемый файл, вы готовы подписать его кодом, выполнив следующие команды в Терминале:
265269
266-`cd /path/to/my_utility`\
267-`mkdir bin`\
268-`mv my_utility bin/`\
269-`codesign -f --strict --timestamp --options=runtime -s "Developer ID Application: YOUR NAME (TEAM_ID)" bin/my_utility`
270+```text
271+cd /path/to/my_utility
272+mkdir bin
273+mv my_utility bin/
274+codesign -f --strict --timestamp --options=runtime -s "Developer ID Application: YOUR NAME (TEAM_ID)" bin/my_utility
275+```
270276
271277*Критично*, чтобы вы создали каталог `bin` и переместили в него свою утилиту перед подписанием. В противном случае создастся каталог `_CodeSignature`, который не подойдет для утилиты командной строки, и процесс нотариального заверения не состоится.
272278
273279Чтобы убедиться, что ваши усилия увенчались успехом, вы можете запустить следующую команду в Терминале:
274280
275-`codesign -vv bin/my_utility`
281+```text
282+codesign -vv bin/my_utility
283+```
276284
277285Если подписание кода прошло успешно, результат должен быть примерно таким:
278286
279-`my_utility: valid on disk`\
280-`my_utility: satisfies its Designated Requirement`
287+```text
288+my_utility: valid on disk
289+my_utility: satisfies its Designated Requirement
290+```
281291
282292### Отправка исполняемого файла командной строки на нотариальное заверение
283293
284294Поскольку вы не можете нотариально заверить пустой исполняемый файл, вам необходимо включить его в контейнер (.dmg - образ диска, .pkg - пакет установщика или файл архива ZIP). ZIP-архив является самым простым, поэтому в Терминале выполните следующую команду:
285295
286-`zip my_utility.zip bin/my_utility`
296+```text
297+zip my_utility.zip bin/my_utility
298+```
287299
288300Теперь вы готовы загрузить свою утилиту командной строки на серверы Apple для нотариального заверения. В терминале выполните следующую команду:
289301
290-`xcrun altool --notarize-app --primary-bundle-id "<your identifier>" -u "<your email>" -p "<app-specific pwd>" -t osx -f my_utility.zip`
302+```text
303+xcrun altool --notarize-app --primary-bundle-id "<your identifier>" -u "<your email>" -p "<app-specific pwd>" -t osx -f my_utility.zip
304+```
291305
292306Если у вас еще нет пароля для приложения, см. [[Notarization for macOS 10.14.5+/ru|выше]], чтобы узнать, как его сгенерировать.
293307
294308*Primary-bundle-id* помогает отслеживать автоматическую корреспонденцию от службы нотариального заверения. Указанное вами значение не обязательно должно совпадать с идентификатором пакета отправленного приложения или иметь какое-либо конкретное значение. Это должно иметь смысл только для вас. Услуга нотариального заверения включает значение всякий раз, когда она отправляет вам электронное письмо относительно данной альтернативной заявки.
295309
296310Если загрузка прошла успешно, вы должны получить следующий результат:
297311
298-`No errors uploading 'my_utility'.`\
299-`RequestUUID = 3af4e56f-162b-75bc-827f-7233f92bf20c`
312+```text
313+No errors uploading 'my_utility'.
314+RequestUUID = 3af4e56f-162b-75bc-827f-7233f92bf20c
315+```
300316
301317### Проверка процесса нотариального заверения
302318
303319Процесс нотариального заверения обычно занимает от 10 до 15 минут, поэтому вы можете время от времени проверять его ход, выполняя следующую команду из Терминала:
304320
305-`xcrun altool --notarization-history 0 -u "<your email>" -p "<app-specific pwd>"`
321+```text
322+xcrun altool --notarization-history 0 -u "<your email>" -p "<app-specific pwd>"
323+```
306324
307325Когда процесс нотариального заверения завершится успешно, вышеуказанная команда вернет информацию, подобную следующей:
308326
309327 Notarization History - page 0
310328
311329 Date RequestUUID Status Status Code Status Message
312330 ------------------------- ------------------------------------ ------- ----------- ----------------
313331 2021-04-22 10:55:03 +0000 3af4e56f-162b-76bc-826f-7263f92bf20c success 0 Package Approved
314332
315333 Next page value: 1575786243000
316334
317335Вы также должны получить электронное письмо от Apple, подобное приведенному ниже, в случае успешного нотариального заверения:
318336
319337 Dear <First Name>,
320338
321339 Your Mac software has been notarized. You can now export this software and distribute it directly to users.(rus: Программное обеспечение вашего Mac было нотариально заверено. Теперь вы можете экспортировать это программное обеспечение и распространять его непосредственно среди пользователей.)
322340
323341 Bundle Identifier:
324342 Request Identifier: 70dbe301-d3a7-4931-9ec3-61c5cc80573c
325343
326344 For details on exporting a notarized app, visit Xcode Help or the notarization guide.(rus: Для получения дополнительных сведений об экспорте нотариально заверенного приложения посетите справку Xcode или руководство по нотариальному заверению.)
327345
328346 Best Regards,
329347 Apple Developer Relations
330348
331349В случае неудачного нотариального заверения обратитесь за помощью к разделу [[Notarization for macOS 10.14.5+/ru|Устранение неполадок]] ниже.
332350
333351### Нотариальное заверение исполняемого файла командной строки
334352
335353Чтобы проверить нотариальное заверение инструмента командной строки, откройте Терминал и выполните следующую команду:
336354
337-`spctl -a -t open --context context:primary-signature -vv my_utility `
355+```text
356+spctl -a -t open --context context:primary-signature -vv my_utility
357+```
338358
339359Успешная проверка правильно нотариально заверенного исполняемого файла командной строки должна привести к выводу, подобному следующему:
340360
341-`my_utility: accepted`\
342-`source=Notarized Developer ID`\
343-`origin=Developer ID Application: Your Name (Z9HBGNDZZ9)`
361+```text
362+my_utility: accepted
363+source=Notarized Developer ID
364+origin=Developer ID Application: Your Name (Z9HBGNDZZ9)
365+```
344366
345367## Устранение неполадок
346368
347369### Процесс загрузки нотариального заверения
348370
349371Если процесс загрузки нотариального заверения не проходит должным образом, вы сможете найти сжатый файл журнала во временном каталоге, который может пролить свет на то, что произошло. Вы можете просмотреть его, открыв Терминал и выполнив следующие команды (замените имя вашего файла журнала, который включает идентификатор пакета вашего приложения):
350372
351373``` bash
352374 cd ${TMPDIR}
353375 gzcat c51ca05f-cf49-405f-be57-26873faab5f6_3073718126753816760org.sentry.myapp-20191231004646-273.itmsp6022059143057318377.log
354376```
355377
356378который для успешной загрузки нотариального заверения должен выглядеть примерно так:
357379
358-` [2019-12-31 19:46:46 AEDT] <main>  INFO: Starting upload for packageName: org.sentry.myapp-20191231004646-273.itmsp`\
359-` [2019-12-31 19:46:46 AEDT] <main>  INFO: Thread Pool Configuration: {processors=12, perCoreThreadMultiplier=1.65, coreThreads=6, maxThreads=14, minConnections=6, maxConnections=13, rateLimit=100000000000 KBs}`\
360-` [2019-12-31 19:46:46 AEDT] <main>  INFO: Reservation CPUSource113/v4/93/41/ce/9341ce96-e7bc-2577-eaac-4528c888a70d/metadata.xml created for file: (metadata.xml), part count:(1), file size: (538)`\
361-` [2019-12-31 19:46:46 AEDT] <main>  INFO: Reservation CPUSource113/v4/93/41/ce/9341ce96-e7bc-2577-eaac-4528c888a70d/MyApp_31122019.dmg created for file: (MyApp_31122019.dmg), part count:(1), file size: (1400933)`\
362-` [2019-12-31 19:46:46 AEDT] <RLT-002>  INFO: Starting upload for reservation: (CPUSource113/v4/93/41/ce/9341ce96-e7bc-2577-eaac-4528c888a70d/metadata.xml) file: (metadata.xml/1) size: 538`\
363-` [2019-12-31 19:46:46 AEDT] <RLT-003>  INFO: Starting upload for reservation: (CPUSource113/v4/93/41/ce/9341ce96-e7bc-2577-eaac-4528c888a70d/myapp_31122019.dmg) file: (MyApp_31122019.dmg/1) size: 1400933`\
364-` [2019-12-31 19:46:47 AEDT] <RLT-002>  INFO: Finished part upload for: (metadata.xml/1) 2.91 KB/s in 0 seconds`\
365-` [2019-12-31 19:46:47 AEDT] <RLT-002>  INFO: Finished upload for reservation: (CPUSource113/v4/93/41/ce/9341ce96-e7bc-2577-eaac-4528c888a70d/metadata.xml) file: (metadata.xml)`\
366-` [2019-12-31 19:46:47 AEDT] <pool-8-thread-1>  INFO: Reservation committed: (CPUSource113/v4/93/41/ce/9341ce96-e7bc-2577-eaac-4528c888a70d/metadata.xml) file: (metadata.xml)`\
367-` [2019-12-31 19:46:49 AEDT] <RLT-003>  INFO: Finished part upload for: (MyApp_31122019.dmg/1) 781.33 KB/s in 1 second`\
368-` [2019-12-31 19:46:49 AEDT] <RLT-003>  INFO: Finished upload for reservation: (CPUSource113/v4/93/41/ce/9341ce96-e7bc-2577-eaac-4528c888a70d/MyApp_31122019.dmg) file: (MyApp_31122019.dmg)`\
369-` [2019-12-31 19:46:49 AEDT] <main>  INFO: Waiting on reservation commit(s) to finish.`\
370-` [2019-12-31 19:46:49 AEDT] <pool-8-thread-1>  INFO: Reservation committed: (CPUSource113/v4/93/41/ce/9341ce96-e7bc-2577-eaac-4528c888a70d/MyApp_31122019.dmg) file: (MyApp_31122019.dmg)`\
371-` [2019-12-31 19:46:49 AEDT] <pool-8-thread-1>  INFO: All reservation commit(s) finished.`\
372-` [2019-12-31 19:46:49 AEDT] <main>  INFO: 456.36 KB/s in 3 seconds`
380+```text
381+ [2019-12-31 19:46:46 AEDT] <main> INFO: Starting upload for packageName: org.sentry.myapp-20191231004646-273.itmsp
382+ [2019-12-31 19:46:46 AEDT] <main> INFO: Thread Pool Configuration: {processors=12, perCoreThreadMultiplier=1.65, coreThreads=6, maxThreads=14, minConnections=6, maxConnections=13, rateLimit=100000000000 KBs}
383+ [2019-12-31 19:46:46 AEDT] <main> INFO: Reservation CPUSource113/v4/93/41/ce/9341ce96-e7bc-2577-eaac-4528c888a70d/metadata.xml created for file: (metadata.xml), part count:(1), file size: (538)
384+ [2019-12-31 19:46:46 AEDT] <main> INFO: Reservation CPUSource113/v4/93/41/ce/9341ce96-e7bc-2577-eaac-4528c888a70d/MyApp_31122019.dmg created for file: (MyApp_31122019.dmg), part count:(1), file size: (1400933)
385+ [2019-12-31 19:46:46 AEDT] <RLT-002> INFO: Starting upload for reservation: (CPUSource113/v4/93/41/ce/9341ce96-e7bc-2577-eaac-4528c888a70d/metadata.xml) file: (metadata.xml/1) size: 538
386+ [2019-12-31 19:46:46 AEDT] <RLT-003> INFO: Starting upload for reservation: (CPUSource113/v4/93/41/ce/9341ce96-e7bc-2577-eaac-4528c888a70d/myapp_31122019.dmg) file: (MyApp_31122019.dmg/1) size: 1400933
387+ [2019-12-31 19:46:47 AEDT] <RLT-002> INFO: Finished part upload for: (metadata.xml/1) 2.91 KB/s in 0 seconds
388+ [2019-12-31 19:46:47 AEDT] <RLT-002> INFO: Finished upload for reservation: (CPUSource113/v4/93/41/ce/9341ce96-e7bc-2577-eaac-4528c888a70d/metadata.xml) file: (metadata.xml)
389+ [2019-12-31 19:46:47 AEDT] <pool-8-thread-1> INFO: Reservation committed: (CPUSource113/v4/93/41/ce/9341ce96-e7bc-2577-eaac-4528c888a70d/metadata.xml) file: (metadata.xml)
390+ [2019-12-31 19:46:49 AEDT] <RLT-003> INFO: Finished part upload for: (MyApp_31122019.dmg/1) 781.33 KB/s in 1 second
391+ [2019-12-31 19:46:49 AEDT] <RLT-003> INFO: Finished upload for reservation: (CPUSource113/v4/93/41/ce/9341ce96-e7bc-2577-eaac-4528c888a70d/MyApp_31122019.dmg) file: (MyApp_31122019.dmg)
392+ [2019-12-31 19:46:49 AEDT] <main> INFO: Waiting on reservation commit(s) to finish.
393+ [2019-12-31 19:46:49 AEDT] <pool-8-thread-1> INFO: Reservation committed: (CPUSource113/v4/93/41/ce/9341ce96-e7bc-2577-eaac-4528c888a70d/MyApp_31122019.dmg) file: (MyApp_31122019.dmg)
394+ [2019-12-31 19:46:49 AEDT] <pool-8-thread-1> INFO: All reservation commit(s) finished.
395+ [2019-12-31 19:46:49 AEDT] <main> INFO: 456.36 KB/s in 3 seconds
396+```
373397
374398### Сбои в процессе нотариального заверения
375399
376400Если при проверке вы обнаружите, что процесс нотариального заверения не удался. Например:
377401
378402 Date RequestUUID Status Status Code Status Message
379403 ------------------------- ------------------------------------ ------- ----------- ----------------
380404 2020-02-29 13:54:08 +0000 fa2e5d79-cba0-469d-bb27-859a8f081821 invalid 2 Package Invalid
381405
382406Вы можете получить URL-адрес файла журнала нотариального заверения с помощью команды:
383407
384408``` bash
385409xcrun altool --notarization-info <RequestUUID> -u "<your email>" -p "<app-specific pwd>"
386410```
387411
388412который должен дать информацию, подобную следующей:
389413
390414 No errors getting notarization info.
391415
392416 Date: 2020-02-29 13:54:08 +0000
393417 Hash: 1b08ea5cdf97eb6fed9b959a549d4b325eb5e90f16538139a29a83f75609d87b
394418 LogFileURL: https://osxapps-ssl.itunes.apple.com/itunes-assets/[...]
395419 RequestUUID: fa2e5d79-cba0-469d-bb27-859a8f081821
396420 Status: invalid
397421 Status Code: 2
398422 Status Message: Package Invalid
399423
400424Затем вы можете вырезать и вставить LogFileURL в свой веб-браузер и получить файл журнала процесса нотариального заверения, который будет выглядеть примерно так:
401425
402426``` json
403427{
404428 "logFormatVersion": 1,
405429 "jobId": "fa2e5d79-cba0-469d-bb27-859a8f081821",
406430 "status": "Invalid",
407431 "statusSummary": "Archive contains critical validation errors",
408432 "statusCode": 4000,
409433 "archiveFilename": "test.dmg",
410434 "uploadDate": "2020-02-29T13:54:08Z",
411435 "sha256": "1b08ea5cdf97eb6fed9b959a549d4b325eb5e90f16538139a29a83f75609d87b",
412436 "ticketContents": null,
413437 "issues": [
414438 {
415439 "severity": "error",
416440 "code": null,
417441 "path": "test.dmg/MyApp.app/Contents/MacOS/MyApp",
418442 "message": "The executable does not have the hardened runtime enabled.",
419443 "docUrl": null,
420444 "architecture": "x86_64"
421445 }
422446 ]
423447}
424448```
425449
426450В приведенном выше случае сбоя это произошло из-за того, что исполняемый файл не был [[Hardened runtime for macOS|с подписанной защитой]].
427451
428452Также стоит упомянуть, что *всегда* стоит извлекать файл журнала нотариального заверения для проверки предупреждений, которые еще не являются ошибками, чтобы вы могли исправить их до того, как они станут ошибками, препятствующими успешному нотариальному заверению.
429453
430454Вот пример протокола процесса нотариального заверения после успешного нотариального заверения:
431455
432456``` json
433457{
434458 "logFormatVersion": 1,
435459 "jobId": "fa2e5d79-cba0-469d-bb27-859a8f081822",
436460 "status": "Accepted",
437461 "statusSummary": "Ready for distribution",
438462 "statusCode": 0,
439463 "archiveFilename": "test.dmg",
440464 "uploadDate": "2020-03-01T01:50:55Z",
441465 "sha256": "1945554c24da3bb1d587b7c9f968dcbb925b726f2f663b816301928c06593dd9",
442466 "ticketContents": [
443467 {
444468 "path": "test.dmg",
445469 "digestAlgorithm": "SHA-256",
446470 "cdhash": "1d4d033edbecc2baf7ff8ce0fa16691be990595f"
447471 },
448472 {
449473 "path": "test.dmg/MyApp.app",
450474 "digestAlgorithm": "SHA-256",
451475 "cdhash": "7f9d54e76f25807e2b425a09684aa8cb54dcd17f",
452476 "arch": "x86_64"
453477 },
454478 {
455479 "path": "test.dmg/MyApp.app/Contents/MacOS/MyApp",
456480 "digestAlgorithm": "SHA-256",
457481 "cdhash": "7f9d54e762c7907e2b425a09684aa8cb54dcd17f",
458482 "arch": "x86_64"
459483 },
460484 {
461485 "path": "test.dmg/MyApp.app/Contents/Resources/MyApp.help",
462486 "digestAlgorithm": "SHA-256",
463487 "cdhash": "b544a32a216578e7805ca93b968377cdd92f7ec6",
464488 "arch": "i386"
465489 },
466490 {
467491 "path": "test.dmg/MyApp.app/Contents/Resources/MyApp.help",
468492 "digestAlgorithm": "SHA-256",
469493 "cdhash": "b544a32a216578e7805ca93b968377cdd92f7ec6",
470494 "arch": "x86_64"
471495 },
472496 {
473497 "path": "test.dmg/MyApp.app/Contents/Resources/MyApp.help",
474498 "digestAlgorithm": "SHA-256",
475499 "cdhash": "b544a32a216578e7805ca93b968377cdd92f7ec6",
476500 "arch": "x86_64h"
477501 }
478502 ],
479503 "issues": null
480504}
481505```
482506
483507### Сбои при проверке нотариального заверения
484508
485509Если процесс нотариального заверения прошел успешно, но вы получили сбой при проверке успешности нотариального заверения, вы можете использовать `Console.app` для проверки файлов журнала на предмет информации об отклонении (после попытки запустить заблокированное приложение). Имейте в виду, что вы должны открыть `Console.app` *перед* попыткой открыть ваше `Console.app`, иначе не все сообщения могут быть зарегистрированы. Вы должны выбрать свое устройство на левой боковой панели `Console.app` и проверить в журналах процесс **XprotectService**.
486510
487511## См.также
488512
489513- [[Apple Developer Certificates]]
490514- [[Code Signing for macOS]]
491515- [[Hardened runtime for macOS]]
492516- [[Signing and Notarization FAQ]]
493517
494518## Внешние ссылки
495519
496520- [Apple: Notarizing your app before distribution](https://developer.apple.com/documentation/security/notarizing_your_app_before_distribution)
497521- [Apple: Notarizing macOS Software Before Distribution](https://developer.apple.com/documentation/xcode/notarizing_macos_software_before_distribution)
498522- [Apple: Customizing the Notarization Workflow](https://developer.apple.com/documentation/xcode/notarizing_macos_software_before_distribution/customizing_the_notarization_workflow)
499523- [Apple: Common notarization issues](https://developer.apple.com/documentation/xcode/notarizing_macos_software_before_distribution/resolving_common_notarization_issues)
500524- [Apple: Using app-specific passwords](https://support.apple.com/en-us/HT204397)
501525- [Notarize FPC](https://github.com/neurolabusc/NotarizeFPC) A script to notarize a command line utility and package it in an installer .pkg file.
502526
503527---
504528*From the Free Pascal wiki, page "Notarization for macOS 10.14.5+/ru", as it stood on 2022-01-01 after a change by Zoltanleo, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history