plutil -convertxml1/binary1/jsonだけでなく、objc/swiftを指定するとplist(property list)ファイルをObjective-C・Swiftのソースコードに変換できる。xml1binary1については【plutil】plistのxml1形式とbinary1形式の違い を参照。plistで管理している定数データを、そのままコードへ埋め込みたい場合に使える。

Swiftのコードに変換する

$ plutil -convert swift sample.plist -o sample.swift
$ cat sample.swift
/// Generated from sample.plist
let sample : [String : Any] = [
    "Count" : 3,
    "Name" : "Sample",
    "Tags" : [
        "a",
        "b",
    ],
]

plistのファイル名(拡張子を除いた部分)がそのまま変数名になる。

Obj-Cのコードに変換する

$ plutil -convert objc sample.plist -o sample.m
$ cat sample.m
#import "sample.h"

/// Generated from sample.plist
__attribute__((visibility("hidden")))
NSDictionary * const sample = @{
    @"Count" : @3,
    @"Name" : @"Sample",
    @"Tags" : @[
        @"a",
        @"b",
    ],
};

-headerを指定しない場合、生成された.mファイルは存在しないsample.h#importする内容になる。ビルドを通すには次に説明する-header.hファイルも合わせて生成する必要がある。

-headerで宣言用のヘッダファイルも生成する

-convert objc -headerを指定すると、実装(.m)に加えて宣言のみの.hファイルも生成する。

$ plutil -convert objc -header sample.plist -o sample.m
$ ls sample.*
sample.h  sample.m  sample.plist
$ cat sample.h
#import <Foundation/Foundation.h>

/// Generated from sample.plist
__attribute__((visibility("hidden")))
extern NSDictionary * const sample;

-oで指定したファイル名の拡張子を.hに変えたパスへ、対応するヘッダファイルが自動生成される。

-headerはObj-C形式への変換専用のオプションであり、Swift形式との組み合わせはエラーになる。

$ plutil -convert swift -header sample.plist -o sample.swift
-header is only valid for objc literal conversions.

参考

【plutil】-convertでplistのフォーマットを変換する