Как получить доступ к папке "tools" на рабочем столе через Filemanager в SwiftUI MAC OS для загрузки mp3 файла в audioPlayer?

Если mp3 файл добавить в проект, то все работает. Есть задача получить доступ к определенной папке, где будет порядка 10 mp3 файлов. Функция получает название файла и подгружает его в плеер.

func playSound(soundName: String) {
        guard let url = Bundle.main.path(forResource: soundName, ofType: "mp3") else { return }
        audioPlayer = try? AVAudioPlayer(contentsOf: URL(fileURLWithPath: url))
        audioPlayer.play()
        DispatchQueue.global(qos: .userInitiated).asyncAfter(deadline: .now() + 0.5) {
            audioPlayer?.play()
        }
    }

Я пробовал много вариантов, но получить путь к папке на рабочем столе не получается. Все пути при изменении в urls .documentDirectory .musicDirectory .userDirectory и других параметров ведут в проект.

 func playSound2(soundName: String) {
        
        let manager = FileManager.default
        let urls = manager.urls(for: .documentDirectory, in: .userDomainMask)
        if let url = urls.first {
            var fileURL = url.appendingPathComponent(soundName)
            fileURL = fileURL.appendingPathExtension("mp3")
            
            audioPlayer = try? AVAudioPlayer(contentsOf: fileURL)
            audioPlayer.play()
            DispatchQueue.global(qos: .userInitiated).asyncAfter(deadline: .now() + 0.5) {
                audioPlayer?.play()
            }
        }
    }

Ответы (1 шт):

Автор решения: schmidt9

Попробуйте удалить секцию App Sandbox на вкладке Signing & Capabilities в настройках таргета, по умолчанию приложение имеет доступ только к папкам внутри отдельной песочницы, при первом доступе к рабочему столу (попытке проиграть файл оттуда) у вас будет запрошено разрешение для доступа, вот пример проигрывания файла test.mp3 с рабочего стола

import SwiftUI
import AVFoundation

struct ContentView: View {
    
    @State var audioPlayer: AVAudioPlayer?
    
    var body: some View {
        Button("Play") {
            playSoundFromDesktop(soundName: "test.mp3")
        }
    }
    
    func playSoundFromDesktop(soundName: String) {
        do {
            guard let filePath = NSURL(fileURLWithPath: NSString("~/Desktop/").expandingTildeInPath)
                    .appendingPathComponent(soundName) else { return }
            audioPlayer = try AVAudioPlayer(contentsOf: filePath)
            audioPlayer?.prepareToPlay()
            audioPlayer?.play()
        } catch {
            print(error)
        }
        
    }
}

→ Ссылка