To the OP, if you're there: Are you using XCode 3 or XCode 4? You referenced the TBNR guide book, but from what I read, it doesn't handle the new changes for Xcode. Did that cause any difficulties? (I was on the fence about buying the book last night because it's the older version, but after the OP's recommendation, I just bought it on Amazon).
I'm doing the same thing as the OP, starting around the same time, except I quit my job to take a break. And admittedly I'm spreading myself out pretty thin because I'm also trying to learn and get pretty knowledgable in Javascript and Python.
I have to say that learning iOS programming is very hard for me, mainly because I have almost no GUI experience. I did a bit of Win32 MFC programming about 15 years ago, so some of the concepts aren't completely foreign, but they might as well should be in some cases.
XCode is a terrible IDE and the error messages I've encountered are amongst the worst I've come across. I figure it will take time to internalize this stuff, but I can tell you it is fairly painful at the beginning stages!
I am happy to talk / vent about iOS programming with you. I know it's frustrating, but please stay with it.
I think they key is to use the book as inspiration but not as Gospel. I found that some of the interface things in the book didn't mesh with the new XCode. I had to play around until I figured it out.
I am happy to chat with you anytime about it, providing you catch me on Skype. My skye id: is kent.fenwick
Also, message me on Twitter and we can arrange a time to talk about it. I don't have all the answers, but I feel your pain and think I can give you some good pointers.
Haha, I also set learning iOS as one of my 2012 resolutions AND I also bought TBNR after reading good reviews in Amazon. The 2nd edition covers Xcode 4 and iOS 4 (a bit outdated, but my target market is iOS 4+ anyway).
The shameful thing is, I haven't read the book yet, and instead go with Titanium since I'm more familiar with JavaScript (not really, but better than zero experience with Objective-C). It's been a couple of days, and things are doing good (but debugging sucks).
I eventually will learn iOS/Objective-C, but since I come from Java, and I don't like Xcode (I've played around a bit) I will most likely use AppCode from JetBrains.
I really think you should stick it out and learn XCode. I am not a huge fan wither, would rather use TextMate or BBEdit, but once you stick with it, you will get there.
If we do the things we have to do long enough, the day will come when we will get to do the things we want to do.
I started learning ios development around 2 week ago. Initially it looked very alien to me. I already know C, C++, C# and Java but not objective-c. The language itself is easy to learn but learning the framework took some time. Now I am much confident and just started my first app. Probably I will be able to finish my first app in a week.
BTW, I am also new to MAC platform and sometime finding using the MAC itself is tedious. I use windows at work and was using Linux at home. Now using mac at home.
For me delegations was fairly easy to understand, in a nutshell, you "borrow" events from a class to be implemented and triggered by your own class.
For me, the worse part of Objective-C was memory management, the rules are simple if you alloc you must dealloc, but memory leaking was always a problem, but now we have ARC and it free us from this.
What I would really like to know, and I've never seen it in a book/tutorial explaining in detail, is, how do you skin or create costume buttons for your interface.
How do you create/code an interface like http://dayoneapp.com/ ? I don't mean the graphics, but how to implement a template or design.
A book I heard about via Matt Gemmell is "Learning iPad Programming" (Kirby Turner, Tom Harrington) - it's really an excellent overview, explained by programming a real-life iPad app step by step. Massive coverage of tons of major topics. http://www.amazon.co.uk/gp/product/0321750403
Also, as others mention, the Stanford lectures are awesome, especially combined with the iTunesU iPad app.
And finally, for me the breakthrough into iOS programming came when I went to a hackathon and pair programmed with a total iOS pro, I learned WAY more in a few hours than I did reading a bunch of tutorials.
Good job! The goal is here is to keep pushing yourself. What will happen is that the next app will build on the skills you learn in the current app and so on.
Once you finish your first app, I'd look into some open source projects and see how they are built and learn from them. It accelerates your learning, but you need the basics first.
TBNR and the iOS Docs are a great place to start, but there's nothing like just jumping right in. :)
Also a word of advice: Making the app is only 50% of the work if you are expecting to make significant income from the app.
Having released my first app at the end of October, I can confirm building the app is at the highest "only 50%". Having had very little interest for it. (less than 10 buys) I now fully understand marketing has a much larger role than a developer like me would have liked. 2012, I will learn iOS, yet I will also learn marketing. My first app was created with Titanium too, yet I feel it is important to learn iOS.
Just a thought - the screenshots look really great, but you will definitely want to write a much longer app description. I would NEVER buy the app based on that description alone since it is $3 and I don't even fully understand what it's for. Why would I want to be reminded of certain words? Is it like a flashcard app?
I just can't break through delegation. Any suggestions? I do have many years of programming experience (C, Perl, some JS), but can't quite grasp delegation.
Delegation is a design pattern in which one object sends messages to another object that has been specified as its delegate, to ask for input or to notify the delegate that an event is occurring. The delegate object responds to these messages in a custom way. Delegation is a common design pattern in Cocoa Touch apps because it allows you to provide custom behavior without having to subclass and override the methods of a complex framework object, such as UIApplication.
It's probably confusing, really, to read about the delegation "design pattern" as on Wikipedia. Instead, it's mostly just a way to avoid subclassing: specify another object, the "delegate", to provide the information or react to an event, rather than do something like subclass and override specific methods for an event.
You have this friend, lets say his name is Steve. Steve is a really good guy, and usually excited to hear about what you're working on - and to help out, if he can. He also happens to be really smart and knows everything about everything. He read the dictionary when he was young and continues to read wikipedia daily. So you talk to him when you need to do something[1]. Or maybe you did something and are really excited about it[2]. Perhaps you're about to do something and just need that one last piece of the puzzle before you can finish it up[3]. And if you're unsure about if an idea is worth perusing, Steve is the right person to talk to[4].
Another reason why you're such good friends with Steve is that he is an animal lover and has promised that if you ever call on him to watch your dog because you just need to take a vacation for a weekend, he will watch your dog[5] for you. Since Steve is an animal lover, he might also be able to watch your pet ferret[6]. However, Steve is allergic to cats, and much to his dismay, he cannot watch your cat for you. But, you understand. You can post a notification on Twitter to ask all your other friends if any of them can watch your cat for you[7, 8].
Steve is a delegate. There's only one of him. You only need one.
[1-4]. Some examples of when you would use a delegate
5. Protocols can have some methods that their delegate is required to implement, and the compiler will error if they are not implemented.
6. Some methods are optional to implement.
7. Since a method can be optional, it might not be implemented.
8. Notifications are another way for objects in Objective-C to talk to one another. Instead of a 1:1 mapping, they are a 1:Many mapping.
It's (mostly) just events. Look at how many delegate methods contain the words "did" and "will".
Object A is going through its life cycle, doing what it does. Certain events there trigger delegate messages. Object B, A's delegate, receives these and does things, or not, as desired, based on the event.
It's an event system, what you would use function pointers for in C. I think its clearer to be specific and call delegates 'an implementation of the observer design pattern', rather than a design pattern in itself. Other implementations include the class GoF way with subclassing, or typesafe callback abstractions like libsigc or boost::signals in C++. In dynamic languages you'd just store an array with strings of function names to call, or object/method name pairs of methods to call.
The basics of delegation is that you have classes that could be written so that you must subclass them to do any interesting work. The delegate pattern is such that you have some functions that affect the operation of the sub class(like filling a table full of data) so that it can be customized without subclassing.
To delegate is to give responsibility to a subordinate. That's what you are doing; giving some control to a owning class. (not superclass)
Great Job OP. I left my full-time job last year to become an iOS Developer. Best decision I have ever made. IOS Programming Version 2 is the best book out there, so you are on the right track.
If you are using Xcode 4.2 the differences from the iOS Programming book are kinda tricky. I plan on posting the updated steps in the coming weeks. In the mean time, feel free to reach out to me at Steve @ Bixbyapps.com.
I completely agree with the premise that once you get past the initial scare, it really is very easy(assuming a programming background). I also set myself a goal of submitting an app by a deadline. I got to the day of the deadline, panicked because I hadn't submitted anything and wrote an app which totalled < 100 lines and took about 1.5 hours to write. 170k downloads later I'm thoroughly proud of the truly awful app I've made. Really worth the time investment both financially and emotionally
I'm using the same book too, the next edition should come out sometime in march and they also made a book about cocoa programming that follows the same approach (it covers lion too).
If you are a long time reader you surely must have heard of all this "social bookmarking" thing.
Basically HN readers post articles, and then vote on them. Crazy, I know, the kids these days. Anyway, that's how this article got on Hacker News, and that's why nobody gives a flying duck about your "attention being wasted".
Thus, your sense of entitlement is extremely arrogant, not to mention that your comment was rude. Besides forgetting that HN offers what the HN readers vote on, you also forget that you are perfectly free to skip anything you don't like.
(I should note that I don't agree with you about the blog post, but that isn't that important.)
You have missed an important point about HN -- the comments are usually more interesting than the articles. I have up voted lots of meh articles for the comments.
Its going to cost me some karma but I have to agree with you. Really fluffy content, almost has a self-help feel to it. Don't get me wrong, its as worthy as most blog posts to be on the internet, but getting submitted to HN and being a top post? Maybe there are a lot of HNers that have gotten beaten up by iOS and can sympathize.
I'm doing the same thing as the OP, starting around the same time, except I quit my job to take a break. And admittedly I'm spreading myself out pretty thin because I'm also trying to learn and get pretty knowledgable in Javascript and Python.
I have to say that learning iOS programming is very hard for me, mainly because I have almost no GUI experience. I did a bit of Win32 MFC programming about 15 years ago, so some of the concepts aren't completely foreign, but they might as well should be in some cases.
XCode is a terrible IDE and the error messages I've encountered are amongst the worst I've come across. I figure it will take time to internalize this stuff, but I can tell you it is fairly painful at the beginning stages!