plutil -convertはxml1/binary1/jsonだけでなく、objc/swiftを指定するとplist(property list)ファイルをObjective-C・Swiftのソースコードに変換できる。xml1、binary1については【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のフォーマットを変換する\第一線のプログラマーの行動原理を学べる!/
