Расширение приложения safari падает через несколько секунд для проекта hello world

  1. открыть xcode

  2. файл> новый> проект> Какао приложение

  3. файл> новый> цель> расширение сафари

  4. скомпилируйте и запустите расширение

  5. выберите сафари.

  6. xcode компилируется без ошибок.

Safari открывается на несколько секунд, а затем вылетает.

это вывод окна отладки.

2018-10-10 15: 27: 18.039905-0700 Safari [1020: 16719] [SQLiteStore] Не удалось получить блокировку координации хранилища базы данных в /Users// Библиотека /Safari/Favicon Cache/favicons.db-lock: [35: Ресурс временно недоступно] 2018-10-10 15:27:18.040155-0700 Safari[1020:16719] [SQLiteStore] Не удалось получить эксклюзивный доступ к базе данных в файле:/// Пользователи // Библиотека /Safari/Favicon%20Cache/favicons. дб. 2018-10-10 15:27:18.041141-0700 Safari[1020:16719] [SQLiteStore] Не удалось получить блокировку координации хранилища базы данных в /Users// Библиотека /Safari/Favicon Cache/favicons.db-lock: [35: Ресурс временно недоступно] 2018-10-10 15:27:18.041226-0700 Safari[1020:16719] [SQLiteStore] Не удалось получить эксклюзивный доступ к базе данных в файле:/// Пользователи // Библиотека /Safari/Favicon%20Cache/favicons. дб. 2018-10-10 15:27:18.041331-0700 Safari[1020:16719] [SQLiteStore] Откат к хранилищу в памяти 2018-10-10 15:27:18.042877-0700 Safari[1020:16719] [FaviconPersistence] Использование представления в памяти для базы данных / Пользователи // Библиотека /Safari/Favicon Cache/favicons.db 2018-10-10 15:27:18.125466-0700 Safari[1020:16771] [SQLiteStore] Не удалось получить блокировку координации хранилища базы данных в /Users//Library/Caches/com.apple.Safari/TabSnapshots/Metadata.db-lock: [35: ресурс временно недоступен] 2018-10-10 15:27:18.125660-0700 Safari[1020:16771] [SQLiteStore] Не удалось получить эксклюзивный доступ к базе данных в файле:///Users//Library/Caches/com.apple.Safari/TabSnapshots/Metadata.db. 2018-10-10 15:27:18.235987-0700 Safari[1020:16718] flock не удалось заблокировать файл карт: errno = 35 2018-10-10 15:27:18.236343-0700 Safari[1020:16718] flock не удалось заблокировать файл карт: errno = 35 2018-10-10 15:27:18.293614-0700 Safari[1020:16718] Не удалось получить эксклюзивный доступ к хранилищу исправлений автозаполнения SQLite на AutoFillCorrections.db. Не удалось получить эксклюзивный доступ к хранилищу исправлений автозаполнения SQLite на AutoFillCorrections.db. 2018-10-10 15:27:18.299481-0700 Safari[1020:16718] Не удалось получить эксклюзивный доступ к хранилищу исправлений автозаполнения SQLite на CloudAutoFillCorrections.db. Не удалось получить эксклюзивный доступ к хранилищу исправлений автозаполнения SQLite на CloudAutoFillCorrections.db. 2018-10-10 15:27:18.300530-0700 Safari[1020:16718] Не удалось получить эксклюзивный доступ к хранилищу исправлений автозаполнения SQLite на AutoFillCorrections.db. Не удалось получить эксклюзивный доступ к хранилищу исправлений автозаполнения SQLite на AutoFillCorrections.db. 2018-10-10 15:27:18.304153-0700 Safari[1020:16718] Не удалось получить эксклюзивный доступ к хранилищу исправлений автозаполнения SQLite на CloudAutoFillCorrections.db. Не удалось получить эксклюзивный доступ к хранилищу исправлений автозаполнения SQLite на CloudAutoFillCorrections.db. 2018-10-10 15:27:18.620185-0700 Safari[1020:16763] Не удалось получить эксклюзивный доступ к хранилищу исправлений автозаполнения SQLite на AutoFillCorrections.db. Не удалось получить эксклюзивный доступ к хранилищу исправлений автозаполнения SQLite на AutoFillCorrections.db. 2018-10-10 15:27:18.623032-0700 Safari[1020:16773] [CrowdsourcedAutoFill] Невозможно прочитать наборы исправлений автозаполнения облака, ошибка: Ошибка Domain=NSCocoaErrorDomain Code=260 "Файл не может быть открыт, поскольку он не ' не существует ". 2018-10-10 15:27:18.629453-0700 Safari[1020:16763] Не удалось получить эксклюзивный доступ к хранилищу исправлений автозаполнения SQLite на CloudAutoFillCorrections.db. Не удалось получить эксклюзивный доступ к хранилищу исправлений автозаполнения SQLite на CloudAutoFillCorrections.db. 2018-10-10 15:27:18.675086-0700 Safari[1020:16765] [CloudBookmarks] Ошибка при получении состояния удаленной миграции: Ошибка Domain=com.apple.SafariBookmarksSync.CloudBookmarksErrorDomain Code=0 "(null)" 2018-10-10 15:27:18.771588-0700 Safari[1020:16718] [RemotePlistController] Загруженный plist не может быть загружен: Error Domain=NSCocoaErrorDomain Code=260 "Файл не может быть открыт, потому что он не существует." 2018-10-10 15:27:19.161007-0700 Safari[1020:16773] Не удалось получить эксклюзивный доступ к хранилищу исправлений автозаполнения SQLite на AutoFillCorrections.db. Не удалось получить эксклюзивный доступ к хранилищу исправлений автозаполнения SQLite на AutoFillCorrections.db. 2018-10-10 15:27:19.167933-0700 Safari[1020:16773] Не удалось получить эксклюзивный доступ к хранилищу исправлений автозаполнения SQLite на CloudAutoFillCorrections.db. Не удалось получить эксклюзивный доступ к хранилищу исправлений автозаполнения SQLite на CloudAutoFillCorrections.db. 2018-10-10 15:27:19.279743-0700 Safari[1020:16763] [RemotePlistController] Не удалось загрузить скачанный plist: Ошибка Domain=NSCocoaErrorDomain Code=260 "Файл не может быть открыт, поскольку он не существует ". 2018-10-10 15:27:20.064438-0700 Safari[1020:16763] Не удалось получить эксклюзивный доступ к хранилищу исправлений автозаполнения SQLite на AutoFillCorrections.db. Не удалось получить эксклюзивный доступ к хранилищу исправлений автозаполнения SQLite на AutoFillCorrections.db. 2018-10-10 15:27:20.081337-0700 Safari[1020:16763] Не удалось получить эксклюзивный доступ к хранилищу исправлений автозаполнения SQLite на CloudAutoFillCorrections.db. Не удалось получить эксклюзивный доступ к хранилищу исправлений автозаполнения SQLite на CloudAutoFillCorrections.db. 2018-10-10 15:27:20.084003-0700 Safari[1020:16763] [CrowdsourcedAutoFill] Невозможно открыть ни локальную, ни облачную базы данных коррекции классификации. Программа завершилась с кодом выхода: 0

Я попытался перезагрузить компьютер.

Я пытался очистить проект.

Я пытался удалить метаданные с

xatter -cr .

Я попробовал все три сразу.

1 ответ

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

Чтобы обойти это поведение, вы можете добавить этот фрагмент в свой script.js:

setInterval(() => safari.extension.dispatchMessage("ping", {}), 1000);

Это заставит скрипт содержимого отправлять расширению сообщение с именем "ping" каждую секунду. Этого должно быть достаточно, чтобы ваше расширение работало. Опять же, это действительно необходимо только для отладки, ваша производственная сборка не будет нуждаться в этой строке для надежной работы (отредактировано: это неправда, см. Нижнюю часть сообщения).

Имейте в виду, что по умолчанию скрипты контента внедряются только на страницы *.webkit.org. Это определяется величинойSFSafariToolbarItem свойство в вашем расширении Info.plistфайл. В целях тестирования вы можете включить свое расширение на всех сайтах, например:

<key>SFSafariWebsiteAccess</key>
<dict>
  <key>Level</key>
  <string>All</string>
</dict>

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

ОБНОВИТЬ

Судя по всему, Safari фактически убивает расширения в производственных сборках так же, как и в отладчике. Так что хак setInterval() в этом случае по-прежнему актуален. Это относится только к расширениям без всплывающего окна.

При первом запуске вы должны выбрать цель приложения Какао и только после этого запустить расширение. Пожалуйста, попробуйте сначала скомпилировать и запустить свое приложение и скажите, помогло ли оно.

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