The solution to FTP on iOS: GoldRaccoon

GoldRaccoon is the iOS component to connect to a FTP service and do the following:

  • Download a file
  • Upload a file
  • Delete a file
  • Create a directory
  • Delete a directory
  • List a directory

Why another Raccoon?

First, because the humanity needs it.

This project started on 29/06/2013 for the Objective-C Hackathon (

GoldRaccoon aims to be an evolution of BlackRaccoon (which is an evolution of WhiteRaccoon), maybe the best (or at least one of the few) third-party component out there for handling FTP operations on iOS.

I forked the public repo of BlackRaccooon in May 2013 and added some improvements that have been merged into master to BlackRaccoon. Even though BlackRaccoon does what it says, I prefer to clean it a little and use a different and more extensible code structure.

Most of the code is therefore written by Valentin Radu and Lloyd Sargent, the main extensions I (Alberto De Bortoli) added are:

  • Done some deep refactoring for the bloating of the previous code;
  • Added missing (and reasonable) code conventions;
  • Added GRRequestsManager to manage all the different kind of requests using a FIFO queue;
  • Added a demo project.


If you'd like to include this component as a pod using CocoaPods, just add the following line to your Podfile:

pod "GoldRaccoon"


  • copy Sources folder into your project
  • add CFNetwork framework
  • import GRRequestsManager.h in your class
  • add a property for the manager
@property (nonatomic, strong) GRRequestsManager *requestsManager;
  • setup the manager somewhere (with hostname, username and password)
self.requestsManager = [[GRRequestsManager alloc] initWithHostname:<hostname>
  • optionally make your class conform to GRRequestsManagerDelegate, implement the delegate methods (basically success, failure and progress callbacks) and set your instance of this class as delegate for the manager
self.requestsManager.delegate = self;
  • add the requests to the manager using the following methods:
  • start the manager
[self.requestsManager startProcessingRequests];


While we know that FTP is going obsolete more and more every day, we also ackowledge the fact that legacy technologies are always gonna stick around for longer than desired.