【Swift】プロパティリスト(plist)とは?自作方法と読み込み
この記事からわかること
- Swiftのプロパティリスト(plist)とは?
- オブジェクトの永続化の意味とメリット
- プロパティリストの自作方法と読み込み/書き込み
index
[open]
\ アプリをリリースしました /
友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-
posted withアプリーチ
iOSアプリ開発をしていた際に遭遇する「XXX.plist」という拡張子のついたファイルとはどのようなもなのかまとめていきたいと思います。
プロパティリストとは?
拡張子が「.plist
」になっているものはプロパティリストと呼ばれる形式のテキストファイルです。プロパティリストとはオブジェクトを永続化することを目的とし、オブジェクトが持つプロパティを保持するために使用されます。
mac OSやiOSでもプロパティリストは組み込まれて使用されており、mac OSではユーザー設定や環境設定を行うために、iOSではアプリ情報を設定するための「info.plist
」などに用いられています。
具体的な例をiOSアプリの「info.plist
」で見てみると「アプリ名(Bundle name)」や「ロケール」、「ユーザーへの許可申請の文言」などを設定できるようになっています。
また上記画像のようにプロパティリストは「Property List Editor」と呼ばれる専用エディターが使用でき、編集が容易に行えるようになっているのも特徴の1つです。
保存形式とデータ構造
プロパティリストは「Key」、「Type」、「Value」の3つの項目から成り立っており、ファイルの中身はXML形式で保存されています。
「プロパティリストの中身」
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>AvailableLibraries</key>
<array>
<dict>
<key>LibraryIdentifier</key>
<string>ios-arm64_x86_64-simulator</string>
<key>LibraryPath</key>
<string>GoogleMobileAds.framework</string>
<key>SupportedArchitectures</key>
<array>
<string>arm64</string>
<string>x86_64</string>
</array>
<key>SupportedPlatform</key>
<string>ios</string>
<key>SupportedPlatformVariant</key>
<string>simulator</string>
</dict>
</array>
<key>CFBundlePackageType</key>
<string>XFWK</string>
<key>XCFrameworkFormatVersion</key>
<string>1.0</string>
</dict>
</plist>
また大枠のデータ構造としてはNSArray
型(配列)もしくはNSDictionary
型(連想配列/辞書)での保存が条件になります。
プロパティリスト〜まとめ〜
- 拡張子が「plist」はプロパティリスト
- オブジェクトを永続化する目的
- macOSやiOSでも実際に使用されている
- 専用のエディタで容易に編集可能
- Key/Type/Valueの3つの項目
- ファイル構造はXML形式
- データ構造はNSArray型(配列)/NSDictionary型(連想配列/辞書)
プロパティリストを自作する
ただのファイル形式なのでプロパティリストは自分で作成することも可能です。注意するのはXML形式であることと、大枠が配列/辞書型であることです。
実際にプロパティとして保存できるデータ型は配列/辞書型である必要はありません。
- NSString
- NSNumber
- NSDate
- NSArray
- NSDictionary
GUIから作成する
まずはGUI(マウス操作)で作成する方法です。Swiftプロジェクトの中に新規ファイルを追加する容量で拡張子がplistのものを作成します。
この場合はViewファイルや「info.plist」と同階層に作っていく流れになります。
Xcodeの上部「File」>「New」>「File...」を押して作成する形式から「Property List」を選択します。
これでプロパティファイルの作成が完了しました。
コードで作成する
Swiftで記述したコード内から動的に作成する場合を見てみます。今回はDocumentsディレクトリ内に「demo.plist」を作成する関数を定義していきます。
func createPlist(){
// NSDictionary 型で定義
let data: NSDictionary = ["Title": "プロパティリスト(plist)とは", "Minutes": 3 , "isIndex": true]
guard let docURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first else{
fatalError("URL取得失敗")
}
let fullURL = docURL.appendingPathComponent("demo.plist")
data.write(to: fullURL,atomically: true)
}
ファイルを操作するためのFileManager
クラスの使い方については以下の記事を参考にしてください。
プロパティリストの読み込み
プロパティリストを読み込み、値を参照するためにはNSDictionary
のイニシャライザを使用して変数に格納していきます。
func loadPlist(){
guard let docURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first else{
fatalError("URL取得失敗")
}
let fullURL = docURL.appendingPathComponent("demo.plist")
let plist = NSDictionary(contentsOfFile: fullURL.path)
print(plist!["Title"])
}
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。
私がSwift UI学習に使用した参考書