Safari应用扩展程序在Hello World项目几秒钟后崩溃

时间:2018-10-10 22:33:58

标签: swift xcode safari safari-app-extension

  1. 打开xcode

  2. 文件>新>项目>可可应用

  3. 文件>新建>目标>野生动物园扩展名

  4. 编译并运行扩展

  5. 选择野生动物园。

  6. xcode编译没有错误。

Safari打开几秒钟,然后崩溃。

这是调试窗口的输出。

  

2018-10-10 15:27:18.039905-0700 Safari [1020:16719] [SQLiteStore]   无法在处获取数据库存储协调锁定   / Users // Library / Safari / Favicon Cache / favicons.db-lock:   [35:资源暂时不可用] 2018-10-10 15:27:18.040155-0700   Safari [1020:16719] [SQLiteStore]无法获得对的独占访问权   数据库位于   文件:///Users//Library/Safari/Favicon%20Cache/favicons.db。   2018-10-10 15:27:18.041141-0700 Safari [1020:16719] [SQLiteStore]   无法在处获取数据库存储协调锁定   / Users // Library / Safari / Favicon Cache / favicons.db-lock:   [35:资源暂时不可用] 2018-10-10 15:27:18.041226-0700   Safari [1020:16719] [SQLiteStore]无法获得对的独占访问权   数据库位于   文件:///Users//Library/Safari/Favicon%20Cache/favicons.db。   2018-10-10 15:27:18.041331-0700 Safari [1020:16719] [SQLiteStore]   退回到内存店2018-10-10 15:27:18.042877-0700   Safari [1020:16719] [FaviconPersistence]使用内存表示   用于数据库/ Users // Library / 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]群失败   锁映射文件:errno = 35 2018-10-10 15:27:18.236343-0700   Safari [1020:16718]群无法锁定地图文件: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代码= 260“无法打开文件   因为它不存在。“ 2018-10-10 15:27:18.629453-0700   Safari [1020:16763]无法获得对自动填充的独占访问权   更正SQLite存储在CloudAutoFillCorrections.db中。失败   在以下位置获得对AutoFill更正SQLite存储的专有访问权   CloudAutoFillCorrections.db。 2018-10-10 15:27:18.675086-0700   Safari [1020:16765] [CloudBookmarks]获取远程迁移时出错   状态:错误   Domain = com.apple.SafariBookmarksSync.CloudBookmarksErrorDomain代码= 0   “(空)” 2018-10-10 15:27:18.771588-0700 Safari [1020:16718]   [RemotePlistController]无法加载下载的plist:   Error Domain = NSCocoaErrorDomain代码= 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中。失败   在以下位置获得对AutoFill更正SQLite存储的独占访问权   CloudAutoFillCorrections.db。 2018-10-10 15:27:19.279743-0700   Safari [1020:16763] [RemotePlistController]下载的plist可以   无法加载:错误域= NSCocoaErrorDomain代码= 260“该文件   无法打开,因为它不存在。“ 2018-10-10   15:27:20.064438-0700 Safari [1020:16763]无法获取独家   访问AutoFillCorrections.db中的AutoFill更正SQLite存储。   无法获得对自动填充更正SQLite的独占访问权   存储在AutoFillCorrections.db。 2018-10-10 15:27:20.081337-0700   Safari [1020:16763]无法获得对自动填充的独占访问权   更正SQLite存储在CloudAutoFillCorrections.db中。失败   在以下位置获得对AutoFill更正SQLite存储的独占访问权   CloudAutoFillCorrections.db。 2018-10-10 15:27:20.084003-0700   Safari [1020:16763] [CrowdsourcedAutoFill]既不是本地也不是云   可以打开分类更正数据库程序以   退出代码:0

我尝试重新启动计算机。

我尝试清理项目。

我尝试使用

删除元数据
xatter -cr .

我一次尝试了所有三个。

2 个答案:

答案 0 :(得分:1)

在第一次运行时,您应该选择您的Cocoa App目标,并且仅在此后运行扩展。请先尝试构建并运行您的应用,然后说是否有帮助。

答案 1 :(得分:1)

如果Xcode调试器未收到来自内容脚本的任何事件,则倾向于终止扩展过程。根据我的观察,这是完全可以的,并且在生产中,您的应用程序不会那么容易死掉。

要避免这种行为,您可能需要将此代码段添加到您的script.js

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

它将使内容脚本每秒向扩展名发送一条名为“ ping”的消息。这应该足以使您的扩展存活。同样,这只是调试真正需要的,您的生产版本不需要此行可靠地工作。

请记住,默认情况下,内容脚本仅注入* .webkit.org页面。这由扩展程序的SFSafariToolbarItem文件中Info.plist属性的值确定。为了进行测试,您可能希望在所有网站上启用扩展程序,如下所示:

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

请注意,内容脚本不会注入到空白标签中,因此请确保加载一些远程页面。