トップ 最新 追記

Cocoa練習帳

iOS/iPhone/iPad/watchOS/tvOS/MacOSX/Android プログラミング, Objective-C, Cocoa, Swiftなど

2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|

2023-05-02 [Swift]Day One Classicのデータを調べる

Day One Classicという日記アプリを使っていたが、iOSのバージョンが上がって使えなくなったので、このアプリのデータを取り出して、自分の日記アプリの取り込みたいと考え、Day One Classicのデータの書式を調べた。

Journal.dayoneがデータの名前で、これはディレクトリだった。

.
`-- Journal.dayone
    |-- entries
    |   |-- UUID1.doentry
    |   `-- UUIDn.doentry
    `-- photos
        |-- UUID1.jpg
        `-- UUIDm.jpg

日記の本文はentriesディレクトリ配下に、投稿毎の単位でsuffixが.doentryのファイルに記録されている。日記に写真がある場合はphotosディレクトリ配下に対応する.doentryファイルと同じUUIDでJPEGファイルとして格納されている。

日記の本文はプロパティリストの書式となっていて、NSDictionaryとして読み込むことができる。

<?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>Creation Date</key>
	<date>2014-01-03T21:40:52Z</date>
	<key>Creator</key>
	<dict>
		<key>Device Agent</key>
		<string>iPhone/iPhone5,2</string>
		<key>Generation Date</key>
		<date>2014-01-03T21:40:52Z</date>
		<key>Host Name</key>
		<string>iPhone5Black64GB</string>
		<key>OS Agent</key>
		<string>iOS/7.0.4</string>
		<key>Software Agent</key>
		<string>Day One iOS/1.12</string>
	</dict>
	<key>Entry Text</key>
	<string>娘と
俺の藤井2014</string>
	<key>Location</key>
	<dict>
		<key>Administrative Area</key>
		<string>埼玉県</string>
		<key>Country</key>
		<string>日本</string>
		<key>Latitude</key>
		<real>35.904324925538063</real>
		<key>Locality</key>
		<string>さいたま市 大宮区</string>
		<key>Longitude</key>
		<real>139.62506669586489</real>
		<key>Place Name</key>
		<string>下町 1丁目2番</string>
	</dict>
	<key>Music</key>
	<dict>
		<key>Track</key>
		<string>Weekend Sunshine - Dec 7, 2013</string>
	</dict>
	<key>Starred</key>
	<false/>
	<key>Time Zone</key>
	<string>Asia/Tokyo</string>
	<key>UUID</key>
	<string>B2713EC2EAF54B64884E8FF85D20DE5F</string>
</dict>
</plist>

Swiftで読み込むコードを書いてみた。

import Foundation
 
func dump(url aUrl: URL) {
    print("dump(\(aUrl))")
    do {
        let urls = try FileManager.default.contentsOfDirectory(
            at: aUrl,
            includingPropertiesForKeys: nil,
            options: [.skipsHiddenFiles, .skipsSubdirectoryDescendants])
        urls.forEach { url in
            print(url)
            if url.hasDirectoryPath {
                dump(url: url)
            } else {
                if url.pathExtension == "doentry" {
                    let entry = NSDictionary(contentsOfFile: url.path)
                    print("\(String(describing: entry))")
                }
            }
        }
    } catch {
        print(error.localizedDescription)
    }
}
 
let journalDayonePath: String = "/Users/yukio/Documents/Development/Projects/KeepADiary/temp/Day One/Journal.dayone"
let journalDayoneURL = URL(fileURLWithPath: journalDayonePath)
dump(url: journalDayoneURL)

Xcodeのデバッガで値をダンプして、例えば、日付はNSDateのオブジェクトになっていることが確認できた。

_ 【関連情報】

Cocoa練習帳

トップ 最新 追記