Web/software development with an iPad

Guide

Using an iPad for web development can be easily split into two main parts:

  • Setting up the iPad as a thin client
  • Working in a remote environment

iPad as a thin client

Due to Apple’s lockdown of iOS and the lack of access to the native file system, you’re pretty much going to have to do the bulk of your development on a remote computer.

Even with good, solid apps for working locally — and I don’t feel these are quite there —the filesystem is the common language that makes web development on a regular OS as efficient as it is. The sandboxing on iOS means that there’s a lot of copying and referencing from one app’s sandbox to another. This adds friction, and is a common reason why others (even non-developers) struggle to move their workflow to an iPad.

Some developers seem to have had success working directly on the iPad using apps like Coda and Working Copy, but I’ve personally never found these to be suitable for my work.

In short, until Apple let us use the native filesystem in iOS — which they may never do — the iPad works best as a thin client, not because it’s the best thin client, but because of the remote environment it requires.

Even if you could use an iPad as you would a MacBook Pro, install your projects locally, work on them with GUI editors and apps, I’d still choose to use it as a thin client. The remote development environment is really the star of the show here, and you’d get the same benefits from using any device you choose in the same way. (Chromebook, Surface, netbook, laptop, desktop, even a phone - sort of…)

Apps

Without apps, you’re not going to get far! Almost all of these are paid, but in most cases I feel that the price is largely justified (and necessary…more on that later). iOS isn’t the ecosystem for you if you’re a devout believer in the “free beer” part of open source — you have to pay to install open source apps like Blink for example. This is because everything must come from the App Store, so you either buy it from there, or buy a developer license from Apple to install your own (open source) apps.

Blink Shell

Without Blink, I’m not sure that coding on an iPad would work. Sure there are other SSH clients for iOS, but Blink offers a lot more. Simple things like remapping keys help align your setup with that of your main computer, even if you’re lacking a much-used escape key…

I’ve mapped my Capslock to Ctrl which makes a lot of my tmux and vim commands much more comfortable. I’ve got access to the escape key in Vim thanks to the native Ctrl+[ binding, along with my own custom binding of jk.

However, I think that the best feature is Mosh support. For the unfamiliar, it’s basically an alternative SSH connection that has incredible “stickiness”. It rarely suffers from disconnects, even when I’m on flaky internet connections.

It also reduces latency by not waiting for the server to respond to a given input. If the server responds with something different, it corrects it. Some people have reported being able to work on a remote server during check-in for a flight, continue working on board from the crappy internet connection airlines offer, and carry on once they land; all without a single disconnect!

If anyone knows more about how Mosh works, or if I’ve got anything wrong, just shout and I’ll update it.

Ergo Web Tools

Browser devtools remain one of the biggest pain points when using iOS for web development. Ergo remains the best option, even though it’s very basic compared to Chrome or Firefox devtools. There’s no ability to extend it with plugins like React or Vue devtools (something I know was invaluable when I was working with them).

From what I can tell, it’s built by a single developer who recently had a baby. That’s made updates infrequent (understandable) and limited to bug fixes.

Whilst it’s the best of a bad bunch, I think there’s definitely room for someone to make the killer devtools app in the same way that Blink stands head and shoulders above other SSH clients.

Coda, Transmit & Prompt

Panic have a long history of making awesome software for macOS, and they were one of the first to jump into making “proper” apps for iOS. That said, they’ve been burnt quite badly by this choice and have decided to hold off on further development for now.

Coda for iOS (originally Diet Coda) is an all-in-one editor that replicates a lot of its desktop counterpart’s functionality. Personally I always struggled with Coda on the Mac, and find it even weirder on iOS.

It still heavily relies on pointer-input rather than keyboard and just feels like it’s designed for some super light static HTML work. Any dynamic app where the URL structure doesn’t directly map to the folder structure of where the template/file is stored doesn’t work. Basically you have to be writing vanilla PHP with a strict file = page structure, something I’m not sure many people still do.

Transmit on the other hand, I find wonderful. I was really sad when I heard that they were killing off the iOS version. If you already have a copy, it still works and will continue to do so, but they’ve pulled it from the App Store. It lacks the new protocols from Transmit 5, but I still think it’s one of the most useful apps for iPad, even if just for accessing S3 buckets.

Prompt is Panic’s version of Blink, and whilst pretty I don’t find it an equal to Blink. It matches it on a lot of features (creation and syncing of SSH keys) and adds a few more (snippets) but overall I find Blink the better of the two.

Personally — without Transmit — I don’t find Panics iOS apps compelling. I think they would do better to concentrate on single purpose tools and keep Coda, Transmit and Prompt separate rather than bundling the latter two into Coda. If they built a stripped back version of Coda that was just a great editor and nothing more, but integrated with the other apps well; they would do better in my eyes. That might not be possible with sandboxing though…


Aside: The fact that Panic have mentioned iOS as “Challenge” in their past four annual reports points to a larger problem within the iOS ecosystem — people aren’t willing to pay for professional quality apps. The result is that there are very few pro-level apps, and people keep thinking that iOS apps aren’t worth much money because they are all simple and not designed for proper work. It’s a vicious cycle that I’ve written about before, and one that Apple will need to address if they want to position the iPad as a credible platform. Apps like Affinity and now Adobe Photoshop coming to iPad should help change the tide, but there are still loads of great apps yet to be built for iOS.


Working Copy

I haven’t had much call to use Working Copy as I do all my development remotely so just use Git from the command line. That said I know many people like it, and use it for both source code but also version-controlled content (with static site generators and the like).

It works with external editors and the Files app, however this is just another area where the sandboxing of apps add friction to what should be an easy process.

What I will say however, is that I haven’t found a UI — regardless of OS — that makes using Git this intuitive.

Conclusion

There’s plenty of good apps available to let you work with an iPad as a think client. Things start getting a little more complicated when you start trying to use the iPad for more than that.

Whilst you can do somethings locally (Coda + Working Copy) you end up with a weird hybrid local/remote setup that only adds to the confusion and disconnect caused by sandboxing.

Personally I think that until (if) iOS is opened up a little more, working remotely is the sweet spot.


The Remote Development environment

I won’t go into this too much, as there are a multitude of options available depending on your preferences.

If you’re comfortable with using the command line, I’d recommend setting up a server on something like Digital Ocean, AWS or a dedicated provider like Hetzner.

Equally, you can also use a server that you host yourself, which could just be an old laptop. With some fiddling with dynamic DNS I’m sure most people could set up their own “server” at home using whatever hardware they have to hand. The advantages of this approach is the lack of a monthly cost and ease of external backups (although backups don’t get easier than DO’s snapshots). Potential drawbacks are slow/unreliable connections compared to a datacenter and less protection (most datacenters will have a degree of DDoS prevention built in).

If you’re not comfortable with a terminal, and prefer graphical editors like Atom, VSCode or Sublime then you can still work this way, but it’s not going to be as pleasant. Remote desktops are much heavier on bandwidth, often feel laggy and don’t work well on an iPad due to the lack of cursor input. You end up using your iPad as an oversized trackpad and it’s just not a great experience.

That said, if you’re committed to the iPad lifestyle but don’t want to get your terminal-fu on, there’s cloud development environments like Cloud9 and codeanywhere that run in the browser.

I’ve only really used codeanywhere, and that was a few years ago, but I found it to be very good. You’ll lack some customisation options within the environment but it provides plenty of sensible defaults and many of the common developer tools.

Aside: one studio that I worked with actually did everything on codeanywhere despite all having top of line iMacs sat on their desk. The unified environment, easy collaboration and ability to share a WIP project with a client were many of the benefits that they cited.


Reading List

There are now tonnes and tonnes of articles online. The release of the iPad Pro pushed the idea of the iPad as a full-time machine, even for demanding users like developers, into the mainstream.

Back when I first started researching this and trying it out (2011) there were literally two people talking about this online. To be honest, not much has been added to the conversation since then, despite large tech-publishers throwing in their tuppence. Most people still use the same (or similar) setup outlined in these first few articles.

Yield Thought, I swapped my MacBook for an iPad+Linode
Yield Thought, iPad + Linode, 1 Year Later
These two articles from Mark O’Connor are what convinced me that this setup is not only workable, but preferable. They were written in 2011 and 2012 respectively, and a lot has obviously changed since then, the introduction of the iPad Pro being the most obvious. These articles are now hard to find in Google, they’ve since been buried by a lot of Medium posts and mainstream articles that have greater SEO juice. I consider these to still be the best at explaining the how and the why.

Bonus article: Yield Thought, Setting up an iPad+Linode

Giving the iPad a full-time job – freeCodeCamp.org
This is a really interesting take on the subject. Justin’s methods are largely the same as others, but his motivations are quite different. He started - and carried on using an iPad - because he felt that it allowed him to focus more and even be a calmer, less stressed and more patient person. I haven’t noticed changes to that degree, but I do feel I focus better on the iPad and perhaps am a bit more chilled because I don’t fight my OS the entire time?

Creating A Remote Development Machine
A great article from Thoughtbot, walking you through step-by-step in setting up a remote development environment. If you’re unsure on how to do that, this is where you should start. This article leaves you shortly after your first SSH into the new droplet. If you get stuck here, I’d suggest looking at Digital Oceans articles about setting up, securing and hardening your server (will vary based on your distro/setup of choice).

Is anyone doing all their development on a server with vim via ssh? : vim
Whilst this Reddit thread doesn’t touch on iPads, it went a long way to convince me that working remotely is not as “out there” as it initially seems.

The iPad Pro as main computer for programming
Jannis covers all the bases of “how” and “why” with some awesome illustrations to boot!

Decoding
Zsolt has an interesting take on his choice of tools. He prefers new, reimagined ones like Coda over “old” ones like Vim. I can’t say I’ve come to the same conclusions RE: Coda, but I do agree there’s less cruft accumulated on iOS. The whole environment feels fresh and modern, which is also why it’s limited and lacks the flexibility some people need — it’s still a very young ecosystem!

Web Development with an iPad Pro – 48 Pixels
Another person in the pro-Coda camp.

Have a look around Google. You’ll find loads more, but I consider these to be some of the best starting points.

Why I work from an iPad

I’ve always liked iPads, even though I was very late to the party. My first iPad was the first-get 12.9” iPad Pro. They feel like pure magic in the same way that the first iPods did. They pack a silly amount of power, storage and battery life into a very small, well built package.

I know that other devices like Chromebooks, MacBook Airs and Microsoft Surface devices do the same (or even more!) but I’ve always had a preference for iPads.

That said, I will be the first to admit that they are still hamstrung as “proper work” tools. They have never quite managed to escape that “consumption vs. creation” debate despite the leaps and bounds that have been made.

As I mentioned above, I feel that’s largely due to the lack of pro-software and the instilled notion that iOS apps should be free or only cost £0.99. Apple along with third parties like Adobe, Affinity and Bear do seem to be tackling this and are starting to iterate that apps on an iPad can actually be better than their desktop counterparts by embracing features of the platform like multi-touch.

Most of the progress has been made with design or art focussed tools. Us developers have been largely left behind. This may change if Apple decide to one day upgrade Swift playgrounds into a fully-blown Xcode replacement. It’d be a herculean task - simplifying that UI enough for touch - but I think would herald the start of a new life for iOS. That along with a good photo editor/manager like Capture One would leave me with little reason to continue using macOS. That said, my favourite development environment isn’t actually iOS or macOS — it’s Linux.

However, I’ve unfortunately found Linux on the desktop to be an utter sh*t show. I know there are many happy desktop Linux users out there, but I am just not one of them. I’ve done a fair bit of distro-hopping over the past 3-4 months and have yet to find a distro or desktop environment that I could get on with. They all require a lot of fiddling or a blind eye towards the many inconsistencies between programs, UIs, typefaces, animations, etc.

The more you dig into fixing these issues — and that’s a huge rabbit hole to delve into — you realise just how broken things are. There’s X vs. Wayland, disputes between distros, outright arguments between developers supposedly working together, competing standards, etc. Most distros I never got audio, bluecoat or wifi working as it should, and none of them would work with a webcam (hardware to blame in that case though). As you’d expect from such a fragmented and divided ecosystem the experience is equally disjointed.

This is how I’ve settled on my iOS - Linux hybrid setup. I get to use Linux for everything it’s good for —package management that makes macOS and Windows blush, a solid shell environment, access to loads of open source software and great reliability and performance.

The joy of having an always on, incredibly powerful computer that’s exactly as I left it is hard to explain unless you’ve experienced it yourself. I can tap into this environment from wherever I am, whatever computer I happen to have in front of me, and it’s setup exactly as I like, ready to deploy a hot fix to a crashing website, run some tests on a codebase, leave long-running queries running whilst I get another coffee.

I work for myself and am responsible for all the software I produce. That means I’m effectively on-call all the time, which means that I need a computer to hand all the time in case of urgent issues with production sites/apps. Going to stay at a relative’s, going into town for a coffee, popping to the beach, no longer means carting my laptop with me in case theres an issue I need to urgently fix. Being able to administer quick fixes from my phone or iPad is liberating.

Sidenote: when you have these responsibilities, you don’t skip writing tests! :rofl:

Mark O’Conner’s articles (above) are what really sold me on this workflow. The device your using in many ways becomes irrelevant, but it allows me to choose the client that’s right for the rest of my needs, rather than have my work requirements dictate the hardware I purchase.

For everything else like web browsing, email, photo management, design/drawing, video calls I get to use a simple, lightweight and forward thinking OS with some awesome apps.

In many ways, it was Linux’s inability to work well as a desktop, let alone work well on a mobile device like a tablet or laptop that drove me to this setup. I don’t care about tweaking my browser. I don’t want to spend an hour of fiddling to get my email client working properly. I don’t want to boot up my computer to find that X.org isn’t playing ball today.

It looks like an unusual and complicated setup if all you’ve experienced is local dev on your laptop, but I actually find splitting the two responsibilities (development & everything else) makes for a much simpler setup. This is no different to how we reduce dependencies and coupling in our codebases.

Your thoughts

@AstonJ asked me to put together this wiki, but it’s just a starting point.

  • What are your experiences on working in this way?
  • Have you found any more good articles?
  • If you haven’t read much about this before, what are your thoughts now that you’ve read this (now very long!) wiki?
10 Likes

Just wanted to add a little after thought regarding your choice of remote development environment. I’ve been geeking out over the cost comparison of renting cloud servers or building and hosting your own.

I’ll spare you the numbers as this write up is already long enough, but here’s some general findings:

  • If you already own some hardware, and can use your existing home connection then this is the most cost effective option - essentially free.
  • If you don’t own some suitable hardware, and want to buy something cheap to do the job then you might be better off using one of the lower tiers on something like DigitalOcean (maybe uptown $40p/m). The breakeven point for low-powered hardware was much longer in most cases (around 2.5-3 years) and the systems are much less upgradeable/saleable at the end of it.
  • If you’re building something powerful, you’re almost always going to be better off building it yourself. Once you get above the £1000/$1400 point for a build, the break even with comparable dedicated hosts is around 18 months (taking into account electricity consumption at home). Most of the time these builds would leave me with a surplus of £60 per month compared to the hosted option, which you could use to make upgrades. You also have the resale of the components you’re swapping out. A Ryzen 1700X is still going to be worth some money in 18 months.
  • Be aware of your TDP. Most of the figures made sense when the system was only drawing 20-30W. Running closer to the TDP of my hypothetical 300W Ryzen system pushed break-even point back to 4.5 years and reduced monthly surplus to £20.
  • This assumes you’ll use your home internet connection which you’re already paying for.
  • The value of automated backups of cloud providers like Digital Ocean are hard to quantify, but compared to managing your own (dedicated hosting or self-host) there’s a fair amount of time (and worry) saved.

In general I’d say do as most people in the articles do: get yourself a cheap $5-20per month VPS and have a go.

If you later decide you need more power than this, look at self-building a system that meets your needs and running it at home for some decent savings.

3 Likes

I don’t use an iPad but similar setup here anyway. I have an Android Phablet phone thing (I don’t ever use it as a phone to be honest), and a Logitech bluetooth keyboard/mouse that the phone slots into a slot on top, and I’ll use JuiceSSH and bVNC to get both SSH and vnc access to my remote desktop and servers and develop just using my phone anywhere at any time (I love unlimited data, public wifi is… fairly non-existent where I live, I wish things would quit assuming its ubiquitous…). Using bVNC I can connect to my desktop’s main GUI on :0 (I use linux everywhere), I can spool up new xvfb instances and work in those on my desktop or headless servers, I have sftp mappings and git used in all kinds of places (no, git is not on an sftp mapping, don’t ever put git on a shared drive mapping of any form, including things like dropbox, or it can get corrupted). I develop this way for my personal projects almost exclusively, so this is not an odd idea, if I can do it on a 6" android phone then certainly an iPad can do it. :slight_smile:

2 Likes

I remember reading about your Chromebook, something that was in the back of my mind when writing this. Having seen the latest ones, I’d certainly be willing to try them, if not for the fact they are made by Google. I know you have your reservations about Apple’s walled garden, I have mine about Google’s prying eyes.

Love the idea of a phone + keyboard setup, it’s something I thought about before. That said, for me it comes down to a good keyboard and adequate screen size, so I think I’d struggle. If I could “dock” my iPad in the same way that you can laptops to get a bigger screen and a nice keyboard I’d be very happy indeed.

1 Like

I just assume that whatever I put in an electronic system is freely available already, so I don’t care, plus I prefer ads that are tailored to me instead of seeing ‘why am I seeing that?!’ things. ^.^;

Thus I go with whatever gives me the best functionality for the buck, and that includes the ability to migrate off of it easily if I so need, which Apple does not really allow for, but Google does.

I haven’t actually used my chromebooks as of late, just my phone, been travelling way too much for my preferences… >.<

Oh right! I’ll often Cast my phone screen to a TV via a ChromeCast too (I carry a chromecast with me just for that purpose, again it’s great for travelling!). But yeah, I have a logitech bluetooth combined keyboard/mouse thing with a slot to put the phone, a charger, a chromecast to use a big screen instead of a tiny one if available, and an OTG cable so I can plug actual USB accessories (like USB drives) into my phone too. :slight_smile:

I’ll often even play youtube on my phone and put it in a hovering window in one of my corners (I can drag it around) as I work too (wish I could do that at my job, for some reason I’m more productive when it’s there).

Altogether the accessories were <$100, my phone was… quite a bit more (Google Stock Pixel 2xl). ^.^;

1 Like

Thanks for putting this guide together Jamie :023:

You’ve definitely got me curious, especially with rumoured new iPads next week that are said to have a USB-C connector which may allow use of an external 4k display.

I’d actually love to see more portable, dockable computers whether they be iPads or MacBooks with single cable / docks. Bit like the new MBPs where they just needed a single cable to connect to the (5K) monitors which also charged the computer while also connecting to peripherals such as external drives, card readers etc… simply plug in and your set, unplug and go.

1 Like

You should have a look on code-server to run vscode from a web-browser.

Here is my ansible playbook to setup a full remote VSCode + Elixir environment

2 Likes

Great, thanks for sharing! I’ve been using VSCode a lot lately instead of vim and really appreciate a lot of the good work done by both Microsoft and the community in making it a great experience.

I’ve currently got a Windows/Linux dual-boot desktop for some C# work I’ve been doing and have found myself staying on the Windows side far more than I expected thanks to WSL2 and VSCode Remote.

That’s your prerogative. I’m not going to try and convince you otherwise but know that many people, if not the majority don’t share your opinion.

I started experimenting with different operating systems, languages and tooling a couple of years ago. It’s broadened my experience and whilst I’m currently a “jack of all trades” it does give me a wonderful position to compare options.

Note that my suggestion above uses Linux for the “proper” work - something I’m guessing would appeal to you. The iPad is just a means of working with Linux in a pleasant way from wherever I happen to be.

But seeing as you mentioned building for the Apple ecosystem, I’ve been doing iOS development using XCode and SwiftUI a lot lately (as I said, I’ve been trying a lot of new things) and it’s been a breath of fresh air. It’s totally different to web/open source development in wonderful ways. It’s cohesive, there’s little cruft in the language and framework. It’s opinionated and thus straightforward to work with. There’s almost no time setting up a development environment “just-so”. It’s more fun than I’ve had in years in any other language on any other platform, and thanks to the huge (and popular) ecosystem it’s part of, it can also be very profitable to work with.

In short, try new things rather than making sweeping statements that attempt to insult a large proportion of the group you’re speaking to and add little to the discussion. Exploration, curiosity and an openness to new ideas are important skills for a developer. Rather than proclaim that anyone not like yourself is wrong, try something new. You might be surprised at what you find.

1 Like

That’s your prerogative. I’m not going to try and convince you otherwise but know that many people, if not the majority don’t share your opinion. …

You’re in a good hope wasting your time and energy trying to explain to somebody who doesn’t care. I immediatelly flagged his post as being offensive. :man_shrugging:

2 Likes

I am sorry guys. I am just not fond of the way Apple enforces things to be. Only their way. Not for me.

As for me, offer me their latest Mac or iPhone for only 10 USD I won’t buy them.

1 Like