概要
Xcode15がリリースされ、String Catalogが使えるようになりました。
また、最近はSPMによるマルチモジュール構成を取るプロジェクトも増えており、パッケージ内で文字列リソースを管理したいという需要も増えているかと思います。
この記事では、パッケージ内でのString Catalogの管理方法を以下の2つのポイントに焦点を当てつつ、解説していきます。
- String Catalogの設定方法の解説
 - ローカライズはさせず、シンプルに日本語の文字列リソースをString Catalogで管理する方法の解説
 
手順
1. package.swiftの編集
パッケージを作成すると、デフォルトの言語設定はEnglish(en)になっていると思います。  
個人で作成したプロジェクトではローカライズは目的ではなかったので、このデフォルトの言語設定をJapanese(ja)に変更したいと思います。
具体的には以下のようにpackage.swiftを変更します。
import PackageDescription
let package = Package(
    name: "MyPackage",
    // デフォルト言語設定をjaに変更
    defaultLocalization: "ja", // この行を追加
    platforms: [
        .iOS(.v16),
    ],
    products: [
        // Products define the executables and libraries a package produces, making them visible to other packages.
        .library(
            name: "MyPackage",
            targets: ["MyPackage"])
    ]
    targets: [
        // Targets are the basic building blocks of a package, defining a module or a test suite.
        // Targets can depend on other targets in this package and products from dependencies.
        .target(
            name: "MyPackage",
            // ついでにこの後作成するLocalizable.xcstringsを管理するためのリソース管理先の設定も追加
            resources: [
                .process("Resources")
            ]
        ),
        .testTarget(
            name: "MyPackageTests",
            dependencies: ["MyPackage"]),
    ]
)
これで、パッケージ内のデフォルトの言語設定がenからjaに変わりました。
2. Resourcesディレクトリを作成
パッケージ内にLocalizable.xcstringsを管理するためのResourcesディレクトリを作成する。
3.Resources配下にLocalizable.xcstringsを作成する
Resourcesを選択した状態でFile -> New -> Fileから、String Catalogを選択。

作成したLocalizable.xcstringsを開くと、以下のようにJapaneseが追加された状態になっています。

この状態で、赤枠で囲った+ボタンを押すと新しいkey,valueの行が作成されます。

しかし、画像にもあるように、Default Localization(en)という設定が残っています。
冒頭にもあった通り、ローカライズさせる目的はないので、こいつを消したいと思います。
4. Default Localization(en)を削除する
Localizable.xcstringsを選択して、メニューを開き、Open As -> Source Codeを選択。

するとsourceLanguageにenが設定されていることが確認出来ると思います。
これを以下のようにjaに変更します。
{
  "sourceLanguage" : "ja",
  "strings" : {
    "Key" : {
      "extractionState" : "manual"
    }
  },
  "version" : "1.0"
}
先ほどと同じ手順で、今度はOpen As -> String CatalogでString Catalogを開く。

すると画像にもある通り、Default Localization(en)が削除出来ました。
あとはパッケージ内の文字列をこのLocalizable.xcstringsで管理するだけです。
これにより、SwiftGenやR.swiftを追加せずとも文字列リソースを管理することが可能になります。
まとめ
今回はパッケージ内でString Catalogを使った文字列リソースの管理の設定方法を解説しました。
String Catalogを使うことで、
- SwiftGenやR.swiftを追加しなくてもいい
 - ハードコーディングを避けられる
 - 後々、ローカライズ対応することも容易
 
といったメリットが考えられ、個人的には結構気に入っています。
是非、一度String Catalogを試してみてください!
最後までお読み頂きありがとうございました。