Actuellement nos fichiers ne sont disponibles que si le développeur les ajoute à l’application avant de la compiler. Dans la vie réelle cette application ne sert donc pas à grand chose.

Encore une fois, il existe une API pour importer des fichiers dans une application iOS, il s’agit de
UIDocumentPicker.
Le problème peut paraitre assez complexe pour un débutant, dans ce cas, pensez toujours à découper votre problème dans une suite logique d’étapes :
UIDocumentPickerUIDocumentPickerDelegate pour ajouter un documentVoilà !
Détaillons chaque partie maintenant
On pourrait utiliser le storyboard et faire la liaison via la technique du drag-n-drop avec l’assistant “IBOutlets”, mais ici on va le faire en code :
// Dans ViewDidLoad()
navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(addDocument))
#selector en Swift.add dans notre appel ?@objc devant la fonction ciblée par le #selector✅ Vous avez une fonction qui est appelé lors du clic sur un bouton dans la barre de navigation.
Maintenant il faut remplir cette fonction. On veut à présent lancer le picker système au clic sur le bouton.
Le fonctionnement d’un picker se fait en 2 étapes :
UIDocumentPickerDelegate, qui permet au développeur d’obtenir les informations du fichier choisit par l’utilisateur et d’en disposer dans l’application.Pour vous guider, utiliser le lien ci-dessous ⬇️
🛟 De l’aide sur comment réaliser cet exercice : https://nemecek.be/blog/155/how-to-let-user-select-file-from-files
💡 Utilisez une extension pour ajouter l’implémentation du protocole
UIDocumentPickerDelegateà votreDocumentTableViewController
✅ Vous êtes capable de lancer le picker
✅ Vous récupérez le fichier sélectionné par l’utilisateur
Il faut maintenant le copier dans le stockage de l’application.
Je vous donne une fonction pour faire la copie du fichier vers le .documentDirectory de l’application, qui est une URL spécifique que le système va nous fournir pour stocker des fichiers dans l’application.
func copyFileToDocumentsDirectory(fromUrl url: URL) {
// On récupère le dossier de l'application, dossier où nous avons le droit d'écrire nos fichiers
let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
// Nous créons une URL de destination pour le fichier
let destinationUrl = documentsDirectory.appendingPathComponent(url.lastPathComponent)
do {
// Puis nous copions le fichier depuis l'URL source vers l'URL de destination
try FileManager.default.copyItem(at: url, to: destinationUrl)
} catch {
print(error)
}
}
💡 La variable
documentsDirectorysera à utiliser pour récupérer la liste des fichiers dans le dossier de l’application et afficher la liste qui prendra en compte les documents importés.
💡 En effet, sous iOS, le développeur n’a pas accès aux vrais URLs de l’appareil pour des questions de vie privée et de sécurité. Aussi nous devons nous conformer à ce que le système nous fournit.
🛟 https://www.hackingwithswift.com/books/ios-swiftui/writing-data-to-the-documents-directory
defer ?✅ Vous avez stocké le fichier dans l’application
Il faut maintenant l’afficher. Pour ça vous allez devoir le récupérer dans le dossier de l’application, en faire un DocumentFile et l’ajouter à la DataSource de votre TableViewController.
‼️ Attention ! On doit pouvoir lister tout types de fichier, y compris autre choses que des images. Pensez à modifier vos fonctions en conséquences, le QLPreviewController est capable d’afficher quasiment tous les types de fichiers.
Normalement vous devriez y parvenir sans trop de difficultés grâce à ce que nous avons vu avant.