为了账号安全,请及时绑定邮箱和手机立即绑定

在编译时从 JSON 生成 Swift+Java 设置对象

在编译时从 JSON 生成 Swift+Java 设置对象

吃鸡游戏 2021-09-29 16:23:50
我的移动应用程序有很多硬编码数据,我想在应用程序的原生 Android 和 iOS 版本之间共享。我不想为每个应用程序创建两个设置文件:我希望有一个存储信息的地方。我的第一个想法是使用嵌入在我的应用程序中的 JSON 文件并在运行时对其进行解码。相反,我的目标是在编译时反序列化应用程序的数据,以便:在发布应用程序之前跟踪 JSON 文件或解码代码中的潜在错误:构建将失败避免在启动时被一些反序列化减慢避免将未加密的应用程序数据保留为 JSON 文件(.ipa/.apk 是可以轻松提取资源的 zip 文件),我宁愿在代码中对其进行混淆我正在寻找一个命令行工具,我可以将它添加到我的构建脚本中,该脚本给定一个 JSON 文件,从而推断出一个架构,从而推断出类并使用所有应用程序设置实例化一个对象。例如给定以下 settings.json 文件:{    "gravity": 9.81,    "scientists": ["Kepler", "Einstein", "Newton"],    "planets": [        {            "name": "Mars",            "radius": 3390        },        {            "name": "Venus",            "radius": 6052        }    ]}我想自动生成一个 Settings.swift 文件,它可能如下所示:struct Settings {    struct Planet {        var name: String        var radius: Int    }    var gravity: Double    var scientists: [String]    var planets: [Planet]    static func content() -> Settings {        return Settings(gravity: 9.81, scientists: ["Kepler", "Einstein", "Newton"], planets: [Planet(name: "Mars", radius: 3390), Planet(name: "Venus", radius: 6052)])    }}然后我可以将生成的文件包含到我的项目中并调用 Settings.content() 一次,将它保存在一个全局变量中并在我的整个项目中使用它。我也想在 Android 上实现同样的目标。像 quicktype 或 json2swift 这样的工具完成了一半的工作并且不生成对象实例化位,这仍然需要在运行时完成。任何的想法?
查看完整描述

2 回答

?
跃然一笑

TA贡献1826条经验 获得超6个赞

我创建了一个开源 NodeJS mobile_app_data工具来实现我想要的。


查看完整回答
反对 回复 2021-09-29
?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

可能的解决方案如下:

  1. 将 .json 文件保存在项目目录中

  2. 在 AppDelegate applicationDidFinishLauncing() 中将上述文件读入 Data 对象(使用 Swift 3 读取 JSON 文件

  3. 使您的 Settings 类实现可解码(您的内部类 Planet 也需要实现可解码)

  4. 调用 JsonDecoder().decode() 并提供您在 2) 中获得的数据

  5. 然后您可以将此值保存在您想要的任何位置

我刚刚注意到,当 Settings.content() 被调用时,你需要这一代发生。按照上述步骤将步骤 2) 移到 content() 函数中


查看完整回答
反对 回复 2021-09-29
  • 2 回答
  • 0 关注
  • 207 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信