I've never thought I will have a need for an iPad Pro. Back in November when it got released, I was using a 12-inch MacBook, which is the best laptop for mobile development. It's light and thin, I don't feel it's weight in my bag, and it has a Retina display. I travel a lot, so portability is my main concern when I get a new device. My MacBook was great, but I've always wanted to use iOS as daily driver. I was already using my iOS devices way more then my MacBook, but my work was still revolved around OS X. iPad Pro was the first iPad which made me think about switching to an iOS based workflow.

Moving my development environment to the cloud

The main problem with an iPad based Rails development workflow is that you can't run code locally. You have to find a way to host and run your web apps on a server somewhere. There are services for cloud based development already like Nitrous.io or Cloud9, my problem with those is that they are usually a complete IDE running in the browser. I want to use native apps, so I just need SSH access to a server somewhere running my code and hosting my Git repos. Getting a VPS for this is way cheaper. Also, there are some advantages using a remote server for web development:

  • I don't have to worry about messing up my development environment. Since everything is hosted on a single purpose server and always backed up, I can broke and replace the client which I’m connecting from. It feels liberating when you've spent so much time on administrative tasks to keep your development environment up and running.
  • I can access my server from any device, even from my phone. I know, it's not the best device to use for coding, but for quick fixes and running administrative scripts it's great. I also use two iPad Pros (iPad Pro devices?) in different contexts for work, so I can switch between them easily.
  • I can show changes instantly to a client. Lets say, I'm in a Skype meeting and the client wants a quick design change. I can update the code in realtime and get instant feedback. I also had problems with deploying to our staging servers before. Now I can just send a link of an app running on my server to one of my colleagues and he/she can check out the changes I did and have the staging server fixed later.

The cheapest way to have your own hosted development environment is getting a VPS, configure it, and use it over SSH. Before my Mac mini, I used a box from Digital Ocean that I set up on my own. It's cheap and quick. You can create backup images to reuse later if something gets messed up. They also have a great community site which have everything you'll need to know about setting up a VPS for different needs. I can't recommend them enough.

The other way is using a Mac mini as a server. There are companies doing Mac mini colocation, you can send your own Mini or buy one from them. You'll get a dedicated line, fix IP address, and great support, but I have a pretty good connection at home. Also, colocating a Mini is a bit pricy for my needs, so it was obvious to have my old Mac mini running at home. I'd bought a domain, then configured OS X Server on it. I was already familiar with OS X, so setting up a server was easy with a dedicated app. I have the same development environment as before, but I connect to it from different devices. It also works well as a home server with iOS, since OS X Server has services like Caching Server, file sharing, or device management.

The Mini runs Rails code and keeps my Git repos. There's a couple of great Git clients for iOS, but they store files locally, so I'd have to sync changes back to the server. Too keep the storage of my repos simple, I use Git over SSH in the command line. It's fine for basic stuff. If I have to do something more advanced, I just login into my Mac with Screens and use Tower there. I'm also using screen sharing for testing stuff in a desktop environment.

The iPad basically connects to the Mini over SSH and acts as a client. iOS has gone really far in terms of an everyday system and I try to use it as much as possible for everything.

Coda as a text editor

Currently my main editor is Coda on iOS. I really like that I can save sites and Coda can quickly load them as different development environments. I usually have a Terminal tab open to interact with the Rails console or Git next to currently opened files. Coda was really buggy at first. It crashed a lot on syntax highlighting and opening big files. Since the latest update, I can finally use it for work, although, I still have some issues with it:

  • Rails generates a lot of files and opening them is really annoying without Quick Open. Coda can browse remote servers fine, but finding a file is lot of tapping around in folders after folders. I'd like to see some kind of global search over remote files, even from Terminal (that would be even better, since I'm spending so much time in the command line).
  • Removing white spaces automatically is now possible thanks to EditorConfig support, but it only works on local files. The functionality is already in Coda, I just don't understand why isn't this working with remote files? Also, it should be an option in Editing settings, not hidden in .editorconfig files.
  • Although, Coda uses the local/remote concept of files even on the Mac, I'd like to see a way to open external files from Document Providers. There is Textastic which can do that and it works great in conjunction with Transmit.
  • Custom theme support would be really great too. It has a couple of themes built in, but I miss Solarized Dark from OS X. Coda on the Mac supports custom theme files since the beginning, so adding it to the iOS version would be the next logical step.

Why would I choose iOS over OS X for development?

iOS is forming at the moment. It's in active development and I'd like to embrace this. There are things way better to do on iOS and what can I say? I'm interested in trying out new things and see where technology goes in the next 5 years, but mainly to eliminate my dependence of a desk and work everywhere.

Many apps I used on my Mac were old ones like vim or Logic Pro (I edit podcasts too). iOS doesn't have those apps or they exist in a different form. Every app I use feels like a fresh start. Even a complex app like Coda is simpler than it's Mac counterpart. This is due to the fact that iOS started on the phone which have had smaller, single purpose apps from the beginning. People like to think of this as a disadvantage of iOS on iPad, but in my opinion it’s quite the contrary. I like to use native stuff over web apps and iPad have those. For example look at Trello, it has a great web app, but their iOS app is just stellar. I can search cards and boards from Spotlight, I don't have to open Safari, type an address, and try to find my stuff. Native apps have always been faster and on iOS you mainly find those in use.

So, I don't have the same set of apps as I had on my Mac since the platform is so different, but it doesn't mean I don't have great ones. Even my workhorses like Coda, Transmit, Prompt, or Screens blows my mind sometimes. Also, there is OmniFocus, OmniGraffle, Drafts, Trello, Workflow, Ferrite, Ulysses, and Overcast. Developers of these have thrown off the desktop mentality and reimagined them on iOS. I'm using more apps on iOS for the same task, but they are optimized for mobile which is great. They are even on my phone too.

Also, I've never used an iPad with cellular connection since I've never felt a need for it. But it really changes the way I think about the device. I'm on the same route as Myke, using two iPad Pros for different things. My smaller one has LTE which has made me to bring it everywhere. Always on cellular connection and those new kind of apps have a big role in my work now. iOS is not a translation of a desktop OS into a mobile OS. Instead, it's a completely new thing, which means I can't work the same way as I did before. I have to adapt new things and change my workflows to use my iPad efficiently. It sounds scary, but I'll gain new insights into my way of working and learn to do stuff in a different way. This is the biggest advantage of using mobile devices for development.