Sign in Join
Wiki copytemporary

Notarization for macOS 10.14.5+/ru: what changed

Revision 1 to 2. 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<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)
1616
1717## Требования к нотариальному заверению
1818
1919Для нотариального заверения требуются инструменты командной строки Xcode от Xcode 10 или новее. Для создания нового приложения для нотариального заверения требуется macOS 10.13.6 или новее. Для прикрепления приложения требуется macOS 10.12 или новее.
2020
2121Нотариальная служба Apple требует от вас:
2222
2323- Включения подписывания кода для всех распространяемых вами исполняемых файлов.
2424- Включения возможности заверения через [[Hardened runtime for macOS|Hardened Runtime]] для вашего приложения и целей командной строки.
2525- Использования приложения «Developer ID», расширения ядра или сертификата установщика для подписи кода.
2626- Включения безопасной метки времени в свою подпись для подписи кода (включения параметра --timestamp при запуске инструмента кодовой подписи).
2727- Не включать право 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).
2828- Ссылки на SDK для macOS 10.9 или новее.
2929
30303 сентября 2019 года Apple объявила, что до января 2020 года разработчики могут нотариально заверить новые версии приложений, даже если они не были заверены через [[Hardened runtime for macOS|hardened]] или полностью соответствуют обычным требованиям. **Позднее этот срок был продлен до 3 февраля 2020 года. Вышеуказанные требования к нотариальному удостоверению теперь действуют в полной мере.**
3131
3232### Заявление Apple от 23 декабря 2019 г.
3333
3434В июне мы объявили, что все программное обеспечение Mac, распространяемое за пределами Mac App Store, должно быть нотариально заверено Apple, чтобы оно могло работать по умолчанию на macOS Catalina. В сентябре мы временно скорректировали предварительные условия нотариального заверения, чтобы упростить этот переход и защитить пользователей macOS Catalina, которые продолжают использовать более старые версии программного обеспечения. Начиная с 3 февраля 2020 года, все представленное программное обеспечение должно соответствовать предварительным требованиям для нотариального заверения.
3535
3636Если вы еще не сделали этого, загрузите программное обеспечение в нотариальную службу и просмотрите журнал разработчика на наличие предупреждений. Эти предупреждения станут ошибками с 3 февраля и должны быть исправлены, чтобы ваше программное обеспечение было нотариально заверенным. Программное обеспечение, нотариально заверенное до 3 февраля, по умолчанию будет продолжать работать на macOS Catalina.
3737
3838Напоминаем, что все пакеты установщика должны быть подписаны, поскольку они могут содержать исполняемый код. Образы дисков не нужно подписывать, хотя их подписание может помочь вашим пользователям проверить их содержимое.
3939
4040## Нотариальное заверение заявки
4141
4242В этих инструкциях предполагается, что вы выполнили другие подготовительные шаги: [[Code Signing for macOS|подписание кода]] приложения, реализованное в [[Hardened runtime for macOS|усиленной среде выполнения]], [[Code Signing for macOS|подписание кода]] установщика pkg (если он у вас есть) и т.д.
4343
4444Вы не можете выгрузить пакет .app непосредственно в нотариальную службу, вам необходимо создать сжатый архив, содержащий приложение, или вы можете поместить приложения, расширения ядра и другое программное обеспечение в контейнер, например образ диска, и нотариально заверить контейнер. Нотариальная служба принимает образы дисков (формат UDIF), подписанный установщиком плоских пакетов, и ZIP-архивы. Он также обрабатывает вложенные контейнеры, например пакеты внутри образа диска.
4545
4646### Шаг 1 - Создание образа диска
4747
4848Создайте образ диска, открыв Терминал и выполнив следующую команду:
4949
5050``` bash
5151hdiutil create -volname MyApp -srcfolder /path/to/folder -ov -format UDBZ MyApp.dmg
5252```
5353
5454### Шаг 2 - Код для подписи образа диска
5555
5656Код подписывает образ диска, открыв Терминал и выполнив следующую команду:
5757
5858``` bash
5959codesign -s "Developer ID Application: Your Name (Team ID)" --timestamp MyApp.dmg
6060```
6161
6262### Шаг 3. Создание пароля для конкретного приложения
6363
6464Чтобы сгенерировать пароль для конкретного приложения, обратитесь к этой [статье службы поддержки Apple](https://support.apple.com/en-us/HT204397).
6565
6666> **Note:** это пароль, который будет специфическим для приложения нотариального заверения (xcrun altool), а не для нотариально заверенного приложения. Поэтому вам нужно сделать это только один раз, но убедитесь, что вы скопировали сгенерированный пароль и сохранили его где-нибудь.
6767
68-\
69-
7068> **Tip:** Сохраните пароль в связке ключей с помощью:\
7169> `xcrun altool -u "<your email>" -p "<app-specific pwd>" --store-password-in-keychain-item "<name for pwd>"`\
7270> \
7371> А затем вы можете использовать `"@keychain:<name for pwd>"` вместо `"<app-specific pwd>"` в следующих командах.
7472
7573### Шаг 4 - Загрузка образа диска в нотариальную службу
7674
7775> **Note:** Когда вы нотариально заверяете образ диска контейнера, altool также нотариально заверяет приложение внутри, поэтому вы можете пропустить этап нотариального заверения самого приложения.
7876
7977Загрузите файл образа диска в нотариальную службу Apple, открыв Терминал и выполнив следующую команду:
8078
8179``` bash
8280xcrun altool --notarize-app --primary-bundle-id "<your identifier>" -u "<your email>" -p "<app-specific pwd>" -t osx -f /path/to/MyApp.dmg
8381```
8482
8583*primary-bundle-id* помогает отслеживать автоматическую корреспонденцию от службы нотариального заверения. Указанное вами значение не обязательно должно совпадать с идентификатором пакета отправленного приложения или иметь какое-либо конкретное значение. Это должно иметь смысл только для вас. Служба нотариального заверения включает значение всякий раз, когда она отправляет вам электронное письмо относительно данного `altool` представления.
8684
8785Если загрузка прошла успешно, вы должны получить следующий результат:
8886
8987 No errors uploading 'MyApp.dmg'.
9088 RequestUUID = 3af4e56f-162b-75bc-827f-7233f92bf20c
9189
9290### Шаг 5 - Проверка процесса нотариального заверения
9391
9492Процесс нотариального заверения обычно занимает менее часа, поэтому вы можете время от времени проверять его ход, открывая Терминал и выполняя следующую команду:
9593
9694``` bash
9795xcrun altool --notarization-history 0 -u "<your email>" -p "<app-specific pwd>"
9896```
9997
10098Когда процесс нотариального заверения завершится успешно, вышеуказанная команда вернет информацию, подобную следующей:
10199
102100 Notarization History - page 0
103101
104102 Date RequestUUID Status Status Code Status Message
105103 ------------------------- ------------------------------------ ------- ----------- ----------------
106104 2019-12-08 06:24:03 +0000 3af4e56f-162b-75bc-827f-7233f92bf20c success 0 Package Approved
107105
108106 Next page value: 1575786243000
109107
110108Вы также должны получить электронное письмо от Apple, подобное приведенному ниже, в случае успешного нотариального заверения:
111109
112110 Dear <First_Name>,
113111
114112 Your Mac software has been notarized. You can now export this software and distribute it directly to users.(rus: Программное обеспечение вашего Mac было нотариально заверено. Теперь вы можете экспортировать это программное обеспечение и распространять его непосредственно среди пользователей.)
115113
116114 Bundle Identifier: com.example.MyApp.001
117115 Request Identifier: 3af4e56f-162b-75bc-827f-7233f92bf20c
118116
119117 For details on exporting a notarized app, visit Xcode Help or the notarization guide.(rus: Для получения дополнительных сведений об экспорте нотариально заверенного приложения посетите справку Xcode или руководство по нотариальному заверению.)
120118
121119 Best Regards,
122120 Apple Developer Relations
123121
124122### Шаг 6 - Прикрепление удостоверения к образу диска
125123
126124В процессе нотариального заверения создается удостоверение, которое сообщает Gatekeeper, что ваше приложение нотариально заверено. После успешного завершения нотариального заверения в следующий раз, когда любой пользователь попытается запустить ваше приложение в macOS 10.14 или более поздней версии, Gatekeeper найдет удостоверение в Интернете. Сюда входят пользователи, которые загрузили ваше приложение до нотариального заверения.
127125
128126После того, как на шаге 5 будет получено сообщение о статусе «Пакет одобрен», вы также должны прикрепить удостоверение к файлу образа диска с помощью инструмента прикрепления, чтобы в будущие дистрибутивы включили билет. Это гарантирует, что Gatekeeper сможет найти удостоверение, даже если сетевое соединение недоступно.
129127
130128Чтобы прикрепить удостоверение к файлу образа диска, откройте Терминал и выполните следующую команду:
131129
132130``` bash
133131xcrun stapler staple /path/to/MyApp.dmg
134132```
135133
136134Если команда завершится успешно, вывод должен быть похож на:
137135
138136 Processing: /Path/to/MyApp.dmg
139137 Processing: /Path/to/MyApp.dmg
140138 The staple and validate action worked!
141139
142140### Шаг 7 - Подтверждение нотариального заверения образа диска
143141
144142Чтобы подтвердить нотариальное заверение образа диска, откройте Терминал и выполните следующую команду:
145143
146144``` bash
147145spctl -a -vv -t install MyApp.dmg
148146```
149147
150148Успешная проверка процесса нотариального заверения должна привести к примерно следующему результату:
151149
152150 MyApp.dmg: accepted
153151 source=Notarized Developer ID
154152 origin=Developer ID Application: <Developer Name> (<TEAM_ID>)
155153
156154### Шаг 8 - Подтвердить нотариальное заверение приложения
157155
158156Чтобы подтвердить нотариальное заверение приложения, установите приложение, откройте Терминал и выполните следующую команду:
159157
160158``` bash
161159spctl -a -vv /Applications/MyApp.app
162160```
163161
164162Успешное подтверждение процесса нотариального заверения должна привести к примерно следующему результату:
165163
166164 /Applications/MyApp.app: accepted
167165 source=Notarized Developer ID
168166 origin=Developer ID Application: <Developer Name> (<TEAM_ID>)
169167
170168**Важно:** протестируйте приложение, поместив его в каталог Applications. Оно по-разному обрабатывается Gatekeeper'ом, когда находится в "установленном" месте.
171169
172170В качестве альтернативы, рекомендуемый Apple способ проверить нотариальное заверение приложения - открыть Терминал и выполнить следующую команду:
173171
174172 xcrun stapler validate MyApp.app
175173
176174Успешная верификация процесса нотариального заверения должна привести к примерно следующему результату:
177175
178176 Processing: MyApp.app
179177 The validate action worked!
180178
181179## Нотариальное заверение инструмента командной строки
182180
183181Инструменты командной строки могут быть подписаны кодом, но их нелегко нотариально заверить, потому что у них нет [[Application Bundle]] и отдельного `Info.plist` [[macOS property list files|property list file]]. Вы можете относительно легко вставить файл `Info.plist` в исполняемый файл инструмента командной строки.
184182
185183### Вставка Info.plist в исполняемый файл командной строки
186184
187185Вот шаблон, который вы можете настроить для своей утилиты командной строки. Я извлек его из исполняемого файла утилиты командной строки, написанного на C и названного "simplereach", который я создал с помощью Xcode 11.3.1 в Mojave после включения "Create Info.plist Section in Binary"(Создать раздел Info.plist в двоичном формате) в параметрах "Packaging"(Упаковка) (я пропустил ненужные Xcode-related build info).
188186
189187``` xml
190188<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
191189<plist version="1.0">
192190<dict>
193191 <key>BuildMachineOSBuild</key>
194192 <string>18G8022</string>
195193 <key>CFBundleDevelopmentRegion</key>
196194 <string>English</string>
197195 <key>CFBundleDocumentTypes</key>
198196 <array>
199197 <dict>
200198 <key>CFBundleTypeOSTypes</key>
201199 <array>
202200 <string>fold</string>
203201 <string>disk</string>
204202 <string>****</string>
205203 </array>
206204 </dict>
207205 </array>
208206 <key>CFBundleExecutable</key>
209207 <string>simplereach</string>
210208 <key>CFBundleIdentifier</key>
211209 <string>com.mycompany.simplereach</string>
212210 <key>CFBundleInfoDictionaryVersion</key>
213211 <string>6.0</string>
214212 <key>CFBundleName</key>
215213 <string>simplereach</string>
216214 <key>CFBundlePackageType</key>
217215 <string>APPL</string>
218216 <key>CFBundleShortVersionString</key>
219217 <string>1.0</string>
220218 <key>CFBundleSupportedPlatforms</key>
221219 <array>
222220 <string>MacOSX</string>
223221 </array>
224222 <key>CFBundleVersion</key>
225223 <string>1</string>
226224 <key>LSMinimumSystemVersion</key>
227225 <string>10.14</string>
228226</dict>
229227</plist>
230228```
231229
232230Вам нужно будет изменить несколько ключевых строк в приведенном выше файле. Замените свой:
233231
234232- **BuildMachineOSBuild** строку можно получить из Терминала с помощью команды `sw_vers`. '18G8022' предназначена строго для Mojave 10.14.6.
235233- **CFBundleDevelopmentRegion** строка, если она не "английская".
236234- **CFBundleExecutable** строка с названием вашей утилиты.
237235- **CFBundleIdentifier** строка (обычно ваше доменное имя в обратном порядке, за которым следует имя утилиты; не стесняйтесь использовать что-нибудь уникальное).
238236- **CFBundleName** строка (используйте то же значение, что и для CFBundleExecutable).
239237- **CFBundleShortVersionString** строка с номером вашей версии.
240238- **LSMinimumSystemVersion** строка с минимальной версией macOS, на которой будет работать ваша утилита.
241239
242240Затем вы можете вставить файл `Info.plist` в свое приложение, указав компоновщику добавить его как раздел __TEXT с именем __info_plist:
243241
244242`fpc -k"-sectcreate __TEXT __info_plist Info.plist" my_utility.pas`
245243
246244Чтобы проверить, успешно ли он вставлен, вы можете запустить следующую команду в Терминале:
247245
248246`otool -X -v -s __TEXT __info_plist my_utility`
249247
250248### Подпись исполняемого файла командной строки
251249
252250Теперь, когда файл `Info.plist` был вставлен в исполняемый файл, вы готовы подписать его кодом, выполнив следующие команды в Терминале:
253251
254252`cd /path/to/my_utility`\
255253`mkdir bin`\
256254`mv my_utility bin/`\
257255`codesign -f --strict --timestamp --options=runtime -s "Developer ID Application: YOUR NAME (TEAM_ID)" bin/my_utility`
258256
259257*Критично*, чтобы вы создали каталог `bin` и переместили в него свою утилиту перед подписанием. В противном случае создастся каталог `_CodeSignature`, который не подойдет для утилиты командной строки, и процесс нотариального заверения не состоится.
260258
261259Чтобы убедиться, что ваши усилия увенчались успехом, вы можете запустить следующую команду в Терминале:
262260
263261`codesign -vv bin/my_utility`
264262
265263Если подписание кода прошло успешно, результат должен быть примерно таким:
266264
267265`my_utility: valid on disk`\
268266`my_utility: satisfies its Designated Requirement`
269267
270268### Отправка исполняемого файла командной строки на нотариальное заверение
271269
272270Поскольку вы не можете нотариально заверить пустой исполняемый файл, вам необходимо включить его в контейнер (.dmg - образ диска, .pkg - пакет установщика или файл архива ZIP). ZIP-архив является самым простым, поэтому в Терминале выполните следующую команду:
273271
274272`zip my_utility.zip bin/my_utility`
275273
276274Теперь вы готовы загрузить свою утилиту командной строки на серверы Apple для нотариального заверения. В терминале выполните следующую команду:
277275
278276`xcrun altool --notarize-app --primary-bundle-id "<your identifier>" -u "<your email>" -p "<app-specific pwd>" -t osx -f my_utility.zip`
279277
280278Если у вас еще нет пароля для приложения, см. [[Notarization for macOS 10.14.5+/ru|выше]], чтобы узнать, как его сгенерировать.
281279
282280*Primary-bundle-id* помогает отслеживать автоматическую корреспонденцию от службы нотариального заверения. Указанное вами значение не обязательно должно совпадать с идентификатором пакета отправленного приложения или иметь какое-либо конкретное значение. Это должно иметь смысл только для вас. Услуга нотариального заверения включает значение всякий раз, когда она отправляет вам электронное письмо относительно данной альтернативной заявки.
283281
284282Если загрузка прошла успешно, вы должны получить следующий результат:
285283
286284`No errors uploading 'my_utility'.`\
287285`RequestUUID = 3af4e56f-162b-75bc-827f-7233f92bf20c`
288286
289287### Проверка процесса нотариального заверения
290288
291289Процесс нотариального заверения обычно занимает от 10 до 15 минут, поэтому вы можете время от времени проверять его ход, выполняя следующую команду из Терминала:
292290
293291`xcrun altool --notarization-history 0 -u "<your email>" -p "<app-specific pwd>"`
294292
295293Когда процесс нотариального заверения завершится успешно, вышеуказанная команда вернет информацию, подобную следующей:
296294
297295 Notarization History - page 0
298296
299297 Date RequestUUID Status Status Code Status Message
300298 ------------------------- ------------------------------------ ------- ----------- ----------------
301299 2021-04-22 10:55:03 +0000 3af4e56f-162b-76bc-826f-7263f92bf20c success 0 Package Approved
302300
303301 Next page value: 1575786243000
304302
305303Вы также должны получить электронное письмо от Apple, подобное приведенному ниже, в случае успешного нотариального заверения:
306304
307305 Dear <First Name>,
308306
309307 Your Mac software has been notarized. You can now export this software and distribute it directly to users.(rus: Программное обеспечение вашего Mac было нотариально заверено. Теперь вы можете экспортировать это программное обеспечение и распространять его непосредственно среди пользователей.)
310308
311309 Bundle Identifier:
312310 Request Identifier: 70dbe301-d3a7-4931-9ec3-61c5cc80573c
313311
314312 For details on exporting a notarized app, visit Xcode Help or the notarization guide.(rus: Для получения дополнительных сведений об экспорте нотариально заверенного приложения посетите справку Xcode или руководство по нотариальному заверению.)
315313
316314 Best Regards,
317315 Apple Developer Relations
318316
319317В случае неудачного нотариального заверения обратитесь за помощью к разделу [[Notarization for macOS 10.14.5+/ru|Устранение неполадок]] ниже.
320318
321319### Нотариальное заверение исполняемого файла командной строки
322320
323321Чтобы проверить нотариальное заверение инструмента командной строки, откройте Терминал и выполните следующую команду:
324322
325323`spctl -a -t open --context context:primary-signature -vv my_utility `
326324
327325Успешная проверка правильно нотариально заверенного исполняемого файла командной строки должна привести к выводу, подобному следующему:
328326
329327`my_utility: accepted`\
330328`source=Notarized Developer ID`\
331329`origin=Developer ID Application: Your Name (Z9HBGNDZZ9)`
332330
333331## Устранение неполадок
334332
335333### Процесс загрузки нотариального заверения
336334
337335Если процесс загрузки нотариального заверения не проходит должным образом, вы сможете найти сжатый файл журнала во временном каталоге, который может пролить свет на то, что произошло. Вы можете просмотреть его, открыв Терминал и выполнив следующие команды (замените имя вашего файла журнала, который включает идентификатор пакета вашего приложения):
338336
339337``` bash
340338 cd ${TMPDIR}
341339 gzcat c51ca05f-cf49-405f-be57-26873faab5f6_3073718126753816760org.sentry.myapp-20191231004646-273.itmsp6022059143057318377.log
342340```
343341
344342который для успешной загрузки нотариального заверения должен выглядеть примерно так:
345343
346344` [2019-12-31 19:46:46 AEDT] <main>  INFO: Starting upload for packageName: org.sentry.myapp-20191231004646-273.itmsp`\
347345` [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}`\
348346` [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)`\
349347` [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)`\
350348` [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`\
351349` [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`\
352350` [2019-12-31 19:46:47 AEDT] <RLT-002>  INFO: Finished part upload for: (metadata.xml/1) 2.91 KB/s in 0 seconds`\
353351` [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)`\
354352` [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)`\
355353` [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`\
356354` [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)`\
357355` [2019-12-31 19:46:49 AEDT] <main>  INFO: Waiting on reservation commit(s) to finish.`\
358356` [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)`\
359357` [2019-12-31 19:46:49 AEDT] <pool-8-thread-1>  INFO: All reservation commit(s) finished.`\
360358` [2019-12-31 19:46:49 AEDT] <main>  INFO: 456.36 KB/s in 3 seconds`
361359
362360### Сбои в процессе нотариального заверения
363361
364362Если при проверке вы обнаружите, что процесс нотариального заверения не удался. Например:
365363
366364 Date RequestUUID Status Status Code Status Message
367365 ------------------------- ------------------------------------ ------- ----------- ----------------
368366 2020-02-29 13:54:08 +0000 fa2e5d79-cba0-469d-bb27-859a8f081821 invalid 2 Package Invalid
369367
370368Вы можете получить URL-адрес файла журнала нотариального заверения с помощью команды:
371369
372370``` bash
373371xcrun altool --notarization-info <RequestUUID> -u "<your email>" -p "<app-specific pwd>"
374372```
375373
376374который должен дать информацию, подобную следующей:
377375
378376 No errors getting notarization info.
379377
380378 Date: 2020-02-29 13:54:08 +0000
381379 Hash: 1b08ea5cdf97eb6fed9b959a549d4b325eb5e90f16538139a29a83f75609d87b
382380 LogFileURL: https://osxapps-ssl.itunes.apple.com/itunes-assets/[...]
383381 RequestUUID: fa2e5d79-cba0-469d-bb27-859a8f081821
384382 Status: invalid
385383 Status Code: 2
386384 Status Message: Package Invalid
387385
388386Затем вы можете вырезать и вставить LogFileURL в свой веб-браузер и получить файл журнала процесса нотариального заверения, который будет выглядеть примерно так:
389387
390388``` json
391389{
392390 "logFormatVersion": 1,
393391 "jobId": "fa2e5d79-cba0-469d-bb27-859a8f081821",
394392 "status": "Invalid",
395393 "statusSummary": "Archive contains critical validation errors",
396394 "statusCode": 4000,
397395 "archiveFilename": "test.dmg",
398396 "uploadDate": "2020-02-29T13:54:08Z",
399397 "sha256": "1b08ea5cdf97eb6fed9b959a549d4b325eb5e90f16538139a29a83f75609d87b",
400398 "ticketContents": null,
401399 "issues": [
402400 {
403401 "severity": "error",
404402 "code": null,
405403 "path": "test.dmg/MyApp.app/Contents/MacOS/MyApp",
406404 "message": "The executable does not have the hardened runtime enabled.",
407405 "docUrl": null,
408406 "architecture": "x86_64"
409407 }
410408 ]
411409}
412410```
413411
414412В приведенном выше случае сбоя это произошло из-за того, что исполняемый файл не был [[Hardened runtime for macOS|с подписанной защитой]].
415413
416414Также стоит упомянуть, что *всегда* стоит извлекать файл журнала нотариального заверения для проверки предупреждений, которые еще не являются ошибками, чтобы вы могли исправить их до того, как они станут ошибками, препятствующими успешному нотариальному заверению.
417415
418416Вот пример протокола процесса нотариального заверения после успешного нотариального заверения:
419417
420418``` json
421419{
422420 "logFormatVersion": 1,
423421 "jobId": "fa2e5d79-cba0-469d-bb27-859a8f081822",
424422 "status": "Accepted",
425423 "statusSummary": "Ready for distribution",
426424 "statusCode": 0,
427425 "archiveFilename": "test.dmg",
428426 "uploadDate": "2020-03-01T01:50:55Z",
429427 "sha256": "1945554c24da3bb1d587b7c9f968dcbb925b726f2f663b816301928c06593dd9",
430428 "ticketContents": [
431429 {
432430 "path": "test.dmg",
433431 "digestAlgorithm": "SHA-256",
434432 "cdhash": "1d4d033edbecc2baf7ff8ce0fa16691be990595f"
435433 },
436434 {
437435 "path": "test.dmg/MyApp.app",
438436 "digestAlgorithm": "SHA-256",
439437 "cdhash": "7f9d54e76f25807e2b425a09684aa8cb54dcd17f",
440438 "arch": "x86_64"
441439 },
442440 {
443441 "path": "test.dmg/MyApp.app/Contents/MacOS/MyApp",
444442 "digestAlgorithm": "SHA-256",
445443 "cdhash": "7f9d54e762c7907e2b425a09684aa8cb54dcd17f",
446444 "arch": "x86_64"
447445 },
448446 {
449447 "path": "test.dmg/MyApp.app/Contents/Resources/MyApp.help",
450448 "digestAlgorithm": "SHA-256",
451449 "cdhash": "b544a32a216578e7805ca93b968377cdd92f7ec6",
452450 "arch": "i386"
453451 },
454452 {
455453 "path": "test.dmg/MyApp.app/Contents/Resources/MyApp.help",
456454 "digestAlgorithm": "SHA-256",
457455 "cdhash": "b544a32a216578e7805ca93b968377cdd92f7ec6",
458456 "arch": "x86_64"
459457 },
460458 {
461459 "path": "test.dmg/MyApp.app/Contents/Resources/MyApp.help",
462460 "digestAlgorithm": "SHA-256",
463461 "cdhash": "b544a32a216578e7805ca93b968377cdd92f7ec6",
464462 "arch": "x86_64h"
465463 }
466464 ],
467465 "issues": null
468466}
469467```
470468
471469### Сбои при проверке нотариального заверения
472470
473471Если процесс нотариального заверения прошел успешно, но вы получили сбой при проверке успешности нотариального заверения, вы можете использовать `Console.app` для проверки файлов журнала на предмет информации об отклонении (после попытки запустить заблокированное приложение). Имейте в виду, что вы должны открыть `Console.app` *перед* попыткой открыть ваше `Console.app`, иначе не все сообщения могут быть зарегистрированы. Вы должны выбрать свое устройство на левой боковой панели `Console.app` и проверить в журналах процесс **XprotectService**.
474472
475473## См.также
476474
477475- [[Apple Developer Certificates]]
478476- [[Code Signing for macOS]]
479477- [[Hardened runtime for macOS]]
480478- [[Signing and Notarization FAQ]]
481479
482480## Внешние ссылки
483481
484482- [Apple: Notarizing your app before distribution](https://developer.apple.com/documentation/security/notarizing_your_app_before_distribution)
485483- [Apple: Notarizing macOS Software Before Distribution](https://developer.apple.com/documentation/xcode/notarizing_macos_software_before_distribution)
486484- [Apple: Customizing the Notarization Workflow](https://developer.apple.com/documentation/xcode/notarizing_macos_software_before_distribution/customizing_the_notarization_workflow)
487485- [Apple: Common notarization issues](https://developer.apple.com/documentation/xcode/notarizing_macos_software_before_distribution/resolving_common_notarization_issues)
488486- [Apple: Using app-specific passwords](https://support.apple.com/en-us/HT204397)
489487- [Notarize FPC](https://github.com/neurolabusc/NotarizeFPC) A script to notarize a command line utility and package it in an installer .pkg file.
490488
491489---
492490*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