Wails 是一个可以让您使用 Go 和 Web 技术编写桌面应用的项目。最近在 MacOS 下开发 AsBot客户端 时,开发模式一切正常,但编译打包后发现 cookies 无法使用。

在此之前我已经将 Windows 客户端打包好了,不存在此问题。看起来像是一个 bug。目前已向作者反馈问题,并等待作者进一步确认。

调试Wails

根据Wails的官方:构建命令 中的提示,可以在打包的时候加入-debug参数,在应用程序中保留调试信息。 允许在应用程序窗口中使用 devtools。

完整的打包命令为:

wails build -debug

这样,可以在打包后的文件中继续使用浏览器调试模式来分析排查(生产上不建议添加-debug参数)。

问题复现

项目中使用了vue3-cookies这个库,一开始以为是这个库的问题,于是我改用js原生方法:

document.cookie = "username=John Doe; expires=" + new Date(new Date().getTime() + (24 * 60 * 60 * 1000)).toUTCString() + "; path=/";

发现依然存在以下现象(表现在MacOS下):

  • wails dev开发者模式下一切正常,cookie设置成功
  • wails build编译后的包,cookies无法设置和存储,也没有抛出错误

Wails环境和版本信息

出现这个BUG的环境信息如下:

Wails CLI v2.4.1

Scanning system - Please wait (this may take a long time)...Done.

# System

OS           | MacOS   
Version      | 13.3.1  
ID           | 22E261  
Go Version   | go1.20.3
Platform     | darwin  
Architecture | amd64   

# Wails

Version | v2.4.1

# Dependencies

Dependency                | Package Name | Status    | Version  
Xcode command line tools  | N/A          | Installed | 2397     
npm                       | N/A          | Installed | 9.5.0    
*Xcode                    | N/A          | Available |          
*upx                      | N/A          | Installed | upx 4.0.2
*nsis                     | N/A          | Available |          
* - Optional Dependency

问题反馈

于是在给作者的项目提出了issues,见:https://github.com/wailsapp/wails/issues/2590

目前作者还未给出明确的答复,我也没搞清楚具体原因。

问题规避和解决

我暂时放弃了使用Cookies的方案,改用浏览器自带的属性 localStorage 来解决。相对于Cookies,localStorage 使用更加简单,但是却不如Cookies方案灵活和安全。例如,localStorage 无法设置过期时间,也无法设置类似Cookies的 HttpOnly

localStorage的使用可以参考:Window localStorage 属性

结语

总的来说,如果您熟悉Golang和前端,Wails 是一个不错的桌面应用开发工具,但是在使用过程中可能会遇到一些问题,比如MacOS下无法设置cookies的问题,我们可以改用 localStorage 来解决。希望本文能对 Wails 开发者有所帮助。

文章首发于我的独立博客:https://blog.xiaoz.org/archives/18539

xiaoz
60 声望1 粉丝

自由职业者,热爱开源,擅长PHP、Golang、Linux运维、Docker等技术,喜欢折腾各种软件和电子数码产品。