6
  1. 打开xcode

  2. 文件 > 新建 > 项目 > Cocoa 应用程序

  3. 文件 > 新建 > 目标 > Safari 扩展

  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: Resource暂时不可用] 2018-10-10 15:27:18.040155-0700 Safari[1020:16719] [SQLiteStore] 无法在 file:///Users//Library/Safari/Favicon%20Cache/favicon 获取对数据库的独占访问权限。 D b。2018-10-10 15:27:18.041141-0700 Safari[1020:16719] [SQLiteStore] 无法在 /Users//Library/Safari/Favicon Cache/favicons.db-lock: [35: Resource暂时不可用] 2018-10-10 15:27:18.041226-0700 Safari[1020:16719] [SQLiteStore] 无法获得对文件:///Users//Library/Safari/Favicon%20Cache/favicons 的数据库的独占访问权限。 D b。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] 无法在 file:///Users// 获取对数据库的独占访问权限库/缓存/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] 无法获得对 AutoFillCorrections.db 中自动填充更正 SQLite 存储的独占访问权限。无法获得对 AutoFillCorrections.db 上的 AutoFill 更正 SQLite 存储的独占访问权限。2018-10-10 15:27:18.299481-0700 Safari[1020:16718] 无法在 CloudAutoFillCorrections.db 上获得对 AutoFill 更正 SQLite 存储的独占访问权限。无法获得对 CloudAutoFillCorrections.db 中自动填充更正 SQLite 存储的独占访问权限。2018-10-10 15:27:18.300530-0700 Safari[1020:16718] 无法获得对 AutoFillCorrections.db 中自动填充更正 SQLite 存储的独占访问权限。无法获得对 AutoFillCorrections.db 上的 AutoFill 更正 SQLite 存储的独占访问权限。2018-10-10 15:27:18.304153-0700 Safari[1020: 16718] 无法在 CloudAutoFillCorrections.db 上获取对 AutoFill 更正 SQLite 存储的独占访问权限。无法获得对 CloudAutoFillCorrections.db 中自动填充更正 SQLite 存储的独占访问权限。2018-10-10 15:27:18.620185-0700 Safari[1020:16763] 无法获得对 AutoFillCorrections.db 中自动填充更正 SQLite 存储的独占访问权限。无法获得对 AutoFillCorrections.db 上的 AutoFill 更正 SQLite 存储的独占访问权限。2018-10-10 15:27:18.623032-0700 Safari[1020:16773] [CrowdsourcedAutoFill] 无法读取云自动填充校正集,错误:错误域 = NSCocoaErrorDomain 代码 = 260“文件无法打开,因为它没有不存在。” 2018-10-10 15:27:18.629453-0700 Safari[1020: 16763] 无法在 CloudAutoFillCorrections.db 上获取对 AutoFill 更正 SQLite 存储的独占访问权限。无法获得对 CloudAutoFillCorrections.db 中自动填充更正 SQLite 存储的独占访问权限。2018-10-10 15:27:18.675086-0700 Safari[1020:16765] [CloudBookmarks] 获取远程迁移状态时出错:Error Domain=com.apple.SafariBookmarksSync.CloudBookmarksErrorDomain Code=0 "(null)" 2018-10-10 15:27:18.771588-0700 Safari[1020:16718] [RemotePlistController] 下载的 plist 无法加载:错误 Domain=NSCocoaErrorDomain Code=260“无法打开该文件,因为它不存在。” 2018-10-10 15:27:19.161007-0700 Safari[1020:16773] 无法获得对 AutoFillCorrections.db 中自动填充更正 SQLite 存储的独占访问权限。无法获得对 AutoFillCorrections.db 上的 AutoFill 更正 SQLite 存储的独占访问权限。2018-10-10 15:27:19.167933-0700 Safari[1020:16773] 无法在 CloudAutoFillCorrections.db 上获得对 AutoFill 更正 SQLite 存储的独占访问权限。无法获得对 CloudAutoFillCorrections.db 中自动填充更正 SQLite 存储的独占访问权限。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 中自动填充更正 SQLite 存储的独占访问权限。无法获得对 AutoFillCorrections.db 上的 AutoFill 更正 SQLite 存储的独占访问权限。2018-10-10 15:27:20.081337-0700 Safari[1020:16763] 无法在 CloudAutoFillCorrections.db 上获得对 AutoFill 更正 SQLite 存储的独占访问权限。无法获得对 CloudAutoFillCorrections.db 中自动填充更正 SQLite 存储的独占访问权限。2018-10-10 15:27:20.084003-0700 Safari[1020:16763] [CrowdsourcedAutoFill] 本地和云分类校正数据库都无法打开程序以退出代码结束:0

我试过重新启动我的电脑。

我试过清理项目。

我试过删除元数据

xatter -cr .

我已经同时尝试了所有三个。

4

2 回答 2

3

如果 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() hack 在这种情况下仍然是相关的。这仅适用于没有弹出框的扩展。

于 2019-06-24T09:18:19.183 回答
2

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

于 2018-11-01T16:39:55.337 回答