You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Tuist与SwiftGen生成Objective-C兼容本地化字符串遇异常求助

使用Tuist+SwiftGen生成Objective-C本地化字符串的配置问题解决

问题描述

  • 需求:通过Tuist和SwiftGen生成Objective-C可用的本地化字符串文件
  • 异常:生成的TuistStrings+{name}.strings文件内容与stencil模板完全一致,未完成模板变量渲染
  • 额外现象:将模板重命名为Assets.stencil后,TuistAssets文件也出现相同问题

当前配置代码

Manifests/Project.swift

let project = Project(
    name: "{name}", 
    organizationName: "{name}", 
    settings: .settings(
        configurations: Configuration.{name}Configuration(basic: true)
    ), 
    targets: targets, 
    schemes: schemes, 
    resourceSynthesizers: [
        .strings(), 
        .assets()
    ]
)

Stencil模板配置

strings:
  inputs: path/to/Localizable.strings
  outputs:
    - templateName: objc-h
      output: Localizable.h
    - templateName: objc-m
      output: Localizable.m

解决方案

1. 规范模板文件的位置与命名

  • Tuist的资源合成器默认读取Tuist/ResourceSynthesizers目录下的模板,需将Objective-C本地化模板命名为Strings.stencil并放置在此路径下,避免与Assets模板混淆。

2. 显式配置resourceSynthesizers

默认的.strings()合成器不会加载自定义模板,需修改Project.swift中的配置,指定模板路径与输出规则:

resourceSynthesizers: [
    .strings(
        parser: .strings,
        templatePath: "Tuist/ResourceSynthesizers/Strings.stencil",
        output: .relativeToRoot("Generated/Localizable")
    ),
    .assets()
]
  • templatePath:对应你的实际模板文件路径
  • output:指定生成文件的输出目录

3. 检查模板语法正确性

确保stencil模板中使用了SwiftGen提供的变量,比如Objective-C头文件模板示例:

// Localizable.h
#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

{% for entry in entries %}
extern NSString *const {{ entry.key }};
{% endfor %}

NS_ASSUME_NONNULL_END

若未正确使用变量,生成内容会与原模板完全一致。

4. 验证SwiftGen集成配置

在Tuist/Config.swift中添加SwiftGen版本配置,确保Tuist能正确调用SwiftGen:

import TuistCore
import TuistSupport

let config = Config(
    swiftVersion: "5.9",
    plugins: [],
    resourceSynthesizers: .enabled,
    swiftGenVersion: .exact("6.6.0")
)

5. 清理缓存并重新生成项目

执行以下命令确保配置生效:

tuist clean
tuist generate

内容的提问来源于stack exchange,提问作者Killianoni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 09:33:06