[Swift] 66 メモアプリ製作 その18 データをエクスポート  info.plist : Application supports iTunes file sharing

[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インポート機能は実装できなくはないですが、サポート範囲拡大による開発負担増大を避けるため、あえて実装しないことにしました。

iPhoneのファイルアプリで確認できる
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)")
        }
    }