We are working actively on the next version of Proxy.app - our http interception proxy for Mac OS X. Proxy.app served us well as a decent replacement for most java-based proxies like Burp, Zap, Paros and Charles but due to its original design it did not make it easier for us to add additional features at pace.
Naturally, we wanted to change that. This is why Proxy.app v2, was written from scratch, taking into consideration everything that we have learned in Proxy.app v1 but also engineered with simplicity in mind. It is a totally different product with very little code reuse and here are some of the technical details to get you excited about.
While PAV1 had its own document format (".proxy"), it was not implemented in the most natural way for Mac OS X. The document format was based around SQLite. The ".proxy" documents are special folders that bundle several files to look as one. This represents several challenges especially with distributing and sharing these documents. In order to copy, move or share any ".proxy" document you need to zip it first which is not optimal.
In PAV2 we change all this with a simpler, more natural architecture for Mac OS X applications. We rely 100% on CoreData to maintain all documents for us. We have 3 formats we can export to: XML, Binary and SQLite. Also, due to CoreData you get automatic support for document versioning, iCloud storage and much more.
After all the key benefit of using a native proxy is to be more integrated with your system and this is why, unlike all other java-based proxies, we make sure that we use native features that java-based applications cannot afford to.
The Almighty Proxy Architecture
PAV1 internal proxy was written in Objective-C. While, Objective-C is a pleasant language it doesn't provide you with enough expressiveness to create a complex architecture that is also easy to understand. This is why the proxy component in PAV1 was a bit like black magic and bugs were hard to spot early during the development cycle.
In PAV2 all of this changes. The proxy component is now written in Swift in a very easy to understand way. It allows us to add extensions to the proxy at will without messing about with the stable code. It is just so much better. While PAV2 will not support Sock4 and Sock5 out of the box initially, we already have stubs to add these missing components in the future when we have more time for features. Simply put, the architecture is awesome!
The User Interface
PAV1 was written before Storyboards were introduced in XCode for Mac OS X applications, which make user interface design and development a lot easier. Naturally, we had a lot of XIB files that describe the various parts of the the user interface. All of these parts were hooked together at runtime, which was working but very hard to reason about. Also, PAV1 had a lot of code that was only responsible for working with user interface components for no good reason.
In PAV2 the entire user interface is designed with Storyboards. Everything is laid out logically. We are forced to use autolayout everywhere so the interface is as responsive as it gets.
All of this means that we have freedom of expression and features will be easier to implement in a logical way without the need to interfere too much with already working code. Honestly, we cannot wait to see what we will achieve with the Proxy.app v2 code-base. As they say, the sky is the limit.
Free Version and Payed Upgrades
Now this is the hardest part. Initially we were planning to provide PAV2 as a free upgrade for PAV1. This would have meant that we only had to bump the version number and make a release on the Mac App Store. While this may work for some people, others who rely on the features and the behaviors of PAV1 will have hard time dealing with this change. PAV2 is a different software and to a large degree it is backwards-incompatible.
It is backwards-incompatible because it cannot run on older Macs due to SDK dependencies. It is also backwards-incompatible due to its document architecture. It requires getting adjusted to a new user-interface.
To avoid all of these problems and a painful transition process we simply do what game companies have been doing for years. Instead of providing an upgrade we release the software as version 2. It is separate product. It is unrelated to the previous version. If you want to use V1 you can still do so because we just brought the price down to $0.99 - crazy. You can also wait for V2 to be released and get a copy then. It is simple for everyone.
Now, what about demo versions? We have been asked a lot if we provide demo versions and the answer have been alway "no". It was simply too much process to make this happen. What we decided to do with PAV2 is to give the tool away for free for the basic version and provide a payed upgrade for the Pro version. We haven't worked out all the details yet but what that means for the majority of people is that you will be able to try Proxy.app before you buy it.
I hope this blog post sheds some light on what we have been doing with Proxy.app and I really hope that you like it. That being said, if you still want PAV1 you can get it for as little as $0.99. We will keep the price at this level until the tool is decommissioned and removed from the Mac App Store.