

How to Learn to Write iOS Apps - AshFurrow
http://ashfurrow.com/2011/12/learn-how-to-write-ios-apps/

======
flyosity
I wrote a 30+ page guide/book called Building iOS Apps From Scratch a few
months ago, here's a link if anyone is interested.
<http://designthencode.com/scratch/>

~~~
gfodor
Your design tutorials look awesome, I will be picking them up. Do you have any
recommendations for similar books, blogs, etc, that focus on low-level
_technique_ for creating user interface elements for iOS? I really like your
technique of using layer styles, etc, and have always wondered what are some
other tricks of the trade are ways to create realistic UI elements. (I am
proficient in Photoshop as a tool, but not really proficient in applying it to
the end of creating UI elements.)

~~~
flyosity
Thanks! There really aren't many, which was a key reason why I put some
together. There are lots of free PSD sites, but obviously they don't include
any instructional material. However they are great to poke through to see how
things are constructed so I'd recommend heading to Dribbble and 365psd and
poke around for some free PSDs. They're great to learn from.

~~~
gfodor
Awesome, thanks. Is that generally the main way you learned in addition to
just playing around? Any other tips for a newb?

------
_corbett
-track down an example app to hack around with. this was the single biggest thing that got me from the hurdle from a Hello World app to a production full featured thing

-learn objective-c yes there is no way around it! try rewriting your favorite python or C example to get your head around some of the translation

-stackoverflow is your friend

-it's easier to get started working without Interface builder, so you can do that just to learn a thing or two with a sample app but then do the same thing _using_ IB; it will be quicker and cleaner in the end. this may be the hardest thing to start to wrap your mind around as it involves lots of clicking and less hacking

-design is everything. if you really want a quality app it's key to go from the bare bones to something a designer put skill into. once you get the hang of IB this can be a quick and amazing makeover. find a good designer to collaborate with.

What I did was make a simple app highlighting each skill I wanted to learn
(Tables, Pickers, etc.).

Realize that a lot more time than you think will go into submitting to the
store, provisioning, and getting your ducks in order there. Don't leave one
hour to do this the first time. Also don't asume because it was easy the first
time it will be the next. XCode gets very confused with multiple provisioning
profiles sometimes. Things expire. etc.

I read the O'Reilly iOS book and Tapworthy along the way. And an Objective-C
book or two; but I don't remember which.

~~~
Aqua_Geek
> track down an example app to hack around with.

Just watch out - as with every language, there is a lot of bad code out there.
While I agree with the notion of reading others' code (personally that helps
me a lot to learn a new language), I'd go through the Apple-provided sample
code before venturing into code of random apps.

~~~
phil
Unfortunately, much of the Apple sample code is also pretty terrible.

Here's one heuristic: if you see any Objective C++ files (*.mm) in the
project, you can probably ignore it as an example of good style.

~~~
stuartjmoore
Disagree. Some good libraries are C++, so linking to them requires you to use
Obj-C++ (at very least, changing the name to *.mm).

~~~
phil
Yeah, I meant things like sample code for plain C frameworks, where the author
has just decided "hey, why not do this in Obj-C++ instead of Obj-C." As I
recall, many of the AudioToolbox examples are like this.

Didn't mean to imply that there's no place for Obj-C++, just that it's not
good style if you don't actually need it (like to wrap a C++ lib).

------
brador
For those of you thinking about making an iOS app for your startup or for
profit, make a note of this:

Making the app is the easy part, it's the marketing that you really need to be
working on and it's the marketing that will make or break your startup. It's
the critical joint.

~~~
wbobeirne
This is a very important point. I've got an incredibly simple app on the
market, but because of some good publicity, it's gotten some good download
numbers. On the flip side, I'll see great apps that've gotten < 1000 downloads
simply because the author didn't get out there and write to every blog in
sight.

~~~
brador
Care to expand on the good publicity angle? Was it a blog? Was it pure luck or
a well worded email? etc.

~~~
wbobeirne
I just threw email darts at the dartboard that is Android blogs. A few of them
stuck, and people started to download. That got me some decent ratings, and
it's kept going from there.

------
TheRevoltingX
It's so much easier when you already know how to program anything. I was a
Perl dev and dabbled in Java. I was forced at my job to learn iOS and produce
a specific app in less than 3 weeks. Wasn't pretty, but working under pressure
can be good motivation too.

~~~
wallflower
That is pretty impressive. 3 weeks. I hope your app didn't have to do anything
database-related (sqlite/CoreData - that can suck up time)

~~~
TheRevoltingX
Nah, it was actually a basic form and tableview.

However, it did have in-app purchasing and that was tedious to implement.

Not code-wise, but fiddling with xcode/apple dev center to generate ad-hoc
profiles and signing and transferring to the device.

That sucked up more time than the code, at least for the first prototype
build.

------
signalsignal
Save yourself money and just go here:
[https://developer.apple.com/library/ios/navigation/index.htm...](https://developer.apple.com/library/ios/navigation/index.html?section=Resource+Types&topic=Sample+Code)

Many of the how-to ebooks just add a code change here and there in the Apple
Examples and publish it as their own.

------
laglad
Thanks for this submission. I'm currently learning iOS development for the
specific purpose of building an application. Ironically, my biggest obstacle
has been choosing a path from the numerous options that can be found online.
I've decided to pick a path that I find credible and stick with it regardless
of its optimality. Your path is the way.

~~~
revorad
So what path have you chosen? I am a Ruby programmer and want to make an iOS
app. I'm planning to use the Stanford course on iTunes to get started. Do you
know if that's any good?

~~~
mpakes
Optimize for your personal learning style.

I learn best by immersion and example, so I just picked a project and started
building. I looked at prominent open source iOS apps and constantly referred
to Apple iOS SDK docs, Apple example code, and several prominent books on iOS
development (Hillegass, et al).

If you're more of a methodical or visual learner, use the iTunes U course
videos.

~~~
nivertech
Care to list those prominent open source iOS apps?

Maybe also links to their repos?

Thanks

------
jlgosse
My biggest piece of advice is to just do it. Jump right in and start writing
some apps. You'll never get good if you don't actually build anything, for the
most part, so just jump in and build something.

~~~
cellularmitosis
Between stackoverflow and all of the iOS blogs, google actually makes this
approach ("I'll just hack until I have a question") totally reasonable. The
modern Internet has very much changed the experience of picking up a new
platform.

------
lowglow
One of the biggest things that I stumbled over was whether or not I should
code straight objective-c or use Interface Builder. In the end, I feel IB just
gets in the way of being able to do cool things. I think if you're serious
about making cool apps then stick exclusively to building apps with
objective-c and avoid IB. (imho)

~~~
TheRevoltingX
For normal interfaces XIBs are way easier to maintain and handle then a bunch
of addSubView calls.

The only things that should be hard coded are interfaces that are too unique
or exotic. Even then, XIBs allow you to place arbitrary UIView elements
wherever you wish and you can get the best of both worlds.

~~~
mpakes
How do you accomodate merging changes to XIB files within your VCS? It's
already pain enough to deal with the Xcode project file. I ended up tearing
out all use of IB in my large project after spending too many hours manually
merging XIBs.

If I'm "doing it wrong" and there's a way to materially speed up my dev flow,
please enlighten me. I can't wait. :)

~~~
wallflower
Are you running into merge conflicts with other people?

Generally, we avoid any merge conflicts with XIB files. We have a small team
so basically anyone who is dealing with it has an 'exclusive' lock until they
are done.

That includes avoiding having a feature branch that makes changes to XIB files
that might change in the main branch. Merging XIB file changes isn't for the
faint hearted - and the likelihood of having a working XIB file at the end of
a merge is not 100%.

------
markholton
The Big Nerd Ranch books are great resources and kept up to date. Kindle
formats of these books are good too.

------
GoldenMonkey
iOS app development was a steep learning curve for me, coming from a C#/.NET
background. After 3 years of professional iOS hacking, I created a video
course a month ago, targeted to programmers. I think Stanford is a great place
to start as well as the book route. The goal I had with making these tutorials
was to create a see-and-do way of learning iOS. If you take the course for a
spin, let me know what could be improved.
<http://www.learnapps.org/?page_id=66>

------
Joshim5
Has anyone written something similar for Ruby on Rails?

