[macOS]Day One Classic 書類

<p>Day One Classicという日記アプリを使っているが、今後のことを考えて、自家製アプリに移行することを考えている。</p>

<p>Day Oneの同期データの種類は、以下のとおり。</p>

<ul>
	<li>Day One<br />独自サーバ。</li>
	<li>iCloud<br /> 	探せばデータを見つけることは出来るが、見えないと考えるべきか。<br /> 	~/Library/Mobile Documents/*~com~dayoneapp~dayone/Documents/Journal_dayone</li>
	<li>Dropbox<br /> 	データは見える場所。<br /> 	~/Dropbox/アプリ/Day\ One/Journal.dayone</li>
</ul>

<p>Dropboxでのディレクトリ構成は以下のとおり</p>

<pre><code>Day One
 +- Journal.dayone
    +- entries
    |    1A573C0B559248A991C4AC0F0EA8B1E7.doentry
    |    1FB23D983DF341079532B0F9381BCFCC.doentry
    |    :
    +- photos
         1A573C0B559248A991C4AC0F0EA8B1E7.jpg
         2D37E853754E43EFBA0FFBAEEB6A8B40.jpg
         :
</code></pre>

<p>entries配下のファイルは、plistのよう。</p>

<pre><code>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"&gt;
&lt;plist version="1.0"&gt;
&lt;dict&gt;
	&lt;key&gt;Activity&lt;/key&gt;
	&lt;string&gt;Automotive&lt;/string&gt;
	&lt;key&gt;Creation Date&lt;/key&gt;
	&lt;date&gt;2016-07-18T08:51:34Z&lt;/date&gt;
	&lt;key&gt;Creator&lt;/key&gt;
	&lt;dict&gt;
		&lt;key&gt;Device Agent&lt;/key&gt;
		&lt;string&gt;iPhone/iPhone7,2&lt;/string&gt;
		&lt;key&gt;Generation Date&lt;/key&gt;
		&lt;date&gt;2016-07-18T08:51:34Z&lt;/date&gt;
		&lt;key&gt;Host Name&lt;/key&gt;
		&lt;string&gt;iPhone6GB128Gold&lt;/string&gt;
		&lt;key&gt;OS Agent&lt;/key&gt;
		&lt;string&gt;iOS/9.3.2&lt;/string&gt;
		&lt;key&gt;Software Agent&lt;/key&gt;
		&lt;string&gt;Day One iOS/1.17.9&lt;/string&gt;
	&lt;/dict&gt;
	&lt;key&gt;Entry Text&lt;/key&gt;
	&lt;string&gt;AT教習のゼッケン
下で待つ。準備なし&lt;/string&gt;
:
</code></pre>

<p>この内容を読み取るコードを書いてみた。保存先を選択する。</p>

<pre><code>    @IBAction func buttonPushed(sender: AnyObject) {
        let openPanel = NSOpenPanel()
        openPanel.allowsMultipleSelection = false
        openPanel.canChooseDirectories = true
        openPanel.canCreateDirectories = false
        openPanel.canChooseFiles = false
        openPanel.begin { (result) -> Void in
            if result == NSFileHandlingPanelOKButton {
                let inst = KeepADiary()
                inst.dump(url: openPanel.urls[0])
            }
        }
    }
</code></pre>

<p>内容をダンプ。</p>

<pre><code>class KeepADiary {
    public func dump(url: URL) -> Void {
        print(url)
        var entriesUrl = url
        entriesUrl.appendPathComponent("entries", isDirectory: true)
        print(entriesUrl)
        var fileList: [String] {
            do {
                return try FileManager.default.contentsOfDirectory(atPath: entriesUrl.path)
            } catch {
                return []
            }
        }
        for fileName in fileList {
            var fileUrl = entriesUrl
            fileUrl.appendPathComponent(fileName)
            let plistXML: NSData = FileManager.default.contents(atPath: fileUrl.path)! as NSData
            let temp = try! PropertyListSerialization.propertyList(from:plistXML as Data, options: [], format: nil) as! [String:Any]
            print(temp)
        }
    }
}
</code></pre>

ソースコード
GitHubからどうぞ。<br />
<a href="https://github.com/murakami/KeepADiary">https://github.com/murakami/KeepADiary</a> - GitHub<br />

関連情報
<a href="https://cocoa-study.connpass.com">Cocoa勉強会 BUKURO.swift (connpass)</a><br />
<a href="https://cocoa-kanto.connpass.com">Swift勉強会 関東 (connpass)</a><br />
<a href="https://atnd.org/groups/cocoa-study">Cocoa勉強会 BUKURO.swift (ATND)</a><br />
<a href="http://cocoa-study.peatix.com">Cocoa勉強会 BUKURO.swift (Peatix)</a><br />
<a href="https://mosa.connpass.com">MOSA BUKURO.swift (connpass)</a><br />

【Cocoa練習帳】
<a href="http://www.bitz.co.jp/weblog/">http://www.bitz.co.jp/weblog/</a><br />
<a href="http://ameblo.jp/bitz/">http://ameblo.jp/bitz/</a>（ミラー・サイト）<br />
<a href="https://t.co/6P3h2jtbRk</a>note<br />