在XCode中使用SwiftGen管理你的图片、配色、多语言文件等

2024-03-06 09:20

本文主要是介绍在XCode中使用SwiftGen管理你的图片、配色、多语言文件等,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        SwiftGen是一个工具,可以为您的项目资源(如图像、本地化字符串等)自动生成Swift代码,然后你就可以像使用一个Class类一样访问你的资源了。

        而且添加或更新资源后,SwiftGen也会自动更新用于访问资源的Class类。对于管理图片、配色、多语言文件等十分方便。

        从技术实现上来说,SwiftGen可以认为是xcode的一个扩展插件(实际上就是一个独立的mac命令行程序),他可以自动检索项目目录中的资源文件等,然后生成一个Class类(.swift文件),之后在代码中使用这些资源,都通过这个SwiftGen生成的Class来访问。这样就实现了对资源的一层封装管理。

        关于如何安装SwiftGen,已经有非常多的文章和教程了。建议大家直接看官方版,多种安装方式写的很详细:

GitHub - SwiftGen/SwiftGen: The Swift code generator for your assets, storyboards, Localizable.strings, … — Get rid of all String-based APIs!

        这里只描述github官方文档没说明的使用方法和问题。

        1: 正确安装

        安装官网安装完毕之后,并且配置了正确的环境路径变量后,在命令行执行以下代码,检查是否安装成功。

swiftgen --version

        2: 创建配置文件".swiftgen.yml"

        如果正确执行并安装成功,那么就可以开始配置模版了,SwiftGen会根据模版来生成管理资源的Class,关于模版的配置方式和语法,可以看github官方文档。以下是一个模版配置的例子,我们把这个配置文件存放在项目目录的"./Scripts/.swiftgen.yml"里,这里我们让SwiftGen去管理Assets.xcassets和多语言文件:

xcassets:inputs: ../APP/Assets.xcassets  //相对于配置文件的路径outputs:- templateName: swift5output: ../APP/Generated/Assets.swift
strings:inputs: ../APP/en.lproj/Localizable.stringsoutputs:- templateName: structured-swift5output: ../APP/Generated/Strings.swift

        3: 通过命令行生成资源对应的Swift代码

        以上步骤完成后,我们就可以开始生成资源对应的代码了。

        首先我们确保项目中存在上述配置文件中的路径和文件,然后在命令行中,进入项目根目录,执行以下代码开始生成:

swiftgen config run --config ./Scripts/.swiftgen.yml或/usr/local/bin/swiftgen config run --config ./Scripts/.swiftgen.yml

        如果提示SwiftGen_SwiftGenCLI.bundle相关的错误:

Executing configuration file ./Scripts/.swiftgen.yml
SwiftGenCLI/resource_bundle_accessor.swift:11: Fatal error: could not load resource bundle: from /usr/local/bin/SwiftGen_SwiftGenCLI.bundle or /private/var/folders/vx/qfcmz2fx091fm4rv074pb3vr0000gn/T/mint/github.com_SwiftGen_SwiftGen/.build/arm64-apple-macosx/release/SwiftGen_SwiftGenCLI.bundle
zsh: trace trap  /usr/local/bin/swiftgen config run --config ./Scripts/.swiftgen.yml

        很可能是找不到SwiftGen_SwiftGenCLI.bundle的路径,这时候我们只要去/usr/local/bin/目录下创建一个指向真实SwiftGen_SwiftGenCLI.bundle目录的连接就行了。

        SwiftGen_SwiftGenCLI.bundle目录通常跟swiftgen在一起,你可以在/usr/local/bin/目录下,通过ls -ls查看swiftgen的位置。

        我这里,/usr/local/bin/swiftgen指向了/Users/xxxx/.mint/bin/swiftgen,然后又.mint下又指向了真正的swiftgen目录。以下是我这里创建连接的步骤(注意自己的版本和计算机名称):

ln -s /Users/xxx/.mint/packages/github.com_SwiftGen_SwiftGen/build/6.6.3/SwiftGen_SwiftGenCLI.bundle SwiftGen_SwiftGenCLI.bundlesudo ln -s /Users/xxx/.mint/bin/SwiftGen_SwiftGenCLI.bundle /usr/local/bin/SwiftGen_SwiftGenCLI.bundle

        4: 把生成的文件添加到项目中

        如果成功生成了文件,那只需要打开xcode,并且把生成的文件添加到项目中就行了。我这里按照模版的配置,生成文件都在项目./APP/Generated/路径下。

        然后可以尝试在代码中使用一下相关的资源,比如我的本地化语言文件Localizable.strings中有一个字符串:

        "APP.name" = "hello SwiftGen";

        那么此时我在代码中就可以:

print(L10n.App.name)

        5: 让xcode自动执行资源管理

        此时,我们已经可以使用SwiftGen了,但是每次变更资源都需要执行命令:/usr/local/bin/swiftgen config run --config ./Scripts/.swiftgen.yml,显然太麻烦了。

        想让xcode自动执行,只需要在编译脚本中添加一个自动执行脚本就可以了,位置如下:

        这样在编译项目时,xcode就会优先运行资源管理的脚本了。注意,添加脚本时,顺序要排列在Compile Sources上面。

        此时,只需要点击编译项目,就会自动执行生成代码的脚本了。如果点击后报错:

        5.1 报错1

Sandbox: swiftgen(25245) deny(1) file-read-data /Users/xxxx/Work/Phonetic/project/BasicEnglish/Scripts/.swiftgen.yml

        原因是xcode设置问题,只需要修改工程build option的ENABLE_USER_SCRIPT_SANDBOXING为no即可:

        原因见:react native - Sandbox: bash(72986) deny(1) file-write-data /Users/XXX/ios/Pods/resources-to-copy-XXXShareExtension.txt - Stack Overflow

        5.2 报错2

        如果报错:

Command PhaseScriptExecution failed with a nonzero exit code

        则说明在执行脚本时候出现了错误,可以查看编译日志或在命令行直接执行SwiftGen的生成脚本,查看具体报错信息。

以上内容环境:mac m1 / macos 14.3  / xcode 15.2

这篇关于在XCode中使用SwiftGen管理你的图片、配色、多语言文件等的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/779572

相关文章

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

pdfmake生成pdf的使用

实际项目中有时会有根据填写的表单数据或者其他格式的数据,将数据自动填充到pdf文件中根据固定模板生成pdf文件的需求 文章目录 利用pdfmake生成pdf文件1.下载安装pdfmake第三方包2.封装生成pdf文件的共用配置3.生成pdf文件的文件模板内容4.调用方法生成pdf 利用pdfmake生成pdf文件 1.下载安装pdfmake第三方包 npm i pdfma

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验