Petit soucis d'acces aux contenu de fichiers dans le dossier Document

Bonjour,

après avoir arrête de programmer en swift il y a quelques années,
je m’y remet et je n’arrive pas a comprendre mon probleme.

je me suis fait un petit script pour macos afin de lire le contenu du dossier Documents et de ses sous-dossiers.
le script semble fonctionner, mais impossible d’avoir la liste des fichiers et sous-dossiers de Documents (dossier Documents de l’utilisateur par de l’application).
Voici le code en question.

func liste_fichiers()-> String{
    
    let fileManager = FileManager.default
    let homeDirectory = fileManager.homeDirectoryForCurrentUser //homeDirectoryForCurrentUser
    let cacURL = homeDirectory.appendingPathComponent("Documents")
    let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
    let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!

    do { ///Users/fabricelecha/cac40
        //let fileURLs = try fileManager.contentsOfDirectory(atPath: documentsPath )
        let fileURLs = try FileManager.default.contentsOfDirectory(at: cacURL, includingPropertiesForKeys: nil)
        print(fileURLs)
        for fileURL in fileURLs {
            print("Fichier : \(fileURL)")
        }
        print(documentsPath)
        print(cacURL.path)
    } catch {
        print("Erreur lors de la lecture du contenu du dossier : \(error)")
    }

    
    return homeDirectory.absoluteString
}

J’ai effectué plein de tests et le seul dossier sur lequel je peux afficher c’est le HomeUser.
Je n’ai pas d’erreur stipulant qu’il n’y a pas de dossier ou que le dossier est vide. La variable fileURLs reste vide.
le seul moyen que j’ai trouvé pour afficher le contenu c’est d’utiliser NSPanel, ce qui n’est pas des plus pratiques et cela utilise des vieux framework non mis à jour.
j’ai bien configuré l’accès de l’app aux dossier Document…et xcode peut accéder à l’ensemble du disque dur.
Si quelqu’un avait une voie pour résoudre ce soucis sur lequel je planche depuis bientôt deux jours, je suis prêt à vous écouter :slight_smile:

Fabrice

Hello,
pour ceux que cela intéresserait,
j’ai trouvé ce qui n’allait pas.
le script est bien fonctionnel, mais les accès étaient bloqués car l’app se trouvait dans une sandbox.
Cette sécurité (n’hésitez pas à me corriger si je me trompe), semble empêcher à l’application d’accéder au contenu des dossiers.
en désactivant cela, j’ai bien une demande normale d’accès aux dossiers.
Néanmoins, si quelqu’un connait une solution sans enlever la « sandbox », je suis preneur :grinning:

1 « J'aime »

Je n’ai jamais fait de dev macOS mais je sais qu’il y a eu un changement drastique du fonctionnement il y a quelques années : si tu veux que ton app soit sur le mac appstore il te faut qu’elle soit sandboxée (comme les apps iOS).
En revanche il existe des API système pour demander la permission d’accéder à certains dossier de l’utilisateur qui sont hors de ton bac à sable.
Ta solution fonctionne, mais ton script devra rester interne et tu auras du mal à le distribuer via les cannaux habituels. Si tu veux utiliser le Mac AppStore alors il te faut utiliser les nouvelles API de sécurité pour demander à accéder aux ressources externes à ton app.

Bonjour,
désolé pour la réponse tardive.
merci pour les informations Maxime.
Dans l’état actuel, ce ne sera qu’une app interne.
Mon but est de concevoir un petit programme qui est un explorateur de fichiers qui permettrait d’éditer des fichiers TXT, CSV sous forme de tableau et autres formats non compilés.

Si à l’occasion, tu connais une Api qui permette de faire lister les contenus de fichiers en dehors du sandbox, n’hésite pas à me le communiquer.
De mon coté, si je trouve une solution avec l’utilisation du sandbox, je le communiquerai aussi.

Cordialement

1 « J'aime »