So it’s been well over a month since my last post so I wanted to post a brief apology. I spent most of the month of February putting in a lot of late nights and a few weekends at work and just didn’t have the mental energy to do any writing. However I will start writing new posts each week moving forward. I’ll do a post on setting up our development environment, as well as one on learning resources before finally diving into design and implementation of our full-stack application.
Before we endeavor on this journey I feel it’s important to note what kind of hardware investment you will have to make if you want to take native mobile app development seriously. I am assuming that if you are reading this series on multi-platform mobile app development, you’re going to want to do iOS development. While you can do Ruby on Rails and Android development happily on Linux and (maybe less happily) on Windows, you can’t reasonably do native iOS development without OSX, and that means investing in some Apple hardware.
As of this writing (January 30th, 2013), you can obtain a Mac Mini with the following specs for $699:
- 2.5 Ghz dual-core Ivy Bridge Core I5
- 8 gigs of RAM
- 500 gig spinning HDD
Note that the Mac Mini does not come with a monitor, so you will need to purchase one of your own. Apple will try to sell you a 27” Thunderbolt display for $1,000, but that’s utterly ridiculous. Go to Newegg and see what you can find there if you don’t already have something laying around. You will most likely need to get your hands on a Mini DisplayPort-to-DVI adapter assuming your monitor of choice has DVI. There are also adapters for HDMI and VGA, if that’s your particular method of display output.
If you have a little more to spend, you can think about an iMac but having spent the past few years using a laptop (Early 2011 15” Macbook Pro) as my primary computer for work, I can’t imagine being chained to a desk anymore. To that end, I recommend getting yourself a 13” Macbook Air if you have the scratch for that sort of thing. As of this writing, you can obtain said Macbook Air with the following specs for $1699:
- 2Ghz dual-core Ivy Bridge Core I7
- 8 gigs of RAM
- 256 gig SSD
On paper these specs are worse than the Mac Mini I detailed above but having seen people with Macbook Airs at work, they are fantastic machines and the SSD will give you a huge speed improvement over a spinning drive. You can still hook up an external monitor and a bluetooth mouse to it if you like, and get the freedom to work anywhere you please (within reason). If you can afford it, this is the route I suggest.
While it is true that both mobile platforms offer simulator/emulator functionality to develop with and test on, there is no substitute for testing your app on an actual mobile device. Let me say that again: there is no substitute for testing your app on an actual mobile device. iPhone simulators are feasible to use but Android emulators (note the different words there, simulator and emulator?) are intolerably slow and should only be used for running unit tests as well as odd OS versions or display sizes you don’t want to purchase actual hardware for.
As I write this the most popular devices are the Samsung Galaxy S3 and the iPhone 5. Both of these will cost you about $600 without a 2 year contract so it’s not going to be a cheap investment. You can mitigate this slightly by purchasing a Nexus 4 which comes unlocked for HSPA+ for $300 and an unlocked iPhone 4 for $450. This will shave $450 off the cost of your device investment. T-Mobile has some nice month-to-month plans with 5 gigs of data, unlimited texting and 100 minutes of voice for around $30 a month as of this writing, so you don’t have to be locked into a contract for your test devices if you so choose.
You may be wondering about tablets but I would caution to you wait. I intend to write the initial version of the app only for phones to keep the complexity down. If you’re truly set on writing a tablet-specific app, you could get yourself a Nexus 7 (I have one and love it) for $200 and an iPad Mini for $320 instead of the phones I listed above.
View these costs as an investment in your learning and your ability to make money later on with your well-written, well-tested apps. It’s also a good excuse to buy sweet new gadgets.
One of the main goals I had when I started this blog was to scratch one of my own itches. As a professional mobile developer I regularly go out onto the Internet looking for information related to my day-to-day development. The thing I’ve noticed is that each place I go specializes in one aspect of app development. There’s places to go for Rails, for Android, for iOS, for design, etc. The problem is that enterprising indie app developers have to master all of these things at once. I’m sure somewhere out there are resources that cover writing apps for both major mobile platforms that include a server back end but I think this would be a good opportunity to write the information that I find I need as I go about writing my own apps this coming year in the format I need it.
To that end I am going to write a series of posts covering every aspect of app development and maintenance a multi-platform app developer will need to spend time thinking about, with the ultimate goal of compiling the knowledge into a book, either digital or dead tree (or both) before the end of the year. Here are some of the topics we’re going to cover…
This will involve identifying an opportunity (real or imagined), doing some mind-mapping and coming up with a basic list of initial requirements.
Once we have an idea and a basic set of requirements, we can start laying out some basic designs to start working from.
Wireframing is the fun part, but spending time thinking about how the back end will go together will pay dividends later on. This includes preliminary designs of how your server-side API will be laid out and consumed.
I lied, the fun part is actually making your vision come to life. This will involve Android, iOS and (presumably, unless I change my mind) Rails coding in large doses. I will purposely write the code in a manner that will lead to refactoring so we can see how that affects your development and how to learn from past mistakes in future endeavors. No one ever gets it completely right the first time.
Making it all look pretty
Once we get some functionality in place, we’ll probably realize that while functional, the app will almost undoubtedly look like a steaming pile of interface only an engineer could love. We will devote time to cleaning up both the mobile and web portions of this. We’ll dive into CSS, platform-specific design patterns (the visual kind), as well as creating graphical assets for multiple screen resolutions.
No developer worth his or her salt writes anything meaningful without having some sort of automated tests to make sure the important parts are protected from idiotic mistakes made at 3:00 AM (and those will happen). I don’t care if you write tests before or after, just as long as they’re there and covering your ass when it counts. We’ll also touch on continuous integration to really amp up the usefulness of our tests.
In order to gain insights into our customers and how our products are being used, we’ll discuss how analytics factor into our planning and development, as well as post-development support and tweaking.
App store submission and pricing
While a lot of people do this sort of thing just for the enjoyment of programming and the thrill of knowing people are using your app, most of us have bills we need to pay. To that end we will focus on payment processing, app store submission and pricing schemes. I might even throw in a little research on marketing if I’m feeling saucy.
Other unforeseen complexities
Other things will come up for sure. I’m going to try and make this as complete and end-to-end as possible. I will attempt to reign in the scope creep but it’s important to me that this end up being a one-stop resource for anyone looking to create a mobile app and control all aspects of the design and development
This will be a learning experience for me as well so this will all be written from the perspective of someone who is an intermediate at Android development, an advanced novice at Rails and a beginner at iOS development. Also, I’m terrible at graphic design, like most engineers I know, so I’ll be in the same boat as a lot of you.
I’ll try to get a few guest posts, and I’ll definitely be submitting my work to subject matter experts to make sure I’m not completely off base. Also, a colleague of mine complained that a lot of these kind of resources are too basic so I will definitely attempt to tackle some advanced stuff once the basics are in place.
I have some ideas for apps specifically for this blog but I’m curious if anyone has any suggestions for what they’d like to see created. Know that at the end all of the code will be open source so if it’s your Next Big Thing™, you may want to hold onto that for yourself. Hell, use these posts as a way to write your own Next Big Thing™ when it’s all said and done.
The act of making some new year’s resolutions and then promptly ignoring them is a time-honored tradition of mine. Each year I tell myself I’ll get some income going on the side, I’ll teach myself a new language or two (spoken and programming both), I’ll write some code for open source projects, etc. It always ends up being lots of plans and then it all devolves into playing endless video games. While I don’t think I’ll ever completely stop playing video games since that’s my outlet to release stress, I’ve already got a good start by getting this blog up and running and forcing myself to post to it. To that end, these are my goals for the year:
- Write a series of blog posts about creating a multi-platform mobile app including server component.
- Turn that series of blog posts into a well-formatted, well-written ebook.
- Attempt to set up some sort of passive income and reach a goal of $300 a month (cover a car payment)
- Work with my brother-in-law to create a multi-platform trivia game
- Contribute to some open source projects
It will be interesting to revisit this post on January 20th, 2014 and see what I was able to accomplish.
Each year nerds and gamers await the annual ritual of handing Gabe Newell and Valve Software all of their money at the end of the year. Valve offers 50-75% off of a huge volume of games and people end up with huge libraries of games to play through the rest of the year (or at least until the summer sale).
I usually don’t pay much attention to what I spend since I’ll only pick up a game or two for $5-10 each but this year I bought a fair amount of games, both for my self and for friends. So I figured I’d actually tally what the damage was.
Here are the games I purchased for myself:
Here are the games I purchased as gifts:
So my total spending on the Steam 2012 winter sale was $133.75. Take that, wallet!