はじめに
最近、Macアプリを作っているのですが、保存機能を作成しようと思った時にやり方がわからなかったので記録しておきます。
サンプルアプリ
ファイルへのアクセス権を付与
① プロジェクトを選択します
② ターゲットを選択します
③ 「Signing & Capabilities」を選択します
④ 「File Access Type」の「User Selected File」のピッカーを選択します
実装方法
import SwiftUI
struct ContentView: View {
var body: some View {
VStack {
Button {
showSavePanel()
} label: {
Text("Download")
}
}
.frame(width: 300, height: 200)
}
func showSavePanel() {
let savePanel = NSSavePanel()
savePanel.message = "Download"
savePanel.allowedContentTypes = [.png]
guard let window = NSApp.windows.first else { return }
savePanel.beginSheetModal(for: window) { response in
switch response {
case .OK:
guard let path = savePanel.url else { return }
saveImage(imageName: "sample", path: path)
default:
break
}
}
}
func saveImage(imageName: String, path: URL) {
guard let image = NSImage(named: imageName),
let representation = image.tiffRepresentation
else { return }
let imageRep = NSBitmapImageRep(data: representation)
guard let png = imageRep?.representation(using: .png, properties: [:]) else { return }
try? png.write(to: path)
}
}
おわり
よく見る保存画面を実装することができました!