Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time


Modern implementation of a file monitoring system for iOS

Version License Platform

iMonitorMyFiles provides a simple Objective-C interface for responding to file system changes in iOS. If your users can create, modify, and/or delete files in your app's sandbox, this library provides a way to respond to those events. It also insulates you from a low-level C API (yikes!).


To run the example project, clone the repo, and run pod install from the Example directory first.


Your app must target iOS 7.0+.


iMonitorMyFiles is available through CocoaPods. To install it, simply add the following line to your Podfile:

pod 'iMonitorMyFiles', '~> 0.1.0'

and use the TABFileMonitor class for all your file monitoring needs:

#import <iMonitorMyFiles/TABFileMonitor.h>

How it works

File monitoring is achieved by creating what GCD calls a "dispatch source" for whatever file or folder you want to monitor. When creating a dispatch source, you provide three interesting things:

  1. A file descriptor that points to the file or folder
  2. Flags to describe what kind of events you want to be notified about (file was modified, file was written to, etc.)
  3. The queue on which to send these event notifications (the main queue, a background queue, etc.)

After creating a dispatch source, you then set blocks of code to be executed when an event occurs or when the source is canceled (destroyed). In the block you set for when an event occurs, you can determine which event occurred (if you registered for more than one type), and proceed accordingly with if...else...then or statements.

In order to continue monitoring a file after it has been deleted and recreated, my code destroys the dispatch source and file descriptor and subsequently recreates them. I did this because I noticed in testing that some applications invalidate the file descriptor we're using whenever they modify the file.

Events to be notified about

  • DISPATCH_VNODE_ATTRIB : The file's metadata changed.
    • This includes date modified, date last opened, etc.
  • DISPATCH_VNODE_DELETE : The file was deleted.
  • DISPATCH_VNODE_EXTEND : The file changed size.
  • DISPATCH_VNODE_LINK : The file's object link count changed.
  • DISPATCH_VNODE_RENAME : The file was renamed.
    • This is the notification that lets you know your file descriptor is now invalid.
  • DISPATCH_VNODE_REVOKE : The file was revoked.
  • DISPATCH_VNODE_WRITE : The file was modified.



Travis Blankenship, Sawtooth Apps LLC


iMonitorMyFiles is available under the MIT license. See the LICENSE file for more info.


Modern implementation of a file monitoring system for iOS







No packages published