Sunday, February 23, 2014

Usefull Plugins for Xcode

What’s this all about?
This is just a short collection of some useful Xcode 4/5 plugins I use. Most of us Cocoa developers, I guess, are looking about for making our development environment a more friendly and “warm” place with features enriching the development experience.
This list is far off being complete and will be extended permanently. So if you like it you should take a look at it from time to time.

Xcode plugin to uncrustify the source code opened in the editor.
UncrustifyX Github-Repository.

This project includes plugins (known as fixins) that extend Xcode and fix some of its annoying behaviors.
XCFixins Github-Repository.

XCode 4 plugin to make HOME key jump to the first non-whitespace line of code.
Xcode_beginning_of_line Of Line Github-Repository.

Dash Plugin for Xcode
This plugin allows you to use Dash (I think, this is a Must-Have!) instead of Xcode’s own documentation viewer when using option-click (or the equivalent keyboard shortcut) to view the documentation for the selected symbol.
Dash Plugin Github-Repository.

A magic button in Xcode to exterminate the current project’s DerivedData directories.
Exterminator Github-Repository.

Xcode plug-in that provides autocomplete for imageNamed: calls.
KSImageNamed Github-Repository.

Plugin for Xcode to make working with colors more visual. Every time when place the cursor on a UIColor/NSColor code fragment it will show the current color of this code as an overlay. By clicking this color overlay you can edit the value just with the standard OS X color picker.

Mini Xcode
This is a plugin that makes it easier to run Xcode without the main toolbar. It adds keyboard shortcuts for selecting the active scheme and device, and a compact popup menu in the window title bar that shows the currently selected run configuration.
Mini Xcode Github-Repository.

Xcode4 plugin showing completion for NSLocalizedString andlocalizedStringForKey:value:table:.
Lin Github-Repository.

XVim is a Vim plugin for Xcode. The plugin intends to offer a compelling Vim experience without the need to give up any Xcode features..
XVim Github-Repository.

Fuzzy Autocomplete for Xcode
A Xcode 5 plugin that adds more flexible autocompletion rather than just prefix-matching.
Please read also this very interesting article of the developer of this plugin about the way of reverse engineering Xcode with dtrace.
Fuzzy Autocomplete Github-Repository.

A plugin to collect and list the TODO, FIXME, ???, !!!
XToDo Github-Repository.

An Xcode plug-in to to use clang-format from in Xcode. With clang-format you can use Clang to format your code to styles such as LLVM, Google, Chromium, Mozilla, WebKit, or your own configuration.
ClangFormat Github-Repository.

Xcode plug-in which helps you write Javadoc style documents easier.
I use this plugin constantly!
VVDocumenter Github-Repository.

Xcode plug-in for CocoaPods with pod commands/console output, user notifications & code completion.
KFCocoaPodsPlugin Github-Repository.

Alcatraz is an open-source package manager for Xcode 5. It lets you discover and install plugins, templates and color schemes without the need for manually cloning or copying files. It installs itself as a part of Xcode and it feels like home.
Alcatraz Github-Repository.

SCXcodeMiniMap is a plugin that adds a source editor MiniMap to Xcode.
SCXcodeMiniMap Github-Repository.

Rultech Blog - Wordpress
Rultech Blog - Blogspot
Rultech Knowledge Base - Knowledge Base
Pro!deaClub - Blogspot 

Monday, February 3, 2014

Testing on Android : Unit Tests

JUnit Tests

There's no reason you can't use normal JUnit 4 testing for Android applications... as long as you stay away from anything Android.

Normally you compile against the SDK's android.jar, which contains nothing but stubbed methods that throw exceptions when run.  When you actually upload your APK to a device, it uses the device's implementations of all those stubs.  As a result, when running normal unit tests in your IDE, you get no access to those framework implementations (instead receiving mountains of exceptions).  This is not a big deal if you're testing some simple functionality that doesn't touch Android itself.


            Fast and easy
            Cannot use any Android framework classes

The Android Testing Framework

The Android testing framework is the official method of unit testing on Android.  It loads your application onto a device, then runs JUnit-based test suites.  Since it runs on the actual OS you can use the Android framework as you normally would in your application and can conduct a series of realistic tests that way.

Ostensibly the testing framework is unit testing, but the slowness of having to fully compile and upload your app onto a device before executing any tests makes testing slow.  Plus, you have to make sure you've got a device attached or an emulator running.  As a result, I might consider the testing framework for semi-regular tests (e.g., whenever you push a new commit, or nightly tests) but I would have trouble using them while actively developing.


            Access to the Android framework
            Requires attached device or running emulator
            Uses JUnit 3 (instead of the newer JUnit 4)


Robolectric is a project that unifies the speed of unit testing with the ability to access the Android framework.  It does this by implementing all those stubs with mocked classes.

Having tried it out, it is lightning fast and works as expected.  I'm also impressed with the amount of active development on it - this is a rapidly improving framework.  However, the active development does take a toll; documentation is a bit lacking, plus some new versions of Robolectric break things in previous versions.  Plus, it can't mock everything - for example, inter-app communication - since it's not on an actual Android OS.  That said, the benefits here far outweigh the negatives when it comes to unit testing Android.


            Can access mocked Android framework
            Actively developed
            Not the true Android framework
            Not everything is mocked
            Lacking documentation

Rultech Blog - Wordpress
Rultech Blog - Blogspot
Rultech Knowledge Base - Knowledge Base
Pro!deaClub - Blogspot