This is a Swift translation of the Objective C version. Took some inspiration from this repo as well
DirectoryWatcher
is a lightweight class that uses GCD to monitor a given path for changes.
When any change to the directory occurs, DirectoryWatcher
starts polling the monitored path, making sure that file transfers are finished before posting notifications.
CocoaPods (recommended)
# For latest release in cocoapods
pod 'DirectoryWatcher'
Carthage is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks.
You can install Carthage with Homebrew using the following command:
$ brew update
$ brew install carthage
To integrate DirectoryWatcher into your Xcode project using Carthage, specify it in your Cartfile
:
github "GianniCarlo/DirectoryWatcher" ~> 2.0.0
Run carthage update
to build the framework and drag the built DirectoryWatcher.framework
into your Xcode project.
The Swift Package Manager is a tool for automating the distribution of Swift code and is integrated into the swift
compiler.
Once you have your Swift package set up, adding DirectoryWatcher as a dependency is as easy as adding it to the dependencies
value of your Package.swift
.
dependencies: [
.package(url: "https://github.com/GianniCarlo/DirectoryWatcher.git", .upToNextMajor(from: "2.7.0"))
]
Monitor the Documents Folder
let documentsUrl = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
let watcher = DirectoryWatcher.watch(documentsUrl)
watcher.onNewFiles = { newFiles in
// Files have been added
}
watcher.onDeletedFiles = { deletedFiles in
// Files have been deleted
}
Call watcher.stopWatching()
and watcher.startWatching()
to pause / resume.
Monitor the Documents Folder and its subfolders
let documentsUrl = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
let watcher = DirectoryDeepWatcher.watch(documentsUrl)
watcher.onFolderNotification = { folder in
// New changes have happened inside one folder
// This folder could be a subfolder inside the root folder being watched
}
Call watcher.stopWatching()
and watcher.startWatching()
to pause / resume, or watcher.restartWatching()
to discard previous listeners and place new ones in case the hierarchy has changed