[Mac M2 Pro 12CPU, Ventura 13.6.1, iOS 17.1.2, Xcode 15.0]
暗号化の有無切り替えはデータを初期化しないと出来ない仕様にしています。安易に切り替えないための措置です。暗号化解除によりセキュリティは低下しますが、パフォーマンスは向上します。
メモデータを保存したい方のためにCSVエクスポート機能を追加しました。
この機能の実装にはinfo.plistのキーを2つ追加する必要があります。これが分からなくてしばらく右往左往しました。
・Application supports iTunes file sharing : YES
・Supports opening documents in place : YES
暗号化有無の切り替えに伴うCore Data自動変換やCSVインポート機能は実装できなくはないですが、サポート範囲拡大による開発負担増大を避けるため、あえて実装しないことにしました。
func exportData() {
// CSVデータのヘッダを設定
var csvString = "Content\n"
for note in contents {
// Noteのcontentを取得し、CSV形式に整形
if let content0 = note.content, let decryptedContent = CryptoManager.shared.decrypt(content0) {
// 特殊文字をエスケープする処理を追加
let escapedContent = decryptedContent.replacingOccurrences(of: "\"", with: "\"\"")
// CSV形式の文字列に追加(コンマや改行を含むcontentはダブルクォートで囲む)
csvString.append("\"\(escapedContent)\"\n")
}
}
let fileManager = FileManager.default
#if os(iOS)
let docPath = fileManager.urls(for: .documentDirectory, in: .userDomainMask).first!
let fileURL = docPath.appendingPathComponent("cloudMemo.csv")
#elseif os(macOS)
let homeDirectory = fileManager.homeDirectoryForCurrentUser
let fileURL = homeDirectory.appendingPathComponent("cloudMemo.csv")
#else
return
#endif
do {
// CSVデータをファイルに書き込む
try csvString.write(to: fileURL, atomically: true, encoding: .utf8)
print("CSVファイルのエクスポートが成功しました。ファイルパス: \(fileURL.path)")
} catch {
print("CSVファイルの書き込みに失敗しました: \(error)")
}
}