iOS Developer Tools
Tools can make your life (as a developer) much easier. Having a solid toolbox lets you work faster and achieving your goals easier. Beside tools you also need some good resources to learn from and stay up to date. This list is basically split up into three parts:
I would be happy when you find some of the tools and resources helpful. Please also give me feedback
if I missed some oy your favorite tools/resources. I'd be happy to add more items to the list 😉
"Technology is nothing. What's important is that you have a faith in people, that they're basically good and smart, and if you give them tools, they'll do wonderful things with them."
Ok this one is pretty obvious. Xcode ist Apple's IDE for iOS, watchOS, macOS and tvOS development. It ships with a whole bunch of powerful tools (some of them are mentioned below) that make development for Apple platforms (more) easy. Beside the source-code editor and the integrated debugger Xcode comes with a profiler (Instruments), a UI editor (Interface Builder), Simulators, Version Editor and much more.
Hierarchy View Debugger
The Hierarchy View Debugger lets you pause your app and inspect the view hierarchy. You can then see further investigate each single UI item and see its properties in the Inspector.
Memory Graph Debugger
Similar to the Hierarchy View Debugger you can also make a snapshot of your app's current memory state. The Memory Graph shows allocated objects on the heap and their connections. This graph can help you find memory leaks. You can also export the memory graph to a .memgraph file and further analyze it with command-line tools like vmmap and malloc_history.
vmmap gives you an overview over your app's virtual memory usage. By providing a .memgraph file as input you can see which memory regions use the most memory.
usage: vmmap -summary myapp.mempgraph
You can even dig further by specifiying which memory region you want more info about using grep
usage: vmmap myapp.memgraph | grep "MALLOC_LARGE"
But that's not all we can have. Read about malloc_history for more detailed information about your memory...
By enabling Logging of the Malloc Callstack in Xcode (Product->Scheme->Run->Diagnostics->Logging->Malloc Stack) you can get even more out of the .memgraph file. This option enables you to see the actuall callstack for a specified memory address.
GPU Frame Capture
When your app uses Metal or OpenGL you can create so called GPU Frame Captures. This captures the next rendered frame of your app and you can inspect each render command and all resources (textures, meshes, shaders, etc.) used for this frame and the final output.
Xcode Instruments is Xcode's performance analysis tool. It support s you in profiling your app for all mind of performance metrics, like allocations, CPU usage, system activity and much more. Whenever you want to know why your app is slow or does use too much memory, Xcode Instruments is the tool to use!
With PaintCode you can turn vector graphics into Swift or Objective-C code by utilizing UIKit and Core Graphics. You can also import vector graphics formats like PDF, SVG, PSD, AI and EPS and let PaintCode generate code for this. Why should you do this? It's pretty simple: by not embedding rasterized images in your app you stay resolution independent and your graphics will look amazingly sharp, regardless of how much you zoom into or scale them.
Kite is similar to PaintCode but it also support creating animations that then get transformed to native Core Animation source-code. It also works with prototyping tools like Adobe XD CC and Sketch.
Asset Catalog Creator
Asset Catalog Creator helps you creating asset catalogs for your app. All you need to do is provide an image and Asset Catalog Creator creates a full set of icons or launch screens for you.
Sourcetree is the git client I'm using on a daily basis. I know there are many alternatives out there (command-line) but this one works good for me and it's for free!
Dash is an API documentation browser that lets you quickly search documentation offline. Dash supports a lot of so called documentation sets (e.g. iOS, Swift, C++, HTML, etc.) that you can download as needed. Further Dash lets you store code-snippets for easy reuse.
Pusher is a small tool that lets you trigger Push Notifications right from your Desktop via Apple's Push Notification Service (APN). You can also specifiy a payload which makes remote notification testing a breeze. And it's open-source!
Wireshark is a network protocol analyzer that let's you monitor network traffic in much detail. You have to know what you are looking for and you need a pretty good understanding about computer networks to get most out of it. But then it is an invaluable tool.
Charles is an HTTP Proxy that enables you to see all HTTP and SSL/HTTPS traffic between your machine or device and the Internet. This way you can easily monitor what is being transferred and how much data is being transferred.
Paw is an HTTP client that lets you test any REST API. You see all details of each request/response that is happening and you can easily add payload in json format.
Rested is similar to Paw in a way that it lets you send HTTP requests and view the response. You can also modify the request's payload and header.
Hopper enables you to reverse-engineer your executables. It can also reconstruct procedures with local variables. This tool is handy when you are keen to know what code ends up in your app or if you are wondering why your executable is so large or if you want to know which instructions are being generated by the compiler.
Thank you for reading this blog post. If there's anything I missed, please contact
me. If you enjoyed it please share my post or connect via Twitter or Instagram. 🤓