Skip to content

GianniCarlo/DirectoryWatcher

Repository files navigation

This is a Swift translation of the Objective C version. Took some inspiration from this repo as well

DirectoryWatcher

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.

Installing

CocoaPods (recommended)

# For latest release in cocoapods
pod 'DirectoryWatcher'

Carthage

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.

Swift Package Manager

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"))
]

Usage (DirectoryWatcher)

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.

Usage (DirectoryDeepWatcher)

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