AudioPathHelper.swift 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. import Foundation
  2. /// Utility helper to resolve dynamic iOS App Sandbox document paths for audio files
  3. /// and convert between absolute and relative paths.
  4. public struct AudioPathHelper {
  5. /// Resolves an audio file path (which could be nil, a relative filename, or an outdated absolute sandbox path from a prior app launch)
  6. /// to a valid, existing URL in the current app container's Documents directory.
  7. public static func resolveURL(for path: String?) -> URL? {
  8. guard let path = path, !path.isEmpty else { return nil }
  9. let fm = FileManager.default
  10. // 1. Direct check: If path exists as-is, return it
  11. if fm.fileExists(atPath: path) {
  12. return URL(fileURLWithPath: path)
  13. }
  14. // 2. Dynamic Sandbox check: Extract filename and search in current Documents directory
  15. let filename = (path as NSString).lastPathComponent
  16. guard !filename.isEmpty else { return nil }
  17. if let documentsURL = fm.urls(for: .documentDirectory, in: .userDomainMask).first {
  18. let candidateURL = documentsURL.appendingPathComponent(filename)
  19. if fm.fileExists(atPath: candidateURL.path) {
  20. return candidateURL
  21. }
  22. }
  23. return nil
  24. }
  25. /// Converts an absolute or relative file path into a relative filename (e.g. "merged_123.m4a") suitable for persistent storage.
  26. public static func relativePath(from pathOrURL: String?) -> String? {
  27. guard let pathOrURL = pathOrURL, !pathOrURL.isEmpty else { return nil }
  28. return (pathOrURL as NSString).lastPathComponent
  29. }
  30. }