From f1a380d105aee04fb9eeabf50ee08103efb2cd71 Mon Sep 17 00:00:00 2001 From: fish Date: Wed, 15 Jul 2026 23:55:36 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=9D=E5=AD=98=E5=A4=B1=E8=B4=A5=E6=97=B6?= =?UTF-8?q?=E8=BF=94=E5=9B=9E=E5=85=B7=E4=BD=93=E9=94=99=E8=AF=AF=E4=BF=A1?= =?UTF-8?q?=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Note/ClipStore.swift | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/Note/ClipStore.swift b/Note/ClipStore.swift index 4af3f45..6aa1ae8 100644 --- a/Note/ClipStore.swift +++ b/Note/ClipStore.swift @@ -21,6 +21,17 @@ struct Clip: Codable, Identifiable, Equatable, Sendable { } } +enum ClipStoreError: Error, LocalizedError { + case appGroupUnavailable + + var errorDescription: String? { + switch self { + case .appGroupUnavailable: + return "无法访问 App Group 容器,请检查签名和 entitlements 配置。" + } + } +} + actor ClipStore { static let shared = ClipStore() @@ -31,13 +42,13 @@ actor ClipStore { private var cachedClips: [Clip]? - private var fileURL: URL { + private func fileURL() throws -> URL { let fileManager = FileManager.default guard let containerURL = fileManager.containerURL(forSecurityApplicationGroupIdentifier: appGroupIdentifier) else { - fatalError("无法访问 App Group 容器: \(appGroupIdentifier)") + throw ClipStoreError.appGroupUnavailable } let directoryURL = containerURL.appendingPathComponent(subdirectory, isDirectory: true) - try? fileManager.createDirectory(at: directoryURL, withIntermediateDirectories: true) + try fileManager.createDirectory(at: directoryURL, withIntermediateDirectories: true) return directoryURL.appendingPathComponent(fileName) } @@ -55,7 +66,7 @@ actor ClipStore { return cached } - let url = fileURL + let url = try fileURL() let fileManager = FileManager.default guard fileManager.fileExists(atPath: url.path) else { cachedClips = [] @@ -93,7 +104,7 @@ actor ClipStore { } private func persist(_ clips: [Clip]) async throws { - let url = fileURL + let url = try fileURL() let data = try JSONEncoder().encode(clips) try data.write(to: url, options: .atomic) cachedClips = clips