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 (http://objectivechackathon.appspot.com/).

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.

Usage

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

pod "GoldRaccoon"

otherwise

  • 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>
                                                              user:<username>
                                                          password:<password>];
  • 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:
addRequestForListDirectoryAtPath:
addRequestForCreateDirectoryAtPath:
addRequestForDeleteFileAtPath:
addRequestForDeleteDirectoryAtPath:
addRequestForDownloadFileAtRemotePath:toLocalPath:
addRequestForUploadFileAtLocalPath:toRemotePath:
  • start the manager
[self.requestsManager startProcessingRequests];

Conclusion

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.