last updated

demo

Description

I recently moved to Thailand, and i was having a lot of trouble downloading files because all of the ISPS here throttle the internet speed on a per connection basis. So i went to download my favorite download manager Speed Download by yazisoft and it turns out the company recently drop support for it.

So i began searching for decent and solid download managers with a nice GUI and i couldn't find any... I was kind of excited because it was going to give me an excuse to get into cocoa programming which i have been meaning to do for a couple of years.

And thats why Fat Pipe exists!

Details

Like most of my personal projects they tend to be ice bergs. You never really know how long something will take to build to your own expectations. This was going to be my first app store submission, and i was unsure how difficult the process was going to be.

But some of the features i needed

  • Plugin support for Chrome, Safari, Firefox, Opera
  • Large amount of concurrent connections
  • Queueing
  • Pause/Resume
  • File/Folder filters
  • Saved basic auth
  • Notifications
The first thing i bashed out was a little proof of concept downloader in C, and it seemed to work fine. Then i decided to make it so that the cocoa app spawns a downloader task for each download (similar to how chrome handles its tabs). This all worked great.
 
Extensions

After i had a basic working concept i decided to figure out how the extensions would function. I previously had decent Firefox extension experience back in 2009, and up to date experience with Chrome.

The chrome extension was extremely easy to create, and i was able to natively hook into the cookie system and everything. I even went to the extent of having chrome resolve redirection urls by overriding the http request system and snagging the last Location change request.
 
The safari extension started out to a great start, apple made it pretty easy to get something basic running but then i quickly ran into problems with their lack of support for a cookie api. I ended up having to rig up my own. However the one thing i really liked about safari extensions was that you can actually make safari directly prompt an extension install from a file.
 
The firefox extension was initially very difficult because when googling there are too many results that relate to the older way of doing things and they just recently rehauled the whole system. Their new system is called the Firefox Add-on SDK, and it is truly a beauty compared to the previous way of doing extensions. They also had a great way to hook into their cookies just like chrome.
 
The opera extension was not going to be built until i realized that opera decided to completely clone the way extensions work in chrome. All i had to do to get my extension working in opera was drag and drop it in there... Talk about easy! However their approval process it a bit more strict than Mozillas, Opera rejected my submission for using an outdated library.
 
All of the extensions communicate to the app via a custom protocol that the app subscribes too.
 
like mycustomprotocol://BASE64PAYLOAD
 
Features

I tried to make a list of 1.0/2.0 features but they all ended up in 1.0.
 
Road Blocks
 
Well there are few i ran into :(
 
The largest issue was forgetting to enable sandbox mode when i started making the app. Later down the road it turned out that almost everything my app did had to be changed in order to conform to the sandbox rules. One of the most annoying things was storing/retrieving the user selected download locations for the filters feature.
 
The second biggest time suck was not doing any research on the app approval process. I got rejected once for not closing the rest of my app when the user closes the main window, and a second time for not removing unrelated default menu items.
 
The third was realizing that i couldn't update the apps screenshots after a version was approved, and i would have to go through the whole approval process again (which takes about a week each time).

Learned

I had a decent objective-c understanding from a few failed project ideas over the previous years. The big thing that surprised me was how much better the development process has become. XCode has really evolved into a wonderful IDE, its also extremely stable now.

I had my first taste in releasing an app to the app store, and i have to admit its kind of addicting. I hope to create more apps.

I was also fairly impressed with how easy browser extensions have become!