Skip to content

Files 4.0

Compare
Choose a tag to compare
@JohnSundell JohnSundell released this 07 Sep 12:26
· 13 commits to master since this release
8c956bc

Files 4.0 brings a brand new, streamlined implementation, improved error handling, more thorough documentation, and a more modern API. Since it's a new major release, some breaking API changes have been made. Here's everything that's new:

  • The FileSystem class has been removed. To perform operations relative to the root of the file system, use the new Folder.root API instead. To use a custom FileManager, call managedBy() on any File or Folder.
  • FileSystem.Item has been replaced by the Location protocol, and FileSystem.Item.Kind has been replaced by LocationKind.
  • You can now consistently use either a name or path when using any API for creating or referring to files and subfolders within a folder.
  • Methods accepting a path now use the simplified at: label, rather than atPath:.
  • External argument labels have been removed for APIs that write new contents to a file. So write(string:) and write(data:) are now two overloads of the same method: write(_:).
  • All of the APIs for creating files now only accept Data as a file's initial contents. To write strings to a file, first create the file and then call file.write(string) on it.
  • File now has a creationDate property.
  • Folder now has static properties for accessing the current user's Library and Documents folders.
  • Error handling has been improved to now use a unified FilesError type, that always contains the path at which the error occurred, as well as a Reason - which can either be for locations, writes, or reads. See the LocationError, WriteError and ReadError type aliases for the three types of errors that Files can throw.
  • Computed properties that don't have O(1) time complexity have now been changed into methods instead. That includes name(), count(), and last() on file/folder sequences, since computing those requires enumerating the sequence. The time complexity of each sequence operation is now also documented.
  • FileSystemSequence is now Folder.ChildSequence, and each sequence can now easily be turned into a recursive one by accessing the recursive property. The same is also true for including hidden files, which is now done by accessing the includingHidden property on a sequence. The makeFileSequence(...) and makeSubfolderSequence(...) APIs have been removed in favor of constructing customized sequences using those new computed properties.

View build details and download artifacts on buddybuild:
Files (iOS, Files-iOS)