Setting up Charles Proxy and make it work behind VPN

Screen Shot 2017-12-21 at 1.04.50 AM

Charles Proxy is one of the most used tools in mobile developers kit.

Here is a brief on the steps required to make it work in an enterprise VPN setup.

I am using Charles proxy version 4.1.2 on mac.

  1. Download it from here and install it. Grant necessary permission.Screen Shot 2017-05-23 at 11.57.54 AM.png
  2. Make sure in your network settings, auto proxy is not turned on.Screen Shot 2017-05-23 at 11.17.16 AM.png
  3. One point to keep in mind is that any network settings related changes should be done before running Charles. Also, make sure to run the iOS simulator only after running the Charles.
  4. Run Charles and install the root certs for iOS simulators.Screen Shot 2017-05-23 at 11.31.41 AM.png
  5. Upon success, you should be seeing this:Screen Shot 2017-05-23 at 11.43.01 AM
  6. Now, you can see all the traffic originating from your mac machine. There are two ways to segregate the data in the UI. They are Structure and Sequence. In the sequence mode, you can apply filter and see only traffic data you are interested in.
  7. Structure Views.png
  8. Sequence View with filter appliedse.png
  9. On a side note, it is a good idea to keep the request and response separate in UI.Screen Shot 2017-05-23 at 11.58.17 AM.png
  10. Run your Xcode project and identify the traffic to the domain you are interested in. At first, you would see the encrypted content like below. I just opened in iOS simulator’s Safari app.Screen Shot 2017-05-23 at 12.05.20 PM.png
  11. In the above example, we are interested in In order to see the content in plain text we need to enable ‘SSL Proxying’ for this domain. There are multiple ways to do this. The easiest is to right click the domain in the Structure View and select the option ‘SSL Proxying’ from menuUntitled.png
  12. You should see a blue globe like icon next to all domains, whose content is decrypted or readable by Charles.

 Screen Shot 2017-05-23 at 11.50.19 AM.png

13. Once, done you can see all the traffic in plain textScreen Shot 2017-05-23 at 12.24.17 PM.png

You can also set breakpoints against a specific domain and edit the requests/responses based on your needs.There are no extra steps to be done if you are developing behind VPN, based on my experience.

Setting up Charles Proxy and make it work behind VPN

Installing certs in iOS Simulators

In older version of Xcode, installing SSL certs were done by simply dragging and dropping SSL certs into the simulator and by following the prompts till the installation is complete.

In addition to dragging and dropping SSL certs to the simulator, you need to do one more step.

General -> About -> Certificate Trust Settings -> “Enable Full Trust for Root Certificate” for your particular certificate

Screen Shot 2017-05-23 at 10.58.21 AM

Screen Shot 2017-05-23 at 10.58.33 AMScreen Shot 2017-05-23 at 10.58.39 AMScreen Shot 2017-05-23 at 10.58.46 AMScreen Shot 2017-05-23 at 10.59.01 AM

Screen Shot 2017-05-23 at 11.21.53 AM

Installing certs in iOS Simulators

Learning Python


The steps to learn Python as I see it, are below:

1. Learn the basics:

2. Build on top the basics:

3. Strengthen, what you know:



Learning Python

Learning Objective C


Here are the steps that a beginner need to take in order to get a good grasp over Objective C.

The below worked for me. Should  work for anyone.

1. Learn the language, Objective C.

  • Complete the book ‘Programming in Objective C’ by ‘Stephan.G.Kochan’. Available here.
  • Watch the video series ‘Objective-C Essential Training’ by ‘Simon Allardice’ in ‘

2. Learn to create iOS applications using Objective C.


Learning Objective C

Concepts every senior iOS developer should know.


This is a summary of concepts, that every senior iOS developer should know (Not in the order of priority). Add “what to use, when” with every headers as you read.

Suggestions are welcome.

Different architecture patterns:

MVC, MVVM ,Clean Architecture ,Viper …

Different source control options:

Git, Subversion etc. Services like Github, GitLab ….

Different Dependency manager options:


Different Data store Options:

Coredata, realm, xml, file, SQlite, FMDB, SQLCipher …..

Different choices in programming methodology:

Functional Reactive Programming, Object Oriented Programming, Protocol Oriented Programming
Frameworks : Reactive Cococa, Reactive Swift, RxSwift, RxCocoa…

Different choices in solution implementation:

Native, Hybrid etc.
Frameworks : Angualar2, ReactNative, Xamarin, Cordova …..

Different options to assure code quality:

DI, Unit testing, Test Automation, TDD, BDD, Styleguide, clang-format (automated style guide)
Frameworks :  XCTest, iOS Snapshot Test Case, KIF (iOS Integration Testing Framework)…

Different process to assure quality:

Effective Code reviews
Tools : Crucible, Atlassian Stash, Differentials
Frameworks : ObjcLinte, SwiftLint ….

Different Options to send push notifications:

APNS, Firebase, Thirdparty Options like Urban Airship…

Different Options to track user behavior + analytics:

Google Analytics

Different Options to track report and analyze app crashes:

Crashlytics, Fabric ….

Different Options to distribute apps for prod and test:

Enterprise vs Consumer facing (Apple Appstore), Hockey …..

Different Options to deploy apps remotely:

MobileIron, Airwatch….

Different Options for CICD:

Travis, Jenkins …..

Different Options to track the project:

JIRA, Phabricator …..

Concepts every senior iOS developer should know.

Creating split zip archive in mac


In terminal, execute the command below:

zip -r -s 64 FolderName/

Note that the default unit is in MB. As per your need, you can use k(KB),g(GB) or t(tb).

For unarchiving, you may need to use third party tools such as Keka or Unarchiver.


Creating split zip archive in mac