Sign in Join
Wiki copytemporary

Notarization for macOS 10.14.5+/ru: what changed

Revision 2 to 3. 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
15-<File:macos-mojave-app-downloaded-from-internet-alert-dark.jpg%7CДиалоговое> окно Gatekeeper до Catalina, в котором сначала открывается нотариально не заверенное приложение (диалоговое окно Mojave macOS 10.14 ) <File:Screenshot_2020-01-02_at_22.42.01.png%7CДиалоговое> окно Gatekeeper, в котором сначала открывается подписанное и нотариально заверенное приложение (диалоговое окно Catalina macOS 10.15.1) <File:gatekeep_no.png%7CСначала> открывается диалоговое окно Gatekeeper, в котором приложение не подписано и не заверено нотариально. (диалоговое окно Catalina macOS 10.15.1) <File:macos-catalina-alert-unsigned-override.jpg%7CДиалоговое> "обходное" окно Gatekeeper, доступ к которому можно получить, щелкнув приложение, удерживая клавишу Control. (диалоговое окно Catalina macOS 10.15.3)
15+![](/wiki-images/2/29/Macos-mojave-app-downloaded-from-internet-alert-dark.jpg)
16+
17+Диалоговое окно Gatekeeper до Catalina, в котором сначала открывается нотариально не заверенное приложение (диалоговое окно Mojave macOS 10.14 )
18+
19+![](/wiki-images/c/c6/Screenshot_2020-01-02_at_22.42.01.png)
20+
21+Диалоговое окно Gatekeeper, в котором сначала открывается подписанное и нотариально заверенное приложение (диалоговое окно Catalina macOS 10.15.1)
22+
23+![](/wiki-images/4/4a/Gatekeep_no.png)
24+
25+Сначала открывается диалоговое окно Gatekeeper, в котором приложение не подписано и не заверено нотариально. (диалоговое окно Catalina macOS 10.15.1)
26+
27+![](/wiki-images/2/21/Macos-catalina-alert-unsigned-override.jpg)
28+
29+Диалоговое "обходное" окно Gatekeeper, доступ к которому можно получить, щелкнув приложение, удерживая клавишу Control. (диалоговое окно Catalina macOS 10.15.3)
1630
1731## Требования к нотариальному заверению
1832
1933Для нотариального заверения требуются инструменты командной строки Xcode от Xcode 10 или новее. Для создания нового приложения для нотариального заверения требуется macOS 10.13.6 или новее. Для прикрепления приложения требуется macOS 10.12 или новее.
2034
2135Нотариальная служба Apple требует от вас:
2236
2337- Включения подписывания кода для всех распространяемых вами исполняемых файлов.
2438- Включения возможности заверения через [[Hardened runtime for macOS|Hardened Runtime]] для вашего приложения и целей командной строки.
2539- Использования приложения «Developer ID», расширения ядра или сертификата установщика для подписи кода.
2640- Включения безопасной метки времени в свою подпись для подписи кода (включения параметра --timestamp при запуске инструмента кодовой подписи).
2741- Не включать право 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).
2842- Ссылки на SDK для macOS 10.9 или новее.
2943
30443 сентября 2019 года Apple объявила, что до января 2020 года разработчики могут нотариально заверить новые версии приложений, даже если они не были заверены через [[Hardened runtime for macOS|hardened]] или полностью соответствуют обычным требованиям. **Позднее этот срок был продлен до 3 февраля 2020 года. Вышеуказанные требования к нотариальному удостоверению теперь действуют в полной мере.**
3145
3246### Заявление Apple от 23 декабря 2019 г.
3347
3448В июне мы объявили, что все программное обеспечение Mac, распространяемое за пределами Mac App Store, должно быть нотариально заверено Apple, чтобы оно могло работать по умолчанию на macOS Catalina. В сентябре мы временно скорректировали предварительные условия нотариального заверения, чтобы упростить этот переход и защитить пользователей macOS Catalina, которые продолжают использовать более старые версии программного обеспечения. Начиная с 3 февраля 2020 года, все представленное программное обеспечение должно соответствовать предварительным требованиям для нотариального заверения.
3549
3650Если вы еще не сделали этого, загрузите программное обеспечение в нотариальную службу и просмотрите журнал разработчика на наличие предупреждений. Эти предупреждения станут ошибками с 3 февраля и должны быть исправлены, чтобы ваше программное обеспечение было нотариально заверенным. Программное обеспечение, нотариально заверенное до 3 февраля, по умолчанию будет продолжать работать на macOS Catalina.
3751
3852Напоминаем, что все пакеты установщика должны быть подписаны, поскольку они могут содержать исполняемый код. Образы дисков не нужно подписывать, хотя их подписание может помочь вашим пользователям проверить их содержимое.
3953
4054## Нотариальное заверение заявки
4155
4256В этих инструкциях предполагается, что вы выполнили другие подготовительные шаги: [[Code Signing for macOS|подписание кода]] приложения, реализованное в [[Hardened runtime for macOS|усиленной среде выполнения]], [[Code Signing for macOS|подписание кода]] установщика pkg (если он у вас есть) и т.д.
4357
4458Вы не можете выгрузить пакет .app непосредственно в нотариальную службу, вам необходимо создать сжатый архив, содержащий приложение, или вы можете поместить приложения, расширения ядра и другое программное обеспечение в контейнер, например образ диска, и нотариально заверить контейнер. Нотариальная служба принимает образы дисков (формат UDIF), подписанный установщиком плоских пакетов, и ZIP-архивы. Он также обрабатывает вложенные контейнеры, например пакеты внутри образа диска.
4559
4660### Шаг 1 - Создание образа диска
4761
4862Создайте образ диска, открыв Терминал и выполнив следующую команду:
4963
5064``` bash
5165hdiutil create -volname MyApp -srcfolder /path/to/folder -ov -format UDBZ MyApp.dmg
5266```
5367
5468### Шаг 2 - Код для подписи образа диска
5569
5670Код подписывает образ диска, открыв Терминал и выполнив следующую команду:
5771
5872``` bash
5973codesign -s "Developer ID Application: Your Name (Team ID)" --timestamp MyApp.dmg
6074```
6175
6276### Шаг 3. Создание пароля для конкретного приложения
6377
6478Чтобы сгенерировать пароль для конкретного приложения, обратитесь к этой [статье службы поддержки Apple](https://support.apple.com/en-us/HT204397).
6579
6680> **Note:** это пароль, который будет специфическим для приложения нотариального заверения (xcrun altool), а не для нотариально заверенного приложения. Поэтому вам нужно сделать это только один раз, но убедитесь, что вы скопировали сгенерированный пароль и сохранили его где-нибудь.
6781
6882> **Tip:** Сохраните пароль в связке ключей с помощью:\
6983> `xcrun altool -u "<your email>" -p "<app-specific pwd>" --store-password-in-keychain-item "<name for pwd>"`\
7084> \
7185> А затем вы можете использовать `"@keychain:<name for pwd>"` вместо `"<app-specific pwd>"` в следующих командах.
7286
7387### Шаг 4 - Загрузка образа диска в нотариальную службу
7488
7589> **Note:** Когда вы нотариально заверяете образ диска контейнера, altool также нотариально заверяет приложение внутри, поэтому вы можете пропустить этап нотариального заверения самого приложения.
7690
7791Загрузите файл образа диска в нотариальную службу Apple, открыв Терминал и выполнив следующую команду:
7892
7993``` bash
8094xcrun altool --notarize-app --primary-bundle-id "<your identifier>" -u "<your email>" -p "<app-specific pwd>" -t osx -f /path/to/MyApp.dmg
8195```
8296
8397*primary-bundle-id* помогает отслеживать автоматическую корреспонденцию от службы нотариального заверения. Указанное вами значение не обязательно должно совпадать с идентификатором пакета отправленного приложения или иметь какое-либо конкретное значение. Это должно иметь смысл только для вас. Служба нотариального заверения включает значение всякий раз, когда она отправляет вам электронное письмо относительно данного `altool` представления.
8498
8599Если загрузка прошла успешно, вы должны получить следующий результат:
86100
87101 No errors uploading 'MyApp.dmg'.
88102 RequestUUID = 3af4e56f-162b-75bc-827f-7233f92bf20c
89103
90104### Шаг 5 - Проверка процесса нотариального заверения
91105
92106Процесс нотариального заверения обычно занимает менее часа, поэтому вы можете время от времени проверять его ход, открывая Терминал и выполняя следующую команду:
93107
94108``` bash
95109xcrun altool --notarization-history 0 -u "<your email>" -p "<app-specific pwd>"
96110```
97111
98112Когда процесс нотариального заверения завершится успешно, вышеуказанная команда вернет информацию, подобную следующей:
99113
100114 Notarization History - page 0
101115
102116 Date RequestUUID Status Status Code Status Message
103117 ------------------------- ------------------------------------ ------- ----------- ----------------
104118 2019-12-08 06:24:03 +0000 3af4e56f-162b-75bc-827f-7233f92bf20c success 0 Package Approved
105119
106120 Next page value: 1575786243000
107121
108122Вы также должны получить электронное письмо от Apple, подобное приведенному ниже, в случае успешного нотариального заверения:
109123
110124 Dear <First_Name>,
111125
112126 Your Mac software has been notarized. You can now export this software and distribute it directly to users.(rus: Программное обеспечение вашего Mac было нотариально заверено. Теперь вы можете экспортировать это программное обеспечение и распространять его непосредственно среди пользователей.)
113127
114128 Bundle Identifier: com.example.MyApp.001
115129 Request Identifier: 3af4e56f-162b-75bc-827f-7233f92bf20c
116130
117131 For details on exporting a notarized app, visit Xcode Help or the notarization guide.(rus: Для получения дополнительных сведений об экспорте нотариально заверенного приложения посетите справку Xcode или руководство по нотариальному заверению.)
118132
119133 Best Regards,
120134 Apple Developer Relations
121135
122136### Шаг 6 - Прикрепление удостоверения к образу диска
123137
124138В процессе нотариального заверения создается удостоверение, которое сообщает Gatekeeper, что ваше приложение нотариально заверено. После успешного завершения нотариального заверения в следующий раз, когда любой пользователь попытается запустить ваше приложение в macOS 10.14 или более поздней версии, Gatekeeper найдет удостоверение в Интернете. Сюда входят пользователи, которые загрузили ваше приложение до нотариального заверения.
125139
126140После того, как на шаге 5 будет получено сообщение о статусе «Пакет одобрен», вы также должны прикрепить удостоверение к файлу образа диска с помощью инструмента прикрепления, чтобы в будущие дистрибутивы включили билет. Это гарантирует, что Gatekeeper сможет найти удостоверение, даже если сетевое соединение недоступно.
127141
128142Чтобы прикрепить удостоверение к файлу образа диска, откройте Терминал и выполните следующую команду:
129143
130144``` bash
131145xcrun stapler staple /path/to/MyApp.dmg
132146```
133147
134148Если команда завершится успешно, вывод должен быть похож на:
135149
136150 Processing: /Path/to/MyApp.dmg
137151 Processing: /Path/to/MyApp.dmg
138152 The staple and validate action worked!
139153
140154### Шаг 7 - Подтверждение нотариального заверения образа диска
141155
142156Чтобы подтвердить нотариальное заверение образа диска, откройте Терминал и выполните следующую команду:
143157
144158``` bash
145159spctl -a -vv -t install MyApp.dmg
146160```
147161
148162Успешная проверка процесса нотариального заверения должна привести к примерно следующему результату:
149163
150164 MyApp.dmg: accepted
151165 source=Notarized Developer ID
152166 origin=Developer ID Application: <Developer Name> (<TEAM_ID>)
153167
154168### Шаг 8 - Подтвердить нотариальное заверение приложения
155169
156170Чтобы подтвердить нотариальное заверение приложения, установите приложение, откройте Терминал и выполните следующую команду:
157171
158172``` bash
159173spctl -a -vv /Applications/MyApp.app
160174```
161175
162176Успешное подтверждение процесса нотариального заверения должна привести к примерно следующему результату:
163177
164178 /Applications/MyApp.app: accepted
165179 source=Notarized Developer ID
166180 origin=Developer ID Application: <Developer Name> (<TEAM_ID>)
167181
168182**Важно:** протестируйте приложение, поместив его в каталог Applications. Оно по-разному обрабатывается Gatekeeper'ом, когда находится в "установленном" месте.
169183
170184В качестве альтернативы, рекомендуемый Apple способ проверить нотариальное заверение приложения - открыть Терминал и выполнить следующую команду:
171185
172186 xcrun stapler validate MyApp.app
173187
174188Успешная верификация процесса нотариального заверения должна привести к примерно следующему результату:
175189
176190 Processing: MyApp.app
177191 The validate action worked!
178192
179193## Нотариальное заверение инструмента командной строки
180194
181195Инструменты командной строки могут быть подписаны кодом, но их нелегко нотариально заверить, потому что у них нет [[Application Bundle]] и отдельного `Info.plist` [[macOS property list files|property list file]]. Вы можете относительно легко вставить файл `Info.plist` в исполняемый файл инструмента командной строки.
182196
183197### Вставка Info.plist в исполняемый файл командной строки
184198
185199Вот шаблон, который вы можете настроить для своей утилиты командной строки. Я извлек его из исполняемого файла утилиты командной строки, написанного на C и названного "simplereach", который я создал с помощью Xcode 11.3.1 в Mojave после включения "Create Info.plist Section in Binary"(Создать раздел Info.plist в двоичном формате) в параметрах "Packaging"(Упаковка) (я пропустил ненужные Xcode-related build info).
186200
187201``` xml
188202<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
189203<plist version="1.0">
190204<dict>
191205 <key>BuildMachineOSBuild</key>
192206 <string>18G8022</string>
193207 <key>CFBundleDevelopmentRegion</key>
194208 <string>English</string>
195209 <key>CFBundleDocumentTypes</key>
196210 <array>
197211 <dict>
198212 <key>CFBundleTypeOSTypes</key>
199213 <array>
200214 <string>fold</string>
201215 <string>disk</string>
202216 <string>****</string>
203217 </array>
204218 </dict>
205219 </array>
206220 <key>CFBundleExecutable</key>
207221 <string>simplereach</string>
208222 <key>CFBundleIdentifier</key>
209223 <string>com.mycompany.simplereach</string>
210224 <key>CFBundleInfoDictionaryVersion</key>
211225 <string>6.0</string>
212226 <key>CFBundleName</key>
213227 <string>simplereach</string>
214228 <key>CFBundlePackageType</key>
215229 <string>APPL</string>
216230 <key>CFBundleShortVersionString</key>
217231 <string>1.0</string>
218232 <key>CFBundleSupportedPlatforms</key>
219233 <array>
220234 <string>MacOSX</string>
221235 </array>
222236 <key>CFBundleVersion</key>
223237 <string>1</string>
224238 <key>LSMinimumSystemVersion</key>
225239 <string>10.14</string>
226240</dict>
227241</plist>
228242```
229243
230244Вам нужно будет изменить несколько ключевых строк в приведенном выше файле. Замените свой:
231245
232246- **BuildMachineOSBuild** строку можно получить из Терминала с помощью команды `sw_vers`. '18G8022' предназначена строго для Mojave 10.14.6.
233247- **CFBundleDevelopmentRegion** строка, если она не "английская".
234248- **CFBundleExecutable** строка с названием вашей утилиты.
235249- **CFBundleIdentifier** строка (обычно ваше доменное имя в обратном порядке, за которым следует имя утилиты; не стесняйтесь использовать что-нибудь уникальное).
236250- **CFBundleName** строка (используйте то же значение, что и для CFBundleExecutable).
237251- **CFBundleShortVersionString** строка с номером вашей версии.
238252- **LSMinimumSystemVersion** строка с минимальной версией macOS, на которой будет работать ваша утилита.
239253
240254Затем вы можете вставить файл `Info.plist` в свое приложение, указав компоновщику добавить его как раздел __TEXT с именем __info_plist:
241255
242256`fpc -k"-sectcreate __TEXT __info_plist Info.plist" my_utility.pas`
243257
244258Чтобы проверить, успешно ли он вставлен, вы можете запустить следующую команду в Терминале:
245259
246260`otool -X -v -s __TEXT __info_plist my_utility`
247261
248262### Подпись исполняемого файла командной строки
249263
250264Теперь, когда файл `Info.plist` был вставлен в исполняемый файл, вы готовы подписать его кодом, выполнив следующие команды в Терминале:
251265
252266`cd /path/to/my_utility`\
253267`mkdir bin`\
254268`mv my_utility bin/`\
255269`codesign -f --strict --timestamp --options=runtime -s "Developer ID Application: YOUR NAME (TEAM_ID)" bin/my_utility`
256270
257271*Критично*, чтобы вы создали каталог `bin` и переместили в него свою утилиту перед подписанием. В противном случае создастся каталог `_CodeSignature`, который не подойдет для утилиты командной строки, и процесс нотариального заверения не состоится.
258272
259273Чтобы убедиться, что ваши усилия увенчались успехом, вы можете запустить следующую команду в Терминале:
260274
261275`codesign -vv bin/my_utility`
262276
263277Если подписание кода прошло успешно, результат должен быть примерно таким:
264278
265279`my_utility: valid on disk`\
266280`my_utility: satisfies its Designated Requirement`
267281
268282### Отправка исполняемого файла командной строки на нотариальное заверение
269283
270284Поскольку вы не можете нотариально заверить пустой исполняемый файл, вам необходимо включить его в контейнер (.dmg - образ диска, .pkg - пакет установщика или файл архива ZIP). ZIP-архив является самым простым, поэтому в Терминале выполните следующую команду:
271285
272286`zip my_utility.zip bin/my_utility`
273287
274288Теперь вы готовы загрузить свою утилиту командной строки на серверы Apple для нотариального заверения. В терминале выполните следующую команду:
275289
276290`xcrun altool --notarize-app --primary-bundle-id "<your identifier>" -u "<your email>" -p "<app-specific pwd>" -t osx -f my_utility.zip`
277291
278292Если у вас еще нет пароля для приложения, см. [[Notarization for macOS 10.14.5+/ru|выше]], чтобы узнать, как его сгенерировать.
279293
280294*Primary-bundle-id* помогает отслеживать автоматическую корреспонденцию от службы нотариального заверения. Указанное вами значение не обязательно должно совпадать с идентификатором пакета отправленного приложения или иметь какое-либо конкретное значение. Это должно иметь смысл только для вас. Услуга нотариального заверения включает значение всякий раз, когда она отправляет вам электронное письмо относительно данной альтернативной заявки.
281295
282296Если загрузка прошла успешно, вы должны получить следующий результат:
283297
284298`No errors uploading 'my_utility'.`\
285299`RequestUUID = 3af4e56f-162b-75bc-827f-7233f92bf20c`
286300
287301### Проверка процесса нотариального заверения
288302
289303Процесс нотариального заверения обычно занимает от 10 до 15 минут, поэтому вы можете время от времени проверять его ход, выполняя следующую команду из Терминала:
290304
291305`xcrun altool --notarization-history 0 -u "<your email>" -p "<app-specific pwd>"`
292306
293307Когда процесс нотариального заверения завершится успешно, вышеуказанная команда вернет информацию, подобную следующей:
294308
295309 Notarization History - page 0
296310
297311 Date RequestUUID Status Status Code Status Message
298312 ------------------------- ------------------------------------ ------- ----------- ----------------
299313 2021-04-22 10:55:03 +0000 3af4e56f-162b-76bc-826f-7263f92bf20c success 0 Package Approved
300314
301315 Next page value: 1575786243000
302316
303317Вы также должны получить электронное письмо от Apple, подобное приведенному ниже, в случае успешного нотариального заверения:
304318
305319 Dear <First Name>,
306320
307321 Your Mac software has been notarized. You can now export this software and distribute it directly to users.(rus: Программное обеспечение вашего Mac было нотариально заверено. Теперь вы можете экспортировать это программное обеспечение и распространять его непосредственно среди пользователей.)
308322
309323 Bundle Identifier:
310324 Request Identifier: 70dbe301-d3a7-4931-9ec3-61c5cc80573c
311325
312326 For details on exporting a notarized app, visit Xcode Help or the notarization guide.(rus: Для получения дополнительных сведений об экспорте нотариально заверенного приложения посетите справку Xcode или руководство по нотариальному заверению.)
313327
314328 Best Regards,
315329 Apple Developer Relations
316330
317331В случае неудачного нотариального заверения обратитесь за помощью к разделу [[Notarization for macOS 10.14.5+/ru|Устранение неполадок]] ниже.
318332
319333### Нотариальное заверение исполняемого файла командной строки
320334
321335Чтобы проверить нотариальное заверение инструмента командной строки, откройте Терминал и выполните следующую команду:
322336
323337`spctl -a -t open --context context:primary-signature -vv my_utility `
324338
325339Успешная проверка правильно нотариально заверенного исполняемого файла командной строки должна привести к выводу, подобному следующему:
326340
327341`my_utility: accepted`\
328342`source=Notarized Developer ID`\
329343`origin=Developer ID Application: Your Name (Z9HBGNDZZ9)`
330344
331345## Устранение неполадок
332346
333347### Процесс загрузки нотариального заверения
334348
335349Если процесс загрузки нотариального заверения не проходит должным образом, вы сможете найти сжатый файл журнала во временном каталоге, который может пролить свет на то, что произошло. Вы можете просмотреть его, открыв Терминал и выполнив следующие команды (замените имя вашего файла журнала, который включает идентификатор пакета вашего приложения):
336350
337351``` bash
338352 cd ${TMPDIR}
339353 gzcat c51ca05f-cf49-405f-be57-26873faab5f6_3073718126753816760org.sentry.myapp-20191231004646-273.itmsp6022059143057318377.log
340354```
341355
342356который для успешной загрузки нотариального заверения должен выглядеть примерно так:
343357
344358` [2019-12-31 19:46:46 AEDT] <main>  INFO: Starting upload for packageName: org.sentry.myapp-20191231004646-273.itmsp`\
345359` [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}`\
346360` [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)`\
347361` [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)`\
348362` [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`\
349363` [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`\
350364` [2019-12-31 19:46:47 AEDT] <RLT-002>  INFO: Finished part upload for: (metadata.xml/1) 2.91 KB/s in 0 seconds`\
351365` [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)`\
352366` [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)`\
353367` [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`\
354368` [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)`\
355369` [2019-12-31 19:46:49 AEDT] <main>  INFO: Waiting on reservation commit(s) to finish.`\
356370` [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)`\
357371` [2019-12-31 19:46:49 AEDT] <pool-8-thread-1>  INFO: All reservation commit(s) finished.`\
358372` [2019-12-31 19:46:49 AEDT] <main>  INFO: 456.36 KB/s in 3 seconds`
359373
360374### Сбои в процессе нотариального заверения
361375
362376Если при проверке вы обнаружите, что процесс нотариального заверения не удался. Например:
363377
364378 Date RequestUUID Status Status Code Status Message
365379 ------------------------- ------------------------------------ ------- ----------- ----------------
366380 2020-02-29 13:54:08 +0000 fa2e5d79-cba0-469d-bb27-859a8f081821 invalid 2 Package Invalid
367381
368382Вы можете получить URL-адрес файла журнала нотариального заверения с помощью команды:
369383
370384``` bash
371385xcrun altool --notarization-info <RequestUUID> -u "<your email>" -p "<app-specific pwd>"
372386```
373387
374388который должен дать информацию, подобную следующей:
375389
376390 No errors getting notarization info.
377391
378392 Date: 2020-02-29 13:54:08 +0000
379393 Hash: 1b08ea5cdf97eb6fed9b959a549d4b325eb5e90f16538139a29a83f75609d87b
380394 LogFileURL: https://osxapps-ssl.itunes.apple.com/itunes-assets/[...]
381395 RequestUUID: fa2e5d79-cba0-469d-bb27-859a8f081821
382396 Status: invalid
383397 Status Code: 2
384398 Status Message: Package Invalid
385399
386400Затем вы можете вырезать и вставить LogFileURL в свой веб-браузер и получить файл журнала процесса нотариального заверения, который будет выглядеть примерно так:
387401
388402``` json
389403{
390404 "logFormatVersion": 1,
391405 "jobId": "fa2e5d79-cba0-469d-bb27-859a8f081821",
392406 "status": "Invalid",
393407 "statusSummary": "Archive contains critical validation errors",
394408 "statusCode": 4000,
395409 "archiveFilename": "test.dmg",
396410 "uploadDate": "2020-02-29T13:54:08Z",
397411 "sha256": "1b08ea5cdf97eb6fed9b959a549d4b325eb5e90f16538139a29a83f75609d87b",
398412 "ticketContents": null,
399413 "issues": [
400414 {
401415 "severity": "error",
402416 "code": null,
403417 "path": "test.dmg/MyApp.app/Contents/MacOS/MyApp",
404418 "message": "The executable does not have the hardened runtime enabled.",
405419 "docUrl": null,
406420 "architecture": "x86_64"
407421 }
408422 ]
409423}
410424```
411425
412426В приведенном выше случае сбоя это произошло из-за того, что исполняемый файл не был [[Hardened runtime for macOS|с подписанной защитой]].
413427
414428Также стоит упомянуть, что *всегда* стоит извлекать файл журнала нотариального заверения для проверки предупреждений, которые еще не являются ошибками, чтобы вы могли исправить их до того, как они станут ошибками, препятствующими успешному нотариальному заверению.
415429
416430Вот пример протокола процесса нотариального заверения после успешного нотариального заверения:
417431
418432``` json
419433{
420434 "logFormatVersion": 1,
421435 "jobId": "fa2e5d79-cba0-469d-bb27-859a8f081822",
422436 "status": "Accepted",
423437 "statusSummary": "Ready for distribution",
424438 "statusCode": 0,
425439 "archiveFilename": "test.dmg",
426440 "uploadDate": "2020-03-01T01:50:55Z",
427441 "sha256": "1945554c24da3bb1d587b7c9f968dcbb925b726f2f663b816301928c06593dd9",
428442 "ticketContents": [
429443 {
430444 "path": "test.dmg",
431445 "digestAlgorithm": "SHA-256",
432446 "cdhash": "1d4d033edbecc2baf7ff8ce0fa16691be990595f"
433447 },
434448 {
435449 "path": "test.dmg/MyApp.app",
436450 "digestAlgorithm": "SHA-256",
437451 "cdhash": "7f9d54e76f25807e2b425a09684aa8cb54dcd17f",
438452 "arch": "x86_64"
439453 },
440454 {
441455 "path": "test.dmg/MyApp.app/Contents/MacOS/MyApp",
442456 "digestAlgorithm": "SHA-256",
443457 "cdhash": "7f9d54e762c7907e2b425a09684aa8cb54dcd17f",
444458 "arch": "x86_64"
445459 },
446460 {
447461 "path": "test.dmg/MyApp.app/Contents/Resources/MyApp.help",
448462 "digestAlgorithm": "SHA-256",
449463 "cdhash": "b544a32a216578e7805ca93b968377cdd92f7ec6",
450464 "arch": "i386"
451465 },
452466 {
453467 "path": "test.dmg/MyApp.app/Contents/Resources/MyApp.help",
454468 "digestAlgorithm": "SHA-256",
455469 "cdhash": "b544a32a216578e7805ca93b968377cdd92f7ec6",
456470 "arch": "x86_64"
457471 },
458472 {
459473 "path": "test.dmg/MyApp.app/Contents/Resources/MyApp.help",
460474 "digestAlgorithm": "SHA-256",
461475 "cdhash": "b544a32a216578e7805ca93b968377cdd92f7ec6",
462476 "arch": "x86_64h"
463477 }
464478 ],
465479 "issues": null
466480}
467481```
468482
469483### Сбои при проверке нотариального заверения
470484
471485Если процесс нотариального заверения прошел успешно, но вы получили сбой при проверке успешности нотариального заверения, вы можете использовать `Console.app` для проверки файлов журнала на предмет информации об отклонении (после попытки запустить заблокированное приложение). Имейте в виду, что вы должны открыть `Console.app` *перед* попыткой открыть ваше `Console.app`, иначе не все сообщения могут быть зарегистрированы. Вы должны выбрать свое устройство на левой боковой панели `Console.app` и проверить в журналах процесс **XprotectService**.
472486
473487## См.также
474488
475489- [[Apple Developer Certificates]]
476490- [[Code Signing for macOS]]
477491- [[Hardened runtime for macOS]]
478492- [[Signing and Notarization FAQ]]
479493
480494## Внешние ссылки
481495
482496- [Apple: Notarizing your app before distribution](https://developer.apple.com/documentation/security/notarizing_your_app_before_distribution)
483497- [Apple: Notarizing macOS Software Before Distribution](https://developer.apple.com/documentation/xcode/notarizing_macos_software_before_distribution)
484498- [Apple: Customizing the Notarization Workflow](https://developer.apple.com/documentation/xcode/notarizing_macos_software_before_distribution/customizing_the_notarization_workflow)
485499- [Apple: Common notarization issues](https://developer.apple.com/documentation/xcode/notarizing_macos_software_before_distribution/resolving_common_notarization_issues)
486500- [Apple: Using app-specific passwords](https://support.apple.com/en-us/HT204397)
487501- [Notarize FPC](https://github.com/neurolabusc/NotarizeFPC) A script to notarize a command line utility and package it in an installer .pkg file.
488502
489503---
490504*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