{"id":1123,"url":"https://github.com/Augustyniak/FileExplorer","last_synced_at":"2025-08-02T04:30:57.101Z","repository":{"id":56911262,"uuid":"70581409","full_name":"Augustyniak/FileExplorer","owner":"Augustyniak","description":"FileExplorer is a powerful iOS file browser that allows its users to choose and remove files and/or directories","archived":false,"fork":false,"pushed_at":"2021-08-24T16:41:02.000Z","size":37825,"stargazers_count":750,"open_issues_count":35,"forks_count":112,"subscribers_count":18,"default_branch":"master","last_synced_at":"2025-07-10T20:45:25.713Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Augustyniak.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-10-11T10:15:52.000Z","updated_at":"2025-07-06T15:11:07.000Z","dependencies_parsed_at":"2022-08-20T20:20:47.385Z","dependency_job_id":null,"html_url":"https://github.com/Augustyniak/FileExplorer","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/Augustyniak/FileExplorer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Augustyniak%2FFileExplorer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Augustyniak%2FFileExplorer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Augustyniak%2FFileExplorer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Augustyniak%2FFileExplorer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Augustyniak","download_url":"https://codeload.github.com/Augustyniak/FileExplorer/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Augustyniak%2FFileExplorer/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":268334609,"owners_count":24233793,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-02T02:00:12.353Z","response_time":74,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-01-05T20:15:39.403Z","updated_at":"2025-08-02T04:30:54.868Z","avatar_url":"https://github.com/Augustyniak.png","language":"Swift","readme":"\n\nFileExplorer (iOS 9.0+)\n==============\n\n👷 Project created and maintained by [Rafał Augustyniak](http://augustyniak.me). You can find me on twitter ([@RaAugustyniak](https://twitter.com/RaAugustyniak)).\n\n\nIntroduction\n-----------------\n\n[![Twitter: @raaugustyniak](https://img.shields.io/badge/contact-@raaugustyniak-blue.svg?style=flat)](https://twitter.com/raaugustyniak)\n[![CocoaPods](https://img.shields.io/cocoapods/v/FileExplorer.svg?style=flat)](https://github.com/Augustyniak/FileExplorer)\n[![Platform](https://img.shields.io/cocoapods/p/FileExplorer.svg?style=flat)](http://cocoadocs.org/docsets/FileExplorer)\n[![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg?style=flat)](https://github.com/Augustyniak/FileExplorer/blob/master/LICENCE.md)\n[![Swift Version](https://img.shields.io/badge/Swift-3.0-orange.svg)]()\n\n\n![iOS](Resources/General.gif)\n\nFileExplorer is a control designed to provide an easy way to browse and interact with local file system on iOS devices. It works as file browser with additional possibility of deleting specified files and/or directories and possibility to choose files and/or directories.\n\n\n         | Main Features\n---------|---------------\n👉 | Possibility to choose files or/and directories if there is a need for that\n🗑 | Possiblity to remove files or/and directories if there is a need for that\n\u0026#128269; | Built-in search functionality\n📚 | Documented\n\u0026#127968; | Out of the box support for image, audio, video and pdf files\n\u0026#128640; | Extendable API; Possibility to add support for any file type\n\u0026#128038; | Written in Swift\n\n\nImages             |  Audio Files | Videos | Directories  | PDFs | Preview\n:-------------------------:|:-------------------------:|:-------------------------:|:-------------------------:|:-------------------------:|:-------------------------:\n![iOS](Resources/Images.gif) | ![iOS](Resources/Audio.gif) | ![iOS](Resources/Videos.gif) | ![iOS](Resources/Directories.gif) | ![iOS](Resources/PDFs.gif) | ![iOS](Resources/Preview.gif)\n\nTable of Contents:\n-----------------\n\n* [Installation](installation)\n* [Basic Usage](#basic-usage)\n* [Customizations](#customizations)\n\t* [Deciding Which Files and/or Directories Should Be Visible](#deciding-which-files-andor-directories-should-be-visible)\n\t* [Using FileExplorer as a Way to Choose Files and/or Directories](#using-fileexplorer-as-a-way-to-choose-files-andor-directories)\n\t* [Deciding Whether User Can Delete Files and/or Directories\n](#deciding-whether-user-can-delete-files-andor-directories)\n* [Adding Support for Additional File Types\n](#adding-support-for-additional-file-types)\n* [Documentation](#documentation)\n\n\nInstallation\n-----------------\n\n### CocoaPods\n\n[CocoaPods](http://www.cocoapods.org) is the recommended way to add FileExplorer to your project.\n\n1. Add additional entry to your Podfile.\n\n  ```ruby\n  pod \"FileExplorer\", \"~\u003e 1.0.4\"\n  ```\n\n2. Install Pod(s) running `pod install` command.\n3. Include FileExplorer using `import FileExplorer`.\n\n### Source files\n\n1. Downloaded the latest version of the library using [link](https://github.com/Augustyniak/FileExplorer/archive/master.zip).\n2. Copy content of the downloaded (and unzipped) zip file into your project by dragging it into Project's navigator files structure.\n\n\nBasic Usage\n-----------------\n\n\nCheck out the demo for example usage of library. Make sure you read the [FileExplorer documentation on Cocoa Docs](http://cocoadocs.org/docsets/FileExplorer/1.0.4).\n\n\n### Basics\n\n1. Add following import in file of your project when you want to use RATreeView:\n\n   ```Swift\n   import FileExplorer\n   ```\n\n2. Simplest way to present File Explorer:\n\n   ```Swift\n\tlet fileExplorer = FileExplorerViewController()\n   self.present(fileExplorer, animated: true, completion: nil)\n   ```\n\nCustomizations\n-----------------\n\n\nFileExplorer allows for a lot of customizations. Some of them are discussed below.\n\n### Deciding Which Files and/or Directories Should Be Visible\n\n`FileExplorerViewController` has filters (`fileFilters` and `ignoredFileFilters` properties) which can be used to select which files or directories should or shouldn't be displayed to the user.\n\nSpecify which files **should** be visible to the user:\n\n```Swift\nlet fileExplorer = FileExplorerViewController()\n\n//Only files with `txt` and `jpg` extensions will be visible\nfileExplorer.fileFilters = [Filter.extension(\"txt\"), Filter.extension(\"jpg\")]\n\nself.present(fileExplorer, animated: true, completion: nil)\n```\n\nSpecify which files **should not** be visible to the user:\n\n```Swift\nlet fileExplorer = FileExplorerViewController()\n\n//Everything but directories will be visible\nfileExplorer.ignoredFileFilters = [Filter.type(.directory)]\n\nself.present(fileExplorer, animated: true, completion: nil)\n```\n\nCombining both types of filters:\n\n```Swift\nlet fileExplorer = FileExplorerViewController()\n\n//Only files with `.txt` extension that were modified prior to `referenceDate` will be visible\nfileExplorer.fileFilters = [Filter.extension(\"txt\")]\nfileExplorer.ignoredFileFilters = [Filter.Filter.modificationDatePastOrEqualTo(referenceDate)]\n\nself.present(fileExplorer, animated: true, completion: nil)\n```\n\n### Using FileExplorer as a Way to Choose Files and/or Directories\n\nConfigure `FileExplorer` so that user is allowed to choose files and/or directories:\n\n```Swift\nlet fileExplorer = FileExplorerViewController()\nfileExplorer.canChooseFiles = true //specify whether user is allowed to choose files\nfileExplorer.canChooseDirectories = false //specify whether user is allowed to choose directories\nfileExplorer.allowsMultipleSelection = true //specify whether user is allowed to choose multiple files and/or directories\nfileExplorer.delegate = self\n\nself.present(fileExplorer, animated: true, completion: nil)\n```\n\nYou are informed about choosen files by delegate callback:\n\n```Swift\npublic func fileExplorerViewController(_ controller: FileExplorerViewController, didChooseURLs urls: [URL]) {\n\t//Your code here\n}\n```\n\n### Deciding Whether User Can Delete Files and/or Directories\n\nConfigure `FileExplorer` so that user is allowed to remove files and/or directories:\n\n```Swift\nlet fileExplorer = FileExplorerViewController()\nfileExplorer.canRemoveFiles = true //specify whether user is allowed to remove files\nfileExplorer.canRemoveDirectories = false //specify whether user is allowed to remove directories\n\nself.present(fileExplorer, animated: true, completion: nil)\n```\n\nAdding Support for Additional File Types\n-----------------\n\n\n`FileExplorer` was built with expansibility in mind. It allows its users to register their own file types and provide thumbnails and preview view controllers for them. The whole process is simple and straightforward.\n\nIt starts with the implementation of class that conforms to `FileSpecificationProvider` protocol.\n\n   ```Swift\nclass CustomFileSpecificationProvider: FileSpecificationProvider {\n   public class var extensions: [String] {\n      return [\"foo\"]\n   }\n\n   public class func thumbnail(forItemAt url: URL, with size: CGSize) -\u003e UIImage? {\n      return nil; // FileExplorer uses default thumbnail if nil is returned\n   }\n\n   public class func viewControllerForItem(at url: URL, data: Data?, attributes: FileAttributes) -\u003e UIViewController {\n      let viewController = CustomViewController()\n      //configure your custom view controller here\n      return viewController\n   }\n}\n   ```\n\nAfter that, created class must be registered in an instance of `FileExplorerViewController` class:\n\n```Swift\nlet fileExplorer = FileExplorerViewController()\nfileExplorer.fileSpecificationProviders = [CustomFileSpecificationProvider.self]\n\nself.present(fileExplorer, animated: true, completion: nil)\n```\n\nThat's all! From now on instance of `FileExplorerViewController` uses `CustomFileSpecificationProvider` to provide thumbnails and view controllers for files with `foo` extension.\n\n\nDocumentation\n-----------------\n\nDocumentation is available on [CocoaPods](http://cocoadocs.org/docsets/FileExplorer/1.0.4).\n\nAuthor\n-----------------\n\nFileExplorer was created by Rafał Augustyniak. You can find me on twitter ([@RaAugustyniak](https://twitter.com/RaAugustyniak)).\n\nLicense\n-----------------\n\nMIT licensed, Copyright (c) 2016 Rafał Augustyniak, [@RaAugustyniak](http://twitter.com/RaAugustyniak)\n","funding_links":[],"categories":["Files","HarmonyOS","File"],"sub_categories":["Getting Started","Windows Manager","Other free courses","Linter","Widget"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FAugustyniak%2FFileExplorer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FAugustyniak%2FFileExplorer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FAugustyniak%2FFileExplorer/lists"}