Расширение приложения safari падает через несколько секунд для проекта hello world
открыть xcode
файл> новый> проект> Какао приложение
файл> новый> цель> расширение сафари
скомпилируйте и запустите расширение
выберите сафари.
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() в этом случае по-прежнему актуален. Это относится только к расширениям без всплывающего окна.
При первом запуске вы должны выбрать цель приложения Какао и только после этого запустить расширение. Пожалуйста, попробуйте сначала скомпилировать и запустить свое приложение и скажите, помогло ли оно.