7. ✤ Change is hard
✤ Fear >>= anger >>= hate >>= dark side
✤ Friction, heat, pressure, energy
✤ Takes time and patience
✤ Change too much at once and things break
✤ Don’t have to start over, start with what you have
✤ Change not is necessarily better or worse — just different
Properties of Change
8. Step 0: Start Somewhere
We all have to start where we are with what we have.
9. Step 1: Accept the Apple Way
I <3 Apple (fake it till you make it)
10. ✤ Apple knows better then you
✤ Well, they think they do anyway
✤ Like a child who insists that you disappear into the
nether when you step out of sight
✤ Just nod, smile, and go along for the ride
✤ Some blind faith is required. Be comfortable with ‘not knowing’.
✤ Apple can do no wrong, even when wrong they bend the universe so
that they are not wrong
Step 1 – Accept the Apple Way
11. Step 1 – Accept the Apple Way
✤ Apple makes decisions for you ... so you don’t have to (good & bad)
✤ Form factor, asset types, sizes, names – lots of convention
✤ Supported OS versions (only need to support current + one version back!)
✤ App Store Rejections
✤ Available APIs (using undocumented APIs gets your app rejected)
✤ Appropriate content / interesting app
✤ Grades your code quality (rejects bad code)
12. Step 1 – Accept the Apple Way
✤ Stuck in a Sandbox
✤ It is a really nice sandbox
✤ Be happy in your little corner and work with the tools provided
✤ Don’t waste time trying to go outside your sandbox
✤ ex: Closing app with code
✤ ex: Reading device phone number
✤ ex: Code injection
13. Second Thoughts?
✤ Hey! I want outta here! Maybe I can still make that session on Flex ...
✤ Wait ... why do I care about Flex still?
✤ javaScript unit tests?? (hmm ... lipstick? pig?)
✤ What other options do I have, really?
✤ But why would I subject myself to this egocentric platform?
✤ Should I really sell my last ounce of pride, and my soul, to Apple?
✤ Really f’ing Apple ... really, those guys?
15. Why I Chose iOS
✤ The ecosystem is very nice. Hard things are made easy.
✤ Solid Object Orientated language
✤ C and Obj-C useful for a very long time
✤ The ease and power of native device code was a breath of fresh air after
fighting Flash to ‘act native’ for ten years
✤ Good developer community
✤ Good documentation
✤ Good tools Xcode Interface Builder, JetBrains AppCode
17. Why I Chose iOS
✤ The barrier to entry is higher then HTML/JS/CSS work
✤ The startup cost is high (@see Step 2)
✤ Hard(er) skill to learn IMO; lots more barriers
✤ Statistically less qualified developers
✤ Equates to better projects / higher bill rates
✤ The Apple App Store monazites better then competition
18. Why I Chose iOS
✤ iOS:
• 90% on iOS 6
• 2 screen aspect ratios
• 3 screen DPIs
✤ Android:
• 40% on “Jelly Bean”
• 22% on “Ice Cream Sandwich”
• 33% on “Gingerbread”
• “Lots” of screens ...
19. Step 2 – Get the Gear
The right tool for the job
20. Step 2 – Get the Gear
✤ Let's go shopping!
✤ Macintosh computer (MacBook Pro)
✤ iOS device (Retina iPad)
✤ Apple developer account
✤ Apple Xcode
✤ JetBrains AppCode
21. Step 3 – Hello World
Time to play with the new toys!!
22. Step 3 – $1900 Hello World
✤ $1199.99 - Macintosh computer (MacBook Pro)
✤ $499.99 - iOS device (Retina iPad)
✤ $99.00 / year - Apple developer account
✤ $0.00 – Apple Xcode
✤ $199.00 – IntelliJ AppCode
✤ $29.99 - Cord to connect your iOS device (joking ... but just barely)
23. Step 3 – $1900 Hello World
✤ Yes, it just cost you $1900 to do a Hello World
✤ Deep breath, it is worth it. Stick with it.
✤ Good to know everything is working
✤ Show off to your friends
✤ Get setup to start playing!
24. Step 4 – Get Organized
Prepare before setting off for your journey.
25. Step 4 – Get Organized
✤ Place to study (kitchen table, coffee shop, library)
✤ Schedule time to study (nights, weekends)
✤ Books
✤ Videos
✤ Forums
✤ Tools
34. Step 5 – Join the Community
Learning is easier with friends!
35. Step 5 – Join
the Community
✤ Learning is easier with friends
✤ User groups – CocoaHeads
(http://cocoaheads.org/)
✤ Message boards (Stack Overflow)
✤ Guy at coffee shop
✤ Friends, co-workers
✤ Give presentations
37. Intermission – Motivation
(needed before next step)
(needed before next step)
✤ My motivators
✤ Primal urge to provide food and shelter for my family
✤ Personal *fun* projects
✤ Competition with friends also reading the same books
✤ Little rewards
✤ Coffee at 4pm - doing my morning ritual at 8pm
38. Step 6 – Learn Core Language
Deep down in the mine I mine at night.
39. Step 6 – Learn Core Language
✤ This is hard. Very hard. No easy way around it,
only through it
✤ iOS apps are written in C and Objective-C
✤ C requires manual memory management
✤ Objective-C now has a memory management helper called ARC
(Automatic Reference Counting)
✤ Any null pointer will crash your app - boom! I needed to get this
right.
40. ActionScript 3 vs Objective-C
BOOL myBoolean = YES;
int myInt = 13;
float myFloat = 3.14;
NSObject *myObject = [[NSObject alloc] init];
NSObject *myObject = @{};
NSArray *myArray = [[NSArray alloc] init];
NSArray *myArray = @[];
- (int)addA:(int)a plusB:(int)b {
return a + b;
}
var myBoolean:Boolean = true;
var myInteger:int = 42;
var myNumber:Number = 3.14;
var myObject:Object = new Object();
var myObject:Object = {};
var myArray:Array = new Array();
var myArray:Array = [];
public function addTwoInts(a:int, b:int):int {
return a + b;
}
41. Storytelling Syntax
// Objective C
-(void)showUserDataFor:(User *)user onDate:(NSDate *)date withSortOrder:(NSSortDescriptor)sortOrder{
// TODO: method implementation
}
Show user data for Jason on date Oct 28, 2013 with sort order ascending.
// Same method as above with colons lined up
-(void)showUserDataFor:(User *)user
onDate:(NSDate *)date
withSortOrder:(NSSortDescriptor)sort{
// TODO: method implementation
}
// AS3
public function showUserDataForUserOnDateWithSortOrder(user:User, date:Date, sortOrder:String):void {
// TODO: method implementation
}
// AS3
public function showUserData(user:User, date:Date, sortOrder:String):void {
// TODO: method implementation
}
42. ✤ Bringing old patterns that did not fit well; like meta-data dependency
injection & presentation model
✤ Android patterns (widgets, expecting hardware back button)
✤ C and Objective-C numeric types
✤ CoreData
✤ Not learning more about Categories, Delegates, and the mediator
design pattern early on.
Where I Stumbled
43. Gotcha – Numbers
CodeRunner
#import <Foundation/Foundation.h>
int main(int argc, char *argv[]) {
@autoreleasepool {
NSNumber *msTimeSince1970 = [NSNumber numberWithLongLong:1374759546000];
int secTimeSince1970 = msTimeSince1970.intValue / 1000;
NSDate *myDate = [[NSDate alloc] initWithTimeIntervalSince1970:secTimeSince1970];
NSLog(@"The date is %@", myDate);
}
}
45. Step 7 – Study, study, OMG
study
Book, book, book, book
46. Step 7 – Study, study, OMG
study
✤ Everyone learns in a different way
✤ Make slow, steady progress
✤ It will be hard
✤ Do lessons multiple times
✤ Review is an important part of learning
48. Step 8 – Build Free Apps
✤ Help out friends, people from the community (see step #5)
✤ Make apps that do something to help your life
✤ Release your own app to App Store
✤ Build relationships
50. Step 9 – Get Paid
✤ Charge for side work as soon as you can
✤ Replace your study time with billing time
✤ Balance learning with billing
✤ Build a good reputation
✤ Bill rates for iOS are comparable to Flash/Flex rates
51. My iOS Journey Timeline
✤ Sep 2011 - Started learning iOS
✤ Oct 2011 - Got iPad 1
✤ Nov 2011 - Flex is dead to me
✤ Feb 2012 - iOS dev account
✤ Mar 2012 - My first iPhone
✤ Apr 2012 - Billed first iOS work
✤ Apr 2012 - Speaker Cocoaheads
✤ Aug 2012 - iOS Speaker IDSTL
52. Where I am today
✤ Still learning
✤ Contracting
✤ Mentoring apprentice
✤ Talking at user groups
✤ Keeping on eye on what is coming up next (wearable computing)
Hinweis der Redaktion
Thank you all for coming More storytelling, and less code. Share my experiences over the last two years as
Then we need a plan
Nope, not that plan ...
Why am I here?
Going to be here a while; lets build some shelter.
My thought process; convincing myself.
Netflix - number of native clients?
None of the things on this screen have caused me to work late, or have a bad day since moving to iOS.
Go fast past this slide More fragmentation in the browser and on Android
Hello World
To be more specific, $1900 Hello World
no desire to work when family out of town
Like trama
Objective-C is based on C, but with OO int, float, double, long, long long, short, BOOL, NSNumber, NSDecimalNumber (signed and unsigned versions of both) I should have read the book Joel reccomended
Skip this slide during presentation
Skip this slide during presentation
I was very lucky, a client I was doing Flex side work for needed some help with iOS 7 months from when I stared learning till I was billing part time 1 year from when I stared learning till I was billing full time