iOS App Creations from Start to Finish


Me

Brett Park from Shiverware / Saskatchewan iOS (SKiOS.ca)

Shiverware


Why Develop?


For yourself?


Society


Money


Three Essentials


Assuming For Money


Three App Types


App Ideas


Aug 19, 2012

SpeakBeat Icon


SpeakBeat Screenshots


July 28, 2012

BeatSpeak Icon


BeatSpeak Screenshots


Analyze Existing Apps


Draft your app


Native vs html5


Native vs html5

Html5 acceptance


Development


Source Control

Use git from the get go. (Bitbucket as a suggestion).

BitBucket


XCode Basics

Click on the project name to edit Build Settings, Icons, Splashs

Project Properties


XCode Basics

No memory management (As of iOS 5)

Auto Setters/Getters (Properties)


XCode Tips

Option Click on class names or methods

Option Click


XCode Tips

Command Click on class names or methods


XCode Tips

Refactor

Refactor


XCode Tips

Command-Ctrl-Up - Switch between header and implementation

Command-Ctrl-Left/Right - Switch between previous and current location


XCode Tips

Quickly Open Command-Shift-o

Open Quickly


XCode Shortcut Cheat Guide

https://github.com/Machx/Xcode-Keyboard-Shortcuts XCode Shortcuts


AutoGenerated Documentation

http://www.cocoanetics.com/2011/11/amazing-apple-like-documentation/


Hate XCode?

Try AppCode?

http://www.jetbrains.com/objc/ AppCode Screenshot


Objective-C

https://github.com/github/objective-c-conventions


Settings Design Pattern


What can be stored


Problems

[prefs setObject:@"TextToSave" forKey:@"keyToLookupString"];

Solution - Pattern


Singleton (Current Settings)

    #import "Settings.h"
    @interface CurrentSettings : NSObject
        + (void)initialize;
        + (CurrentSettings *) shared;
        + (Settings *) settings;

        -(void) saveSettings;
        -(void) saveSettingsAs:(NSString *) settingsName;
        -(NSArray *) savedSettingsNames;
        -(BOOL) loadSettingsWithName:(NSString *) settingName;
        -(void) deleteSettings:(NSString *) settingName;
        -(BOOL) currentSettingsAreModified;
        @property (retain) Settings * settings;
    @end

Settings

//Define key names with static strings
#define kNOTE_COLORING_KEY  @"noteColoring"

//This method gets called when being saved
- (void)encodeWithCoder:(NSCoder *)encoder

    //Save the object with a static key 
    [encoder encodeObject:self.noteColoring forKey:kNOTE_COLORING_KEY];

//This is called when the object is initialized
- (id)initWithCoder:(NSCoder *)decoder 
    //Detects the value and sets from storage or initialization
    if ([decoder containsValueForKey:kNOTE_COLORING_KEY])
        self.noteColoring = [decoder decodeObjectForKey:kNOTE_COLORING_KEY];
    else
        self.noteColoring = @"Scale Coloring";

Look at CurrentSettings.m


Observation Method

    //Let us know when the noteColoring is changed
     [[CurrentSettings settings].layout addObserver:self forKeyPath:@"noteColoring" options:NSKeyValueObservingOptionNew context:NULL];

    //This method gets called when the value changes
    - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context

    //If note coloring is changed, perform the proper method action
    if ([keyPath isEqualToString:@"noteColoring"])
        [self setNoteLayerStyleFormatFromString:[CurrentSettings settings].layout.noteColoring];

    //Stop observing the key value
    [[CurrentSettings settings].layout  removeObserver:self forKeyPath:@"noteColoring"];        

Build it? Buy it---

Chupa Mobile

BinPress


QuickDialog

Tables in a Giffy. http://escoz.com/open-source/quickdialog

Quick Dialog Example One Quick Dialog Example Two


RestKit

http://restkit.org

RestKit


Audio Options

What to choose?

Audio Options


Audio Hangups


Categories

Add functionality to existing classes

    @interface NSString (Formatting)
        - (NSString*) firstFiveLetters;
    @end

Add instance variables with Associative References


Who / Where / What / When


Beta Testers


Testing Mind Map


Design


Mockups


Creation Program


Helper Programs


Test on real people


Designers Block


Marketing


Start Early


Launch Marketing


Best Day to Release

42% of apps released on Sunday make Top 240 list

(December 19th, 2011)

Day of Week

http://techcrunch.com/2011/12/19/sunday-is-the-best-day-to-launch-your-mobile-app/


Media


Reviews +++++


Advertising


Advertising


App Store SEO


SEO


App Store Submit


Tracking


Monetization


Support


External Sources of work


iOS 6

Smart App Banners


Legacy Support

60% iPhone's on iOS 6 in one week

41% of iPad's updated

iOS 5? Sure

iOS 4? Not for long


iPhone 5


Learning Resources


info@skios.ca


Thanks