Storage Location Manager

Manages user-selected storage folder with security-scoped bookmarks.

Purpose

Allows users to choose where data is stored:

  • Default: ~/Documents/Minuta/
  • Custom: Any user-accessible folder
  • Persists selection across app launches

Protocol

@MainActor
protocol StorageLocationManagerProtocol {
    var storageURL: URL? { get }
    var hasValidStorageLocation: Bool { get }
    func selectStorageLocation() async -> URL?
    func resetToDefault()
}

Security-Scoped Bookmarks

Required for sandboxed apps to access user-selected folders:

  1. User picks folder via system picker
  2. App creates security-scoped bookmark
  3. Bookmark stored in UserDefaults
  4. On launch, bookmark resolved to URL
  5. startAccessingSecurityScopedResource() called

UI Integration

  • 405-settings-sheet shows current path
  • “Choose Folder” button opens picker
  • “Reset to Default” restores default location

First Launch

If no folder selected:

Related