# 故障排除

各种故障排除技巧。

## `wails` 命令好像不见了？

如果您的系统报告缺少 `wails` 命令，请确保您已正确遵循 Go 安装指南。 通常，这意味着您的用户 home 目录中的 `go/bin` 目录不在 `PATH` 环境变量中。 通常情况下还需要关闭并重新打开任何已打开的命令提示符，以便安装程序对环境所做的更改反映在命令提示符中。

## 我的应用程序正在显示白屏/空白屏幕

检查您的应用程序是否包含正确目录中的资产。 在您的 `main.go` 文件中，您将拥有类似于以下代码的内容：

```go
//go:embed all:frontend/dist
var assets embed.FS
```

检查它是否 `frontend/dist` 包含您的应用程序资产。

### Mac

如果在 Mac 上发生这种情况，请尝试将以下内容添加到您的 `Info.plist`:

```xml
<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsLocalNetworking</key>
    <true/>
</dict>
```

参考：https://github.com/wailsapp/wails/issues/1504#issuecomment-1174317433

## Mac 应用程序无效

如果您构建的应用程序在 finder 中如下所示：

```mdx-code-block
<p className="text--center">
  <img
    src={
      require("@site/static/img/troubleshooting/invalid_mac_app.png").default
    }
  />
</p>
```

您的申请很可能 `info.plist` 是无效的。 更新 `build/<yourapp>.app/Contents/info.plist`文件 并检查数据是否有效，比如：检查二进制名称是否正确。 要保留更改，请将文件复制回 `build/darwin` 目录。

## 无法使用可变参数

如果您有使用可变参数定义的后端方法，例如：

```go
func (a *App) TestFunc(msg string, args ...interface{}) error {
    // Code
}
```

像这样从前端调用此方法将失败：

```js
var msg = "Hello: ";
var args = ["Go", "JS"];
window.go.main.App.TestFunc(msg, ...args)
  .then((result) => {
    //do things here
  })
  .catch((error) => {
    //handle error
  });
```

解决方法：

```js
var msg = "Hello ";
var args = ["Go", "JS"];
window.go.main.App.TestFunc(msg, args)
  .then((result) => {
    //without the 3 dots
    //do things here
  })
  .catch((error) => {
    //handle error
  });
```

致谢：https://github.com/wailsapp/wails/issues/1186

## 我正在尝试安装Wails时获取代理错误

如果您遇到这样的错误：

```
"https://proxy.golang.org/github.com/wailsapp/wails/cmd/wails/@v/list": dial tcp 172.217.163.49:443: connectex: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.
```

这可能是因为官方 Go Proxy 被阻止（中国用户报告了这一点）。 解决方案是手动设置代理，例如：

```
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct
```

来源：https://github.com/wailsapp/wails/issues/1233

## 没有生成正确的 TypeScript 类型

有时生成的 TypeScript 没有正确的类型。 `ts_type` 为了缓解这种情况，可以使用 struct 标签指定应该生成哪些类型。 有关详细信息，请阅读 [此](https://github.com/tkrajina/typescriptify-golang-structs#custom-types) 内容。

## 当我离开 `index.html`时，我无法在前端调用方法

如果您导航 `index.html` 到一个新的 html 文件，上下文将会丢失。 这可以通过将以下导入添加到 `<head>` 您导航到的任何新页面的部分来解决：

```html
<head>
  <script src="/wails/ipc.js"></script>
  <script src="/wails/runtime.js"></script>
</head>
```

来源：https://github.com/wailsapp/wails/discussions/1512

## 运行 `wails dev` 出现 `too many open files` 错误

默认情况下，macOS 最多只能打开 256 个文件。 这会影响 `wails dev` 命令 可以通过在终端中运行：`ulimit -n 1024` 来增加此限制。

FSNotify 正在 [寻求转移到苹果](https://github.com/fsnotify/fsnotify/issues/11)。 如果这不能很快完成，我们将创建自己的实现，在 [此处](https://github.com/wailsapp/wails/issues/1733) 跟踪。

## 我的 Mac 应用程序给了我奇怪的编译错误

一些用户报告看到编译错误，如下所示：

```shell
# github.com/wailsapp/wails/v2/internal/frontend/desktop/darwin
In file included from ../../pkg/mod/github.com/wailsapp/wails/v2@v2.0.0-beta.44.2/internal/frontend/desktop/darwin/callbacks.go:9:
In file included from /Library/Developer/CommandLineTools/SDKs/MacOSX12.1.sdk/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h:12:
/Library/Developer/CommandLineTools/SDKs/MacOSX12.1.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSBundle.h:91:143: error: function does not return NSString
- (NSAttributedString *)localizedAttributedStringForKey:(NSString *)key value:(nullable NSString *)value table:(nullable NSString *)tableName NS_FORMAT_ARGUMENT(1) NS_REFINED_FOR_SWIFT API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0));
                                                         ~~~~~~~~~~~~~~                                                                       ^                  ~
/Library/Developer/CommandLineTools/SDKs/MacOSX12.1.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:103:48: note: expanded from macro 'NS_FORMAT_ARGUMENT'
        #define NS_FORMAT_ARGUMENT(A) __attribute__ ((format_arg(A)))
```

这 _通常_ 是由于您正在运行的操作系统版本和安装的 XCode 命令行工具的版本不匹配。 如果您看到这样的错误，请尝试将您的 XCode 命令行工具升级到最新版本。

如果重新安装 Xcode 命令工具仍然失败，您可以通过以下方式检查工具包所在的路径：

`xcode-select -p`

如果显示 `/Applications/Xcode.app/Contents/Developer` ，运行 `sudo xcode-select --twitter /Library/Developer/CommandLineTools`

来源：https://github.com/wailsapp/wails/issues/1806 和 https://github.com/wailsapp/wails/issues/1140#issuecomment-1290446496

--

## 无法启动服务：主机版本“x.x.x”与二进制版本“x.x.x”不匹配

最好将 `frontend/node_modules` 和 `frontend/package-lock.json` 添加到您的 `.gitignore` 中。 否则，当在另一台可能安装了不同版本 Node 的机器上打开您的存储库时，您可能无法运行您的应用程序。

如果发生这种情况，只需删除 `frontend/node_modules` 和 `frontend/package-lock.json` 并再次运行 `wails build` 或 `wails dev` 命令。

## 构建过程停留在“生成绑定”

绑定生成过程在特殊模式下运行应用程序。 如果应用程序有意或无意地包含一个无限循环(即在 `wails.Run()` 结束后不退出)，这可能导致构建过程停留在绑定生成阶段。 请确保您的代码正确退出。
