| 12345678910111213141516171819202122232425262728293031323334353637 |
- import Foundation
- /// Utility helper to resolve dynamic iOS App Sandbox document paths for audio files
- /// and convert between absolute and relative paths.
- public struct AudioPathHelper {
- /// Resolves an audio file path (which could be nil, a relative filename, or an outdated absolute sandbox path from a prior app launch)
- /// to a valid, existing URL in the current app container's Documents directory.
- public static func resolveURL(for path: String?) -> URL? {
- guard let path = path, !path.isEmpty else { return nil }
-
- let fm = FileManager.default
-
- // 1. Direct check: If path exists as-is, return it
- if fm.fileExists(atPath: path) {
- return URL(fileURLWithPath: path)
- }
-
- // 2. Dynamic Sandbox check: Extract filename and search in current Documents directory
- let filename = (path as NSString).lastPathComponent
- guard !filename.isEmpty else { return nil }
-
- if let documentsURL = fm.urls(for: .documentDirectory, in: .userDomainMask).first {
- let candidateURL = documentsURL.appendingPathComponent(filename)
- if fm.fileExists(atPath: candidateURL.path) {
- return candidateURL
- }
- }
-
- return nil
- }
-
- /// Converts an absolute or relative file path into a relative filename (e.g. "merged_123.m4a") suitable for persistent storage.
- public static func relativePath(from pathOrURL: String?) -> String? {
- guard let pathOrURL = pathOrURL, !pathOrURL.isEmpty else { return nil }
- return (pathOrURL as NSString).lastPathComponent
- }
- }
|