如何在 iOS 中使用 Gomobile 获取资产? - Golang 开发指南

如何在 iOS 中使用 Gomobile 获取资产? - Golang 开发指南 我使用 gomobile bind -target=ios xxx 命令生成 iOS 文件 xxx.framework(xxx 是一个包含 “assets” 子目录的包,assets 目录中有 config.json 文件)。

当我尝试使用 asset.Open() 获取 ‘config.json’ 资源时,出现 “no such file or directory” 错误(在绑定 Android 时我成功获取了该资源)。

我在 gomobile 的 godoc 中看到这样的提示:在 iOS 上,资源是存储在应用程序包中的资源文件,可以使用相同的相对路径加载资源。

我该如何获取资源文件?我应该使用 asset.Open API 吗?在 iOS 中我应该将资源文件放在什么路径下?

谢谢。


更多关于如何在 iOS 中使用 Gomobile 获取资产? - Golang 开发指南的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于如何在 iOS 中使用 Gomobile 获取资产? - Golang 开发指南的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在 iOS 中使用 Gomobile 获取资产时,需要注意资源文件的存储位置和访问方式。与 Android 不同,iOS 的资源文件需要手动添加到 Xcode 项目中。

以下是解决方案:

  1. 将资源文件添加到 Xcode 项目

    • 在 Xcode 中,将 assets 目录拖放到项目中
    • 确保在 “Add to targets” 中勾选了你的应用目标
    • 选择 “Create folder references” 而不是 “Create groups”
  2. 在 Go 代码中使用 asset.Open(): 资源文件会被复制到应用的主 bundle 中,可以使用相对路径访问。

package xxx

import (
    "golang.org/x/mobile/asset"
    "io"
    "log"
)

func ReadConfig() string {
    file, err := asset.Open("assets/config.json")
    if err != nil {
        log.Fatal("Failed to open asset:", err)
    }
    defer file.Close()
    
    data, err := io.ReadAll(file)
    if err != nil {
        log.Fatal("Failed to read asset:", err)
    }
    
    return string(data)
}
  1. iOS 端的文件结构: 在 Xcode 项目中的文件结构应该保持与 Go 包中相同的相对路径:
YourApp/
├── YourApp.xcodeproj
├── YourApp/
│   ├── Assets.xcassets
│   ├── xxx.framework
│   └── assets/          <-- 文件夹引用
│       └── config.json
  1. 构建命令
gomobile bind -target=ios -o xxx.framework ./xxx

关键点:

  • 确保在 Xcode 中使用 “Folder References” 而不是 “Groups”
  • 保持与 Go 包中相同的目录结构
  • 使用 asset.Open() 时使用相同的相对路径 "assets/config.json"

这样配置后,asset.Open("assets/config.json") 就能在 iOS 中正确找到资源文件了。

回到顶部