Garage Days Return:
 Agile iPhone Development
Do you remember this?
Do you remember this?
Do you remember this?
A kid with a good idea...
Manic Miner
The big guys...
But...
These changed the rules...
What do you need to
      start?
A Mac
XCode
An iPhone...
Books
But...
OMG It’s ObjectiveC!
Bigino ObjectiveC
Smalltalk
C
Classes: declaration

#import <Cocoa/Cocoa.h>

@interface Photo : NSObject {
   NSString* caption;
   NSString* photograph...
Classes: implementation

    #import "Photo.h"

    @implementation Photo

    // ...

    - (NSString*) caption {
       ...
Method Invocation



photo = [[Photo alloc] init];

[photo setCaption:@"Day at the Beach"];

output = [photo caption];
First Reaction
The Same in Java



photo = new Photo();

photo.setCaption("Day at the Beach");

output = photo.caption();
In ObjectiveC



photo = [[Photo alloc] init];

[photo setCaption:@"Day at the Beach"];

output = [photo caption];
Message Passing




  [obj method:parameter];
Multiple Parameters


- (void)insertObject:(id)anObject atIndex:(NSUInteger)index;


//...


[array insertObject:@"Hello, ...
If you want...


- (void)insertObject:(id)anObject :(NSUInteger)index;


//...


[array insertObject:@"Hello, World!" :5];
Dynamic Invocation


(id)anObject = [ factory getFor:par1 ]

[array foo];
[array bar];
No garbage collection!
Counter based
message     counter
   alloc        +1
   copy         +1
  retain        +1
  release       -1
autorelease     -1
If you’ll use an object

   take ownership

      retain
If you own an object

  should release it

     release
If you alloc or copy an object

        you own it

        release
Collections take ownership
- (void)printHello {
   NSString *string;

    string = [[NSString alloc] initWithString:@"Hello"];

    NSLog(string);

 ...
- (void)printHello {
 NSString *string;


 string = [NSString stringWithFormat:@"Hello"];


 NSLog(string);
}
- (void)printWindowTitle {
   NSString *string;

    string = [myWindow title];

    NSLog(string);
}
NSMutableArray *array;
NSUInteger i;
// ...
for (i = 0; i < 10; i++) {
   NSNumber *allocedNumber = [[NSNumber alloc] init...
Be Careful!
What about the tests?
Unit Tests...
Former SenTestingKit



        OCUnit
TestCase Definition

#import <SenTestingKit/SenTestingKit.h>
#import "RpnCalculator.h"

@interface RpnCalculatorTestCase :...
TestCase Implementation

@implementation RpnCalculatorTestCase

-(void)setUp{

 rpnCalculator = [[RpnCalculator alloc]init...
TestCase Implementation


#define   STAssertNil(a1, description, ...)
#define   STAssertNotNil(a1, description, ...)
#defi...
XCode Integration
XCode Integration
XCode in a Nutshell
Useful Shortcuts



Esc - Name Completion
Useful Shortcuts



⌘S - Save
Useful Shortcuts



⌘B - Build
Useful Shortcuts



⌥⌘↑ - HeaderSource
Conclusions
The Market Asks For Apps
The Market Asks For Apps
More Apps...
More Apps...
More Apps!
Lot to Improve
Be Good Kids:
Test First!
Questions?
Coding Dojo Rules
Randori
Silence
Suggest
KataRpnCalculator
20 5 /          => (20/5)      = 4
4 2 + 3 -       => (4+2)-3     = 3
3 5 8 * 7 + *   => 3*((5*8)+7) = 141
Let’s Start!
Agile Iphone Development
Agile Iphone Development
Agile Iphone Development
Agile Iphone Development
Agile Iphone Development
Upcoming SlideShare
Loading in...5
×

Agile Iphone Development

5,221

Published on

Introductory presentation to Agile iPhone Development

Published in: Technology
1 Comment
9 Likes
Statistics
Notes
  • Hi,
    Thanks for the presentation,

    Complexity is clear
    What Agile tools do you suggest to manage this mess!

    Salaam,
    Walid
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total Views
5,221
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
0
Comments
1
Likes
9
Embeds 0
No embeds

No notes for slide












































































  • Agile Iphone Development

    1. 1. Garage Days Return: Agile iPhone Development
    2. 2. Do you remember this?
    3. 3. Do you remember this?
    4. 4. Do you remember this?
    5. 5. A kid with a good idea...
    6. 6. Manic Miner
    7. 7. The big guys...
    8. 8. But...
    9. 9. These changed the rules...
    10. 10. What do you need to start?
    11. 11. A Mac
    12. 12. XCode
    13. 13. An iPhone...
    14. 14. Books
    15. 15. But...
    16. 16. OMG It’s ObjectiveC!
    17. 17. Bigino ObjectiveC
    18. 18. Smalltalk
    19. 19. C
    20. 20. Classes: declaration #import <Cocoa/Cocoa.h> @interface Photo : NSObject { NSString* caption; NSString* photographer; } - (NSString*) caption; - (NSString*) photographer; - (void) setCaption: (NSString*)input; - (void) setPhotographer: (NSString*)input; @end
    21. 21. Classes: implementation #import "Photo.h" @implementation Photo // ... - (NSString*) caption { return caption; } - (NSString*) photographer { return photographer; } @end
    22. 22. Method Invocation photo = [[Photo alloc] init]; [photo setCaption:@"Day at the Beach"]; output = [photo caption];
    23. 23. First Reaction
    24. 24. The Same in Java photo = new Photo(); photo.setCaption("Day at the Beach"); output = photo.caption();
    25. 25. In ObjectiveC photo = [[Photo alloc] init]; [photo setCaption:@"Day at the Beach"]; output = [photo caption];
    26. 26. Message Passing [obj method:parameter];
    27. 27. Multiple Parameters - (void)insertObject:(id)anObject atIndex:(NSUInteger)index; //... [array insertObject:@"Hello, World!" atIndex:5];
    28. 28. If you want... - (void)insertObject:(id)anObject :(NSUInteger)index; //... [array insertObject:@"Hello, World!" :5];
    29. 29. Dynamic Invocation (id)anObject = [ factory getFor:par1 ] [array foo]; [array bar];
    30. 30. No garbage collection!
    31. 31. Counter based
    32. 32. message counter alloc +1 copy +1 retain +1 release -1 autorelease -1
    33. 33. If you’ll use an object take ownership retain
    34. 34. If you own an object should release it release
    35. 35. If you alloc or copy an object you own it release
    36. 36. Collections take ownership
    37. 37. - (void)printHello { NSString *string; string = [[NSString alloc] initWithString:@"Hello"]; NSLog(string); [string release]; }
    38. 38. - (void)printHello { NSString *string; string = [NSString stringWithFormat:@"Hello"]; NSLog(string); }
    39. 39. - (void)printWindowTitle { NSString *string; string = [myWindow title]; NSLog(string); }
    40. 40. NSMutableArray *array; NSUInteger i; // ... for (i = 0; i < 10; i++) { NSNumber *allocedNumber = [[NSNumber alloc] initWithInteger: i]; [array addObject:allocedNumber]; [allocedNumber release]; }
    41. 41. Be Careful!
    42. 42. What about the tests?
    43. 43. Unit Tests...
    44. 44. Former SenTestingKit OCUnit
    45. 45. TestCase Definition #import <SenTestingKit/SenTestingKit.h> #import "RpnCalculator.h" @interface RpnCalculatorTestCase : SenTestCase { RpnCalculator* rpnCalculator; } @end
    46. 46. TestCase Implementation @implementation RpnCalculatorTestCase -(void)setUp{ rpnCalculator = [[RpnCalculator alloc]init]; } -(void)tearDown{ [rpnCalculator release]; } -(void)testShouldDisplayTwoNumbersWhenNumbersAreSeparatedByEnter{ [rpnCalculator put:@"1"]; [rpnCalculator put:@"enter"]; [rpnCalculator put:@"2"]; STAssertEqualObjects(@"1n2",rpnCalculator.display,nil); }
    47. 47. TestCase Implementation #define STAssertNil(a1, description, ...) #define STAssertNotNil(a1, description, ...) #define STAssertTrue(expression, description, ...) #define STAssertFalse(expression, description, ...) #define STAssertEqualObjects(a1, a2, description, ...) #define STAssertEquals(a1, a2, description, ...) #define STFail(description, ...) #define STAssertTrueNoThrow(expression, description, ...) #define STAssertFalseNoThrow(expression, description, ...) //....
    48. 48. XCode Integration
    49. 49. XCode Integration
    50. 50. XCode in a Nutshell
    51. 51. Useful Shortcuts Esc - Name Completion
    52. 52. Useful Shortcuts ⌘S - Save
    53. 53. Useful Shortcuts ⌘B - Build
    54. 54. Useful Shortcuts ⌥⌘↑ - HeaderSource
    55. 55. Conclusions
    56. 56. The Market Asks For Apps
    57. 57. The Market Asks For Apps
    58. 58. More Apps...
    59. 59. More Apps...
    60. 60. More Apps!
    61. 61. Lot to Improve
    62. 62. Be Good Kids:
    63. 63. Test First!
    64. 64. Questions?
    65. 65. Coding Dojo Rules
    66. 66. Randori
    67. 67. Silence
    68. 68. Suggest
    69. 69. KataRpnCalculator
    70. 70. 20 5 / => (20/5) = 4 4 2 + 3 - => (4+2)-3 = 3 3 5 8 * 7 + * => 3*((5*8)+7) = 141
    71. 71. Let’s Start!

    ×