SlideShare a Scribd company logo
Mobile Development 101: Developing
Apps for the iPhone and the Android
              Platforms

            Michael Galpin, eBay
                @michaelg
Why Mobile?
Mobile Transactions
     30.0




     22.5
$M




     15.0




      7.5




       0
     Jan 1, 2008   May 1, 2008   Aug 1, 2008    Oct 1, 2008   Dec 1, 2008      Feb 1, 2009   Apr 1, 2009   Jun 1, 2009

                                               Mobile Web                   iPhone
Mobile Development 101
Usage
Capabilities
Usage
      Capabilities


Phones That Matter
Distribution Barriers
What Platforms?
Mobile Development 101
iPhone



50% of Mobile Internet Usage
Comprehensive Tools
High Volume Distribution Channel
Overview

•   Programming Language: Objective-C

•   Tools: XCode/Interface Builder, iPhone SDK

•   Framework: Cocoa Touch

•   Features: Multi-threaded, Open GL ES, Contacts, Email,
    WebKit, iTunes, GPS, Google Maps, (Video)Camera, Local
    Database, Push Notifications

•   Pitfalls: Memory management, no background processing,
    no intra-application communication*, QA, App Store
    regulations
Objective-C


•   Derived and compatible with C

    •   C libraries in many cases

•   Object-oriented

•   Smalltalk inspired

•   Surprisingly dynamic
@interface CurrencyAmount : NSObject <NSCoding>
{
	 NSDecimalNumber *amount;
	 NSString *currencyID;
}

@property (nonatomic, retain) NSDecimalNumber *amount;
@property (nonatomic, retain) NSString *currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID;
- (id) initWithNode:(XMLNode *) node;
- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale;
- (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID;
- (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity;
- (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount;
-(NSString*) stringValue;
-(NSString*) rawDecimalAsString;
-(NSString*) formatStringWithoutCurrency;
-(NSString*) formatStringShort:(BOOL) shortForm;
-(NSString*) currencyPrefixShort:(BOOL) shortForm;
- (NSComparisonResult)compare:(CurrencyAmount *)other;
- (BOOL) isZeroAmount;

@end
interface(header)
@interface CurrencyAmount : NSObject <NSCoding>
{
	 NSDecimalNumber *amount;
	 NSString *currencyID;
}

@property (nonatomic, retain) NSDecimalNumber *amount;
@property (nonatomic, retain) NSString *currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID;
- (id) initWithNode:(XMLNode *) node;
- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale;
- (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID;
- (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity;
- (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount;
-(NSString*) stringValue;
-(NSString*) rawDecimalAsString;
-(NSString*) formatStringWithoutCurrency;
-(NSString*) formatStringShort:(BOOL) shortForm;
-(NSString*) currencyPrefixShort:(BOOL) shortForm;
- (NSComparisonResult)compare:(CurrencyAmount *)other;
- (BOOL) isZeroAmount;

@end
@interface CurrencyAmount : NSObject <NSCoding>
{
	 NSDecimalNumber *amount;
	 NSString *currencyID;
}

@property (nonatomic, retain) NSDecimalNumber *amount;
@property (nonatomic, retain) NSString *currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID;
- (id) initWithNode:(XMLNode *) node;
- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale;
- (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID;
- (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity;
- (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount;
-(NSString*) stringValue;
-(NSString*) rawDecimalAsString;
-(NSString*) formatStringWithoutCurrency;
-(NSString*) formatStringShort:(BOOL) shortForm;
-(NSString*) currencyPrefixShort:(BOOL) shortForm;
- (NSComparisonResult)compare:(CurrencyAmount *)other;
- (BOOL) isZeroAmount;

@end
inheritance
@interface CurrencyAmount : NSObject <NSCoding>
{
	 NSDecimalNumber *amount;
	 NSString *currencyID;
}

@property (nonatomic, retain) NSDecimalNumber *amount;
@property (nonatomic, retain) NSString *currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID;
- (id) initWithNode:(XMLNode *) node;
- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale;
- (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID;
- (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity;
- (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount;
-(NSString*) stringValue;
-(NSString*) rawDecimalAsString;
-(NSString*) formatStringWithoutCurrency;
-(NSString*) formatStringShort:(BOOL) shortForm;
-(NSString*) currencyPrefixShort:(BOOL) shortForm;
- (NSComparisonResult)compare:(CurrencyAmount *)other;
- (BOOL) isZeroAmount;

@end
@interface CurrencyAmount : NSObject <NSCoding>
{
	 NSDecimalNumber *amount;
	 NSString *currencyID;
}

@property (nonatomic, retain) NSDecimalNumber *amount;
@property (nonatomic, retain) NSString *currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID;
- (id) initWithNode:(XMLNode *) node;
- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale;
- (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID;
- (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity;
- (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount;
-(NSString*) stringValue;
-(NSString*) rawDecimalAsString;
-(NSString*) formatStringWithoutCurrency;
-(NSString*) formatStringShort:(BOOL) shortForm;
-(NSString*) currencyPrefixShort:(BOOL) shortForm;
- (NSComparisonResult)compare:(CurrencyAmount *)other;
- (BOOL) isZeroAmount;

@end
protocol
@interface CurrencyAmount : NSObject <NSCoding>
{
	 NSDecimalNumber *amount;
	 NSString *currencyID;
}

@property (nonatomic, retain) NSDecimalNumber *amount;
@property (nonatomic, retain) NSString *currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID;
- (id) initWithNode:(XMLNode *) node;
- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale;
- (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID;
- (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity;
- (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount;
-(NSString*) stringValue;
-(NSString*) rawDecimalAsString;
-(NSString*) formatStringWithoutCurrency;
-(NSString*) formatStringShort:(BOOL) shortForm;
-(NSString*) currencyPrefixShort:(BOOL) shortForm;
- (NSComparisonResult)compare:(CurrencyAmount *)other;
- (BOOL) isZeroAmount;

@end
@interface CurrencyAmount : NSObject <NSCoding>
{
	 NSDecimalNumber *amount;
	 NSString *currencyID;
}

@property (nonatomic, retain) NSDecimalNumber *amount;
@property (nonatomic, retain) NSString *currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID;
- (id) initWithNode:(XMLNode *) node;
- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale;
- (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID;
- (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity;
- (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount;
-(NSString*) stringValue;
-(NSString*) rawDecimalAsString;
-(NSString*) formatStringWithoutCurrency;
-(NSString*) formatStringShort:(BOOL) shortForm;
-(NSString*) currencyPrefixShort:(BOOL) shortForm;
- (NSComparisonResult)compare:(CurrencyAmount *)other;
- (BOOL) isZeroAmount;

@end
@interface CurrencyAmount : NSObject <NSCoding>
{
	 NSDecimalNumber *amount;
	 NSString *currencyID;
                            instance variable
}

@property (nonatomic, retain) NSDecimalNumber *amount;
@property (nonatomic, retain) NSString *currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID;
- (id) initWithNode:(XMLNode *) node;
- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale;
- (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID;
- (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity;
- (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount;
-(NSString*) stringValue;
-(NSString*) rawDecimalAsString;
-(NSString*) formatStringWithoutCurrency;
-(NSString*) formatStringShort:(BOOL) shortForm;
-(NSString*) currencyPrefixShort:(BOOL) shortForm;
- (NSComparisonResult)compare:(CurrencyAmount *)other;
- (BOOL) isZeroAmount;

@end
@interface CurrencyAmount : NSObject <NSCoding>
{
	 NSDecimalNumber *amount;
	 NSString *currencyID;
}

@property (nonatomic, retain) NSDecimalNumber *amount;
@property (nonatomic, retain) NSString *currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID;
- (id) initWithNode:(XMLNode *) node;
- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale;
- (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID;
- (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity;
- (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount;
-(NSString*) stringValue;
-(NSString*) rawDecimalAsString;
-(NSString*) formatStringWithoutCurrency;
-(NSString*) formatStringShort:(BOOL) shortForm;
-(NSString*) currencyPrefixShort:(BOOL) shortForm;
- (NSComparisonResult)compare:(CurrencyAmount *)other;
- (BOOL) isZeroAmount;

@end
@interface CurrencyAmount : NSObject <NSCoding>
{
	 NSDecimalNumber *amount;
	 NSString *currencyID;
}
                                 method declarations
@property (nonatomic, retain) NSDecimalNumber *amount;
@property (nonatomic, retain) NSString *currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID;
- (id) initWithNode:(XMLNode *) node;
- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale;
- (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID;
- (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity;
- (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount;
-(NSString*) stringValue;
-(NSString*) rawDecimalAsString;
-(NSString*) formatStringWithoutCurrency;
-(NSString*) formatStringShort:(BOOL) shortForm;
-(NSString*) currencyPrefixShort:(BOOL) shortForm;
- (NSComparisonResult)compare:(CurrencyAmount *)other;
- (BOOL) isZeroAmount;

@end
@interface CurrencyAmount : NSObject <NSCoding>
{
	 NSDecimalNumber *amount;
	 NSString *currencyID;
}

@property (nonatomic, retain) NSDecimalNumber *amount;
@property (nonatomic, retain) NSString *currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID;
- (id) initWithNode:(XMLNode *) node;
- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale;
- (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID;
- (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity;
- (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount;
-(NSString*) stringValue;
-(NSString*) rawDecimalAsString;
-(NSString*) formatStringWithoutCurrency;
-(NSString*) formatStringShort:(BOOL) shortForm;
-(NSString*) currencyPrefixShort:(BOOL) shortForm;
- (NSComparisonResult)compare:(CurrencyAmount *)other;
- (BOOL) isZeroAmount;

@end
@interface CurrencyAmount : NSObject <NSCoding>
{
	 NSDecimalNumber *amount;
	 NSString *currencyID;
}

@property (nonatomic, retain) NSDecimalNumber *amount;
@property (nonatomic, retain) NSString *currencyID;
                                                         property
+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID;
- (id) initWithNode:(XMLNode *) node;
- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale;
- (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID;
- (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity;
- (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount;
-(NSString*) stringValue;
-(NSString*) rawDecimalAsString;
-(NSString*) formatStringWithoutCurrency;
-(NSString*) formatStringShort:(BOOL) shortForm;
-(NSString*) currencyPrefixShort:(BOOL) shortForm;
- (NSComparisonResult)compare:(CurrencyAmount *)other;
- (BOOL) isZeroAmount;

@end
@interface CurrencyAmount : NSObject <NSCoding>
{
	 NSDecimalNumber *amount;
	 NSString *currencyID;
}

@property (nonatomic, retain) NSDecimalNumber *amount;
@property (nonatomic, retain) NSString *currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID;
- (id) initWithNode:(XMLNode *) node;
- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale;
- (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID;
- (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity;
- (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount;
-(NSString*) stringValue;
-(NSString*) rawDecimalAsString;
-(NSString*) formatStringWithoutCurrency;
-(NSString*) formatStringShort:(BOOL) shortForm;
-(NSString*) currencyPrefixShort:(BOOL) shortForm;
- (NSComparisonResult)compare:(CurrencyAmount *)other;
- (BOOL) isZeroAmount;

@end
@interface CurrencyAmount : NSObject <NSCoding>
{
	 NSDecimalNumber *amount;
	 NSString *currencyID;
}

@property (nonatomic, retain) NSDecimalNumber *amount;
@property (nonatomic, retain) NSString *currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID;
- (id) initWithNode:(XMLNode *) node;
                                                                         class/static method
- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale;
- (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID;
- (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity;
- (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount;
-(NSString*) stringValue;
-(NSString*) rawDecimalAsString;
-(NSString*) formatStringWithoutCurrency;
-(NSString*) formatStringShort:(BOOL) shortForm;
-(NSString*) currencyPrefixShort:(BOOL) shortForm;
- (NSComparisonResult)compare:(CurrencyAmount *)other;
- (BOOL) isZeroAmount;

@end
@interface CurrencyAmount : NSObject <NSCoding>
{
	 NSDecimalNumber *amount;
	 NSString *currencyID;
}

@property (nonatomic, retain) NSDecimalNumber *amount;
@property (nonatomic, retain) NSString *currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID;
- (id) initWithNode:(XMLNode *) node;
- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale;
- (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID;
- (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity;
- (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount;
-(NSString*) stringValue;
-(NSString*) rawDecimalAsString;
-(NSString*) formatStringWithoutCurrency;
-(NSString*) formatStringShort:(BOOL) shortForm;
-(NSString*) currencyPrefixShort:(BOOL) shortForm;
- (NSComparisonResult)compare:(CurrencyAmount *)other;
- (BOOL) isZeroAmount;

@end
@interface CurrencyAmount : NSObject <NSCoding>
{
	 NSDecimalNumber *amount;
	 NSString *currencyID;
}

@property (nonatomic, retain) NSDecimalNumber *amount;
@property (nonatomic, retain) NSString *currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID;
                                                                         input parameter
- (id) initWithNode:(XMLNode *) node;
- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale;
- (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID;
- (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity;
- (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount;
-(NSString*) stringValue;
-(NSString*) rawDecimalAsString;
-(NSString*) formatStringWithoutCurrency;
-(NSString*) formatStringShort:(BOOL) shortForm;
-(NSString*) currencyPrefixShort:(BOOL) shortForm;
- (NSComparisonResult)compare:(CurrencyAmount *)other;
- (BOOL) isZeroAmount;

@end
@interface CurrencyAmount : NSObject <NSCoding>
{
	 NSDecimalNumber *amount;
	 NSString *currencyID;
}

@property (nonatomic, retain) NSDecimalNumber *amount;
@property (nonatomic, retain) NSString *currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID;
- (id) initWithNode:(XMLNode *) node;
- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale;
- (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID;
- (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity;
- (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount;
-(NSString*) stringValue;
-(NSString*) rawDecimalAsString;
-(NSString*) formatStringWithoutCurrency;
-(NSString*) formatStringShort:(BOOL) shortForm;
-(NSString*) currencyPrefixShort:(BOOL) shortForm;
- (NSComparisonResult)compare:(CurrencyAmount *)other;
- (BOOL) isZeroAmount;

@end
@interface CurrencyAmount : NSObject <NSCoding>
{
	 NSDecimalNumber *amount;
	 NSString *currencyID;
}

@property (nonatomic, retain) NSDecimalNumber *amount;


                    return type
@property (nonatomic, retain) NSString *currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID;
- (id) initWithNode:(XMLNode *) node;
- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale;
- (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID;
- (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity;
- (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount;
-(NSString*) stringValue;
-(NSString*) rawDecimalAsString;
-(NSString*) formatStringWithoutCurrency;
-(NSString*) formatStringShort:(BOOL) shortForm;
-(NSString*) currencyPrefixShort:(BOOL) shortForm;
- (NSComparisonResult)compare:(CurrencyAmount *)other;
- (BOOL) isZeroAmount;

@end
@interface CurrencyAmount : NSObject <NSCoding>
{
	 NSDecimalNumber *amount;
	 NSString *currencyID;
}

@property (nonatomic, retain) NSDecimalNumber *amount;
@property (nonatomic, retain) NSString *currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID;
- (id) initWithNode:(XMLNode *) node;
- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale;
- (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID;
- (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity;
- (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount;
-(NSString*) stringValue;
-(NSString*) rawDecimalAsString;
-(NSString*) formatStringWithoutCurrency;
-(NSString*) formatStringShort:(BOOL) shortForm;
-(NSString*) currencyPrefixShort:(BOOL) shortForm;
- (NSComparisonResult)compare:(CurrencyAmount *)other;
- (BOOL) isZeroAmount;

@end
@interface CurrencyAmount : NSObject <NSCoding>
{
	 NSDecimalNumber *amount;
	 NSString *currencyID;
}

@property (nonatomic, retain) NSDecimalNumber *amount;


                                          method name
@property (nonatomic, retain) NSString *currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID;
- (id) initWithNode:(XMLNode *) node;
- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale;
- (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID;
- (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity;
- (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount;
-(NSString*) stringValue;
-(NSString*) rawDecimalAsString;
-(NSString*) formatStringWithoutCurrency;
-(NSString*) formatStringShort:(BOOL) shortForm;
-(NSString*) currencyPrefixShort:(BOOL) shortForm;
- (NSComparisonResult)compare:(CurrencyAmount *)other;
- (BOOL) isZeroAmount;

@end
@interface CurrencyAmount : NSObject <NSCoding>
{
	 NSDecimalNumber *amount;
	 NSString *currencyID;
}

@property (nonatomic, retain) NSDecimalNumber *amount;
@property (nonatomic, retain) NSString *currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID;
- (id) initWithNode:(XMLNode *) node;
- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale;
- (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID;
- (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity;
- (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount;
-(NSString*) stringValue;
-(NSString*) rawDecimalAsString;
-(NSString*) formatStringWithoutCurrency;
-(NSString*) formatStringShort:(BOOL) shortForm;
-(NSString*) currencyPrefixShort:(BOOL) shortForm;
- (NSComparisonResult)compare:(CurrencyAmount *)other;
- (BOOL) isZeroAmount;

@end
@interface CurrencyAmount : NSObject <NSCoding>
{
	 NSDecimalNumber *amount;
	 NSString *currencyID;
}

@property (nonatomic, retain) NSDecimalNumber *amount;
@property (nonatomic, retain) NSString *currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID;
- (id) initWithNode:(XMLNode *) node;
                                     instance method
- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale;
- (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID;
- (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity;
- (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount;
-(NSString*) stringValue;
-(NSString*) rawDecimalAsString;
-(NSString*) formatStringWithoutCurrency;
-(NSString*) formatStringShort:(BOOL) shortForm;
-(NSString*) currencyPrefixShort:(BOOL) shortForm;
- (NSComparisonResult)compare:(CurrencyAmount *)other;
- (BOOL) isZeroAmount;

@end
@interface CurrencyAmount : NSObject <NSCoding>
{
	 NSDecimalNumber *amount;
	 NSString *currencyID;
}

@property (nonatomic, retain) NSDecimalNumber *amount;
@property (nonatomic, retain) NSString *currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID;
- (id) initWithNode:(XMLNode *) node;
- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale;
- (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID;
- (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity;
- (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount;
-(NSString*) stringValue;
-(NSString*) rawDecimalAsString;
-(NSString*) formatStringWithoutCurrency;
-(NSString*) formatStringShort:(BOOL) shortForm;
-(NSString*) currencyPrefixShort:(BOOL) shortForm;
- (NSComparisonResult)compare:(CurrencyAmount *)other;
- (BOOL) isZeroAmount;

@end
@interface CurrencyAmount : NSObject <NSCoding>
{
	 NSDecimalNumber *amount;
	 NSString *currencyID;
}

@property (nonatomic, retain) NSDecimalNumber *amount;
@property (nonatomic, retain) NSString *currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID;
- (id) initWithNode:(XMLNode *) node;

                            1st param
- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale;
- (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID;
- (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity;
- (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount;
-(NSString*) stringValue;
-(NSString*) rawDecimalAsString;
-(NSString*) formatStringWithoutCurrency;
-(NSString*) formatStringShort:(BOOL) shortForm;
-(NSString*) currencyPrefixShort:(BOOL) shortForm;
- (NSComparisonResult)compare:(CurrencyAmount *)other;
- (BOOL) isZeroAmount;

@end
@interface CurrencyAmount : NSObject <NSCoding>
{
	 NSDecimalNumber *amount;
	 NSString *currencyID;
}

@property (nonatomic, retain) NSDecimalNumber *amount;
@property (nonatomic, retain) NSString *currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID;
- (id) initWithNode:(XMLNode *) node;
- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale;
- (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID;
- (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity;
- (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount;
-(NSString*) stringValue;
-(NSString*) rawDecimalAsString;
-(NSString*) formatStringWithoutCurrency;
-(NSString*) formatStringShort:(BOOL) shortForm;
-(NSString*) currencyPrefixShort:(BOOL) shortForm;
- (NSComparisonResult)compare:(CurrencyAmount *)other;
- (BOOL) isZeroAmount;

@end
@interface CurrencyAmount : NSObject <NSCoding>
{
	 NSDecimalNumber *amount;
	 NSString *currencyID;
}

@property (nonatomic, retain) NSDecimalNumber *amount;
@property (nonatomic, retain) NSString *currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID;
- (id) initWithNode:(XMLNode *) node;

                                                             2nd param
- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale;
- (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID;
- (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity;
- (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount;
-(NSString*) stringValue;
-(NSString*) rawDecimalAsString;
-(NSString*) formatStringWithoutCurrency;
-(NSString*) formatStringShort:(BOOL) shortForm;
-(NSString*) currencyPrefixShort:(BOOL) shortForm;
- (NSComparisonResult)compare:(CurrencyAmount *)other;
- (BOOL) isZeroAmount;

@end
@interface CurrencyAmount : NSObject <NSCoding>
{
	 NSDecimalNumber *amount;
	 NSString *currencyID;
}

@property (nonatomic, retain) NSDecimalNumber *amount;
@property (nonatomic, retain) NSString *currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID;
- (id) initWithNode:(XMLNode *) node;
- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale;
- (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID;
- (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity;
- (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount;
-(NSString*) stringValue;
-(NSString*) rawDecimalAsString;
-(NSString*) formatStringWithoutCurrency;
-(NSString*) formatStringShort:(BOOL) shortForm;
-(NSString*) currencyPrefixShort:(BOOL) shortForm;
- (NSComparisonResult)compare:(CurrencyAmount *)other;
- (BOOL) isZeroAmount;

@end
@interface CurrencyAmount : NSObject <NSCoding>
{
	 NSDecimalNumber *amount;
	 NSString *currencyID;
}

@property (nonatomic, retain) NSDecimalNumber *amount;
@property (nonatomic, retain) NSString *currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID;
- (id) initWithNode:(XMLNode *) node;

                                                                                             3rd param
- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale;
- (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID;
- (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity;
- (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount;
-(NSString*) stringValue;
-(NSString*) rawDecimalAsString;
-(NSString*) formatStringWithoutCurrency;
-(NSString*) formatStringShort:(BOOL) shortForm;
-(NSString*) currencyPrefixShort:(BOOL) shortForm;
- (NSComparisonResult)compare:(CurrencyAmount *)other;
- (BOOL) isZeroAmount;

@end
@interface CurrencyAmount : NSObject <NSCoding>
{
	 NSDecimalNumber *amount;
	 NSString *currencyID;
}

@property (nonatomic, retain) NSDecimalNumber *amount;
@property (nonatomic, retain) NSString *currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID;
- (id) initWithNode:(XMLNode *) node;
- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale;
- (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID;
- (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity;
- (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount;
-(NSString*) stringValue;
-(NSString*) rawDecimalAsString;
-(NSString*) formatStringWithoutCurrency;
-(NSString*) formatStringShort:(BOOL) shortForm;
-(NSString*) currencyPrefixShort:(BOOL) shortForm;
- (NSComparisonResult)compare:(CurrencyAmount *)other;
- (BOOL) isZeroAmount;

@end
@interface CurrencyAmount : NSObject <NSCoding>
{
	 NSDecimalNumber *amount;
	 NSString *currencyID;
}

@property (nonatomic, retain) NSDecimalNumber *amount;
@property (nonatomic, retain) NSString *currencyID;



                                            method name
+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID;
- (id) initWithNode:(XMLNode *) node;
- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale;
- (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID;
- (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity;
- (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount;
-(NSString*) stringValue;
-(NSString*) rawDecimalAsString;
-(NSString*) formatStringWithoutCurrency;
-(NSString*) formatStringShort:(BOOL) shortForm;
-(NSString*) currencyPrefixShort:(BOOL) shortForm;
- (NSComparisonResult)compare:(CurrencyAmount *)other;
- (BOOL) isZeroAmount;

@end
@interface CurrencyAmount : NSObject <NSCoding>
{
	 NSDecimalNumber *amount;
	 NSString *currencyID;
}

@property (nonatomic, retain) NSDecimalNumber *amount;
@property (nonatomic, retain) NSString *currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID;
- (id) initWithNode:(XMLNode *) node;
- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale;
- (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID;
- (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity;
- (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount;
-(NSString*) stringValue;
-(NSString*) rawDecimalAsString;
-(NSString*) formatStringWithoutCurrency;
-(NSString*) formatStringShort:(BOOL) shortForm;
-(NSString*) currencyPrefixShort:(BOOL) shortForm;
- (NSComparisonResult)compare:(CurrencyAmount *)other;
- (BOOL) isZeroAmount;

@end
@implementation CurrencyAmount

@synthesize amount;
@synthesize currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID
{
	 return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease];
}

- (id) initWithNode:(XMLNode *) node
{
	 NSString *inCurrencyID = [node attributeValue:@"currencyID"];
	 [self initWithStringAmount:[node getText] currencyID:inCurrencyID];
	 return self;
}

- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID
{
	 amount = [[NSDecimalNumber alloc] initWithDouble:inAmount];
	 self.currencyID = inCurrencyID;
	 return self;
}

- (BOOL) isZeroAmount
{
	 return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame;
}

- (void) dealloc
{
	 [amount release];
	 [currencyID release];
	 [super dealloc];
}

@end
@implementation CurrencyAmount   implementation of interface
@synthesize amount;
@synthesize currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID
{
	 return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease];
}

- (id) initWithNode:(XMLNode *) node
{
	 NSString *inCurrencyID = [node attributeValue:@"currencyID"];
	 [self initWithStringAmount:[node getText] currencyID:inCurrencyID];
	 return self;
}

- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID
{
	 amount = [[NSDecimalNumber alloc] initWithDouble:inAmount];
	 self.currencyID = inCurrencyID;
	 return self;
}

- (BOOL) isZeroAmount
{
	 return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame;
}

- (void) dealloc
{
	 [amount release];
	 [currencyID release];
	 [super dealloc];
}

@end
@implementation CurrencyAmount

@synthesize amount;
@synthesize currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID
{
	 return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease];
}

- (id) initWithNode:(XMLNode *) node
{
	 NSString *inCurrencyID = [node attributeValue:@"currencyID"];
	 [self initWithStringAmount:[node getText] currencyID:inCurrencyID];
	 return self;
}

- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID
{
	 amount = [[NSDecimalNumber alloc] initWithDouble:inAmount];
	 self.currencyID = inCurrencyID;
	 return self;
}

- (BOOL) isZeroAmount
{
	 return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame;
}

- (void) dealloc
{
	 [amount release];
	 [currencyID release];
	 [super dealloc];
}

@end
@implementation CurrencyAmount

@synthesize amount;  macro getter/setter
@synthesize currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID
{
	 return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease];
}

- (id) initWithNode:(XMLNode *) node
{
	 NSString *inCurrencyID = [node attributeValue:@"currencyID"];
	 [self initWithStringAmount:[node getText] currencyID:inCurrencyID];
	 return self;
}

- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID
{
	 amount = [[NSDecimalNumber alloc] initWithDouble:inAmount];
	 self.currencyID = inCurrencyID;
	 return self;
}

- (BOOL) isZeroAmount
{
	 return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame;
}

- (void) dealloc
{
	 [amount release];
	 [currencyID release];
	 [super dealloc];
}

@end
@implementation CurrencyAmount

@synthesize amount;
@synthesize currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID
{
	 return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease];
}

- (id) initWithNode:(XMLNode *) node
{
	 NSString *inCurrencyID = [node attributeValue:@"currencyID"];
	 [self initWithStringAmount:[node getText] currencyID:inCurrencyID];
	 return self;
}

- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID
{
	 amount = [[NSDecimalNumber alloc] initWithDouble:inAmount];
	 self.currencyID = inCurrencyID;
	 return self;
}

- (BOOL) isZeroAmount
{
	 return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame;
}

- (void) dealloc
{
	 [amount release];
	 [currencyID release];
	 [super dealloc];
}

@end
@implementation CurrencyAmount

@synthesize amount;
@synthesize currencyID;
                            method implementations
+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID
{
	 return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease];
}

- (id) initWithNode:(XMLNode *) node
{
	 NSString *inCurrencyID = [node attributeValue:@"currencyID"];
	 [self initWithStringAmount:[node getText] currencyID:inCurrencyID];
	 return self;
}

- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID
{
	 amount = [[NSDecimalNumber alloc] initWithDouble:inAmount];
	 self.currencyID = inCurrencyID;
	 return self;
}

- (BOOL) isZeroAmount
{
	 return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame;
}

- (void) dealloc
{
	 [amount release];
	 [currencyID release];
	 [super dealloc];
}

@end
@implementation CurrencyAmount

@synthesize amount;
@synthesize currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID
{
	 return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease];
}

- (id) initWithNode:(XMLNode *) node
{
	 NSString *inCurrencyID = [node attributeValue:@"currencyID"];
	 [self initWithStringAmount:[node getText] currencyID:inCurrencyID];
	 return self;
}

- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID
{
	 amount = [[NSDecimalNumber alloc] initWithDouble:inAmount];
	 self.currencyID = inCurrencyID;
	 return self;
}

- (BOOL) isZeroAmount
{
	 return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame;
}

- (void) dealloc
{
	 [amount release];
	 [currencyID release];
	 [super dealloc];
}

@end
@implementation CurrencyAmount

@synthesize amount;
@synthesize currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID
{
	 return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease];
}


                             method invocation
- (id) initWithNode:(XMLNode *) node
{
	 NSString *inCurrencyID = [node attributeValue:@"currencyID"];
	 [self initWithStringAmount:[node getText] currencyID:inCurrencyID];
	 return self;
}

- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID
{
	 amount = [[NSDecimalNumber alloc] initWithDouble:inAmount];
	 self.currencyID = inCurrencyID;
	 return self;
}

- (BOOL) isZeroAmount
{
	 return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame;
}

- (void) dealloc
{
	 [amount release];
	 [currencyID release];
	 [super dealloc];
}

@end
@implementation CurrencyAmount

@synthesize amount;
@synthesize currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID
{
	 return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease];
}

- (id) initWithNode:(XMLNode *) node
{
	 NSString *inCurrencyID = [node attributeValue:@"currencyID"];
	 [self initWithStringAmount:[node getText] currencyID:inCurrencyID];
	 return self;
}

- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID
{
	 amount = [[NSDecimalNumber alloc] initWithDouble:inAmount];
	 self.currencyID = inCurrencyID;
	 return self;
}

- (BOOL) isZeroAmount
{
	 return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame;
}

- (void) dealloc
{
	 [amount release];
	 [currencyID release];
	 [super dealloc];
}

@end
@implementation CurrencyAmount

@synthesize amount;
@synthesize currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID
{
	 return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease];
}

- (id) initWithNode:(XMLNode *) node
{
	 NSString *inCurrencyID = [node attributeValue:@"currencyID"];string literal
	 [self initWithStringAmount:[node getText] currencyID:inCurrencyID];
	 return self;
}

- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID
{
	 amount = [[NSDecimalNumber alloc] initWithDouble:inAmount];
	 self.currencyID = inCurrencyID;
	 return self;
}

- (BOOL) isZeroAmount
{
	 return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame;
}

- (void) dealloc
{
	 [amount release];
	 [currencyID release];
	 [super dealloc];
}

@end
@implementation CurrencyAmount

@synthesize amount;
@synthesize currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID
{
	 return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease];
}

- (id) initWithNode:(XMLNode *) node
{
	 NSString *inCurrencyID = [node attributeValue:@"currencyID"];
	 [self initWithStringAmount:[node getText] currencyID:inCurrencyID];
	 return self;
}

- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID
{
	 amount = [[NSDecimalNumber alloc] initWithDouble:inAmount];
	 self.currencyID = inCurrencyID;
	 return self;
}

- (BOOL) isZeroAmount
{
	 return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame;
}

- (void) dealloc
{
	 [amount release];
	 [currencyID release];
	 [super dealloc];
}

@end
@implementation CurrencyAmount

@synthesize amount;
@synthesize currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID
{
	 return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease];
}

- (id) initWithNode:(XMLNode *) node
{
	 NSString *inCurrencyID = [node attributeValue:@"currencyID"];
	 [self initWithStringAmount:[node getText] currencyID:inCurrencyID];
	 return self;
}
                                  nested call
- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID
{
	 amount = [[NSDecimalNumber alloc] initWithDouble:inAmount];
	 self.currencyID = inCurrencyID;
	 return self;
}

- (BOOL) isZeroAmount
{
	 return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame;
}

- (void) dealloc
{
	 [amount release];
	 [currencyID release];
	 [super dealloc];
}

@end
@implementation CurrencyAmount

@synthesize amount;
@synthesize currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID
{
	 return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease];
}

- (id) initWithNode:(XMLNode *) node
{
	 NSString *inCurrencyID = [node attributeValue:@"currencyID"];
	 [self initWithStringAmount:[node getText] currencyID:inCurrencyID];
	 return self;
}

- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID
{
	 amount = [[NSDecimalNumber alloc] initWithDouble:inAmount];
	 self.currencyID = inCurrencyID;
	 return self;
}

- (BOOL) isZeroAmount
{
	 return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame;
}

- (void) dealloc
{
	 [amount release];
	 [currencyID release];
	 [super dealloc];
}

@end
@implementation CurrencyAmount

@synthesize amount;
@synthesize currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID
{
	 return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease];
}

- (id) initWithNode:(XMLNode *) node
{
	 NSString *inCurrencyID = [node attributeValue:@"currencyID"];
	 [self initWithStringAmount:[node getText] currencyID:inCurrencyID];

this instance
	 return self;
}

- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID
{
	 amount = [[NSDecimalNumber alloc] initWithDouble:inAmount];
	 self.currencyID = inCurrencyID;
	 return self;
}

- (BOOL) isZeroAmount
{
	 return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame;
}

- (void) dealloc
{
	 [amount release];
	 [currencyID release];
	 [super dealloc];
}

@end
@implementation CurrencyAmount

@synthesize amount;
@synthesize currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID
{
	 return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease];
}

- (id) initWithNode:(XMLNode *) node
{
	 NSString *inCurrencyID = [node attributeValue:@"currencyID"];
	 [self initWithStringAmount:[node getText] currencyID:inCurrencyID];
	 return self;
}

- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID
{
	 amount = [[NSDecimalNumber alloc] initWithDouble:inAmount];
	 self.currencyID = inCurrencyID;
	 return self;
}

- (BOOL) isZeroAmount
{
	 return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame;
}

- (void) dealloc
{
	 [amount release];
	 [currencyID release];
	 [super dealloc];
}

@end
@implementation CurrencyAmount

@synthesize amount;
@synthesize currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID
{
	 return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease];
}

- (id) initWithNode:(XMLNode *) node
{
	 NSString *inCurrencyID = [node attributeValue:@"currencyID"];
	 [self initWithStringAmount:[node getText] currencyID:inCurrencyID];
	 return self;
}

- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID
{
	 amount = [[NSDecimalNumber alloc] initWithDouble:inAmount];
	 self.currencyID = inCurrencyID;
	 return self;
}

- (BOOL) isZeroAmount
{
	 return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame;
}

- (void) dealloc
{
                  override superclass
	 [amount release];
	 [currencyID release];
	 [super dealloc];
}

@end
@implementation CurrencyAmount

@synthesize amount;
@synthesize currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID
{
	 return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease];
}

- (id) initWithNode:(XMLNode *) node
{
	 NSString *inCurrencyID = [node attributeValue:@"currencyID"];
	 [self initWithStringAmount:[node getText] currencyID:inCurrencyID];
	 return self;
}

- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID
{
	 amount = [[NSDecimalNumber alloc] initWithDouble:inAmount];
	 self.currencyID = inCurrencyID;
	 return self;
}

- (BOOL) isZeroAmount
{
	 return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame;
}

- (void) dealloc
{
	 [amount release];
	 [currencyID release];
	 [super dealloc];
}

@end
@implementation CurrencyAmount

@synthesize amount;
@synthesize currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID
{
	 return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease];
}

- (id) initWithNode:(XMLNode *) node
{
	 NSString *inCurrencyID = [node attributeValue:@"currencyID"];
	 [self initWithStringAmount:[node getText] currencyID:inCurrencyID];
	 return self;
}

- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID
{
	 amount = [[NSDecimalNumber alloc] initWithDouble:inAmount];
	 self.currencyID = inCurrencyID;
	 return self;
}

- (BOOL) isZeroAmount
{
	 return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame;
}

- (void) dealloc
{

                          memory mangement
	 [amount release];
	 [currencyID release];
	 [super dealloc];
}

@end
@implementation CurrencyAmount

@synthesize amount;
@synthesize currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID
{
	 return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease];
}

- (id) initWithNode:(XMLNode *) node
{
	 NSString *inCurrencyID = [node attributeValue:@"currencyID"];
	 [self initWithStringAmount:[node getText] currencyID:inCurrencyID];
	 return self;
}

- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID
{
	 amount = [[NSDecimalNumber alloc] initWithDouble:inAmount];
	 self.currencyID = inCurrencyID;
	 return self;
}

- (BOOL) isZeroAmount
{
	 return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame;
}

- (void) dealloc
{
	 [amount release];
	 [currencyID release];
	 [super dealloc];
}

@end
Tools
Mobile Development 101
XCode


•   Full featured IDE

    •   Build, debug

    •   Code navigation, completion

    •   Refactoring

    •   SCM Integration

    •   Wizards
Interface Builder



•   Drag-and-drop, UI Design Tool

•   Integrated with XCode

    •   Connect code to UI elements
        (events)
Instruments


•   Profiling Tool

•   Memory Usage

    •   Leaks

•   CPU Usage

•   Threads, I/O Monitoring
iPhone Emulator




Runs application natively
Not all APIs available
Some APIs mocked: Location
Cocoa Touch


•   MVC Framework

    •   AppKit

        •   Controls, Events

    •   UIKit

        •   Accelerometer, Multi-touch
Dangers
Garbage
Don’t Call Me...




Push Notifications = Substitute for
Background Processing?
App 2 App




No formal intra-application
communication allowed
Custom URL protocols used as hack
QA?




Manual provisioning: 100 iPhone
Mobile Development 101
Mobile Development 101
Android

•   Devices, devices, devices

•   Open Source: OS, SDK

•   Language: Java+

•   Features: Multi-threaded, Open GL
    ES, Contacts, Email, WebKit, Media,
    GPS, Google Maps, (Video)Camera,
    Local Database, Background
    Service, Garbage Collection, Intents

•   Pitfalls: Memory Management,
    Assault on Battery, Devices,
    Devices, Devices...
Compiler                Dex Compiler              Compress




Source Code              Class files                  Dex File              APK
Mobile Development 101
Java
Tools
Tools
DDMS
Android Runtime & App Framework

•   Activities & Intents                 •   Separation of Concerns

    •   Launch an Activity based on an       •   Layout
        Intent
                                             •   Application Logic
    •   Application Interop

•   XML => Bytecode

    •   Layout

    •   Localization
Mobile Development 101
The Web
Services Diet



Web Services: Made for Servers, not
Phones
Data Centric vs. Functional Centric
Mo’ Data, Mo’ Problems
XML = Teh Suck
Try Not to
Drown


•Images, Audio, Video
•Browser features
taken for granted
•Caching / Cache
Management
•Simultaneous
Loading
Security


•   What to store on device?

•   What about stolen devices?

•   Jailbreaking?

•   Phishing?

    •   OAuth???

•   Hard coding == FAIL
Upgrades? What Upgrades?


•   Far from automatic

•   Out of sight, out of mind

    •   Don’t expect upgrades

•   Lots of versions to manage

    •   Agile Development FTW???
eb
        le W
     b i
Mo
Mobile Web a.k.a. HTML 5

•   One app to rule them all: iPhone,
    Android, webOS, Blackberry*

•   Language: JavaScript, HTML, CSS

•   Tools: ...

•   Features: Multi-threaded!, Open GL
    ES, Contacts, Email, GPS, Maps,
    (Video)Camera, Local Database,
    Media, Memory Management,
    Security

•   Pitfalls: Memory management, no
    background processing, WebKit
    versioning
Resources
•   iPhone Developer Center

•   Silicon Valley iPhone Developers

•   Stack Overflow

•   MOTODEV

•   Android Developers

•   Silicon Valley Android Developers

•   Android Developers Group
Sprint Developer Conference


•   October 26-28

•   Santa Clara Convention Center

•   Android, Mobile Web, webOS, RIM, J2ME, WinMo

•   Coding Camps

    •   Free HTC Hero (Android)

•   4G Demo and Beta

More Related Content

PPT
Jude's Drafting Table The Strawberry Question
PPT
PPT
Best Buy Computer World100 Pres3.1.09
PPTX
Publishing for the students living in the iPad era: our view of the industry
PPS
Camiño Inglés en Vilar Do Colo
PDF
Mobile Showcase Moblin2
PPT
PDF
Unit 1.1
Jude's Drafting Table The Strawberry Question
Best Buy Computer World100 Pres3.1.09
Publishing for the students living in the iPad era: our view of the industry
Camiño Inglés en Vilar Do Colo
Mobile Showcase Moblin2
Unit 1.1

Viewers also liked (19)

PPT
Kulturkartläggnings processen
PPTX
Continuous deployments in Azure websites (by Anton Vidishchev)
PPT
Kliniksefiuzman
PPS
Kirimkongo
PPT
Kusgribi
PPT
The Future of Big Data in Education
PPT
Życie prywatne w rodzinie
PPT
Marketing strategies to increase the ROI on mobile
PDF
Sprawne Smoki - Gładyszów 2012
PPS
香港六合彩 &raquo; SlideShare
PPT
Qenlacecovalente
PDF
The CLAS APP
DOCX
El abuso de las drogas
PPT
Time Manag.
PPT
25et_Bulgaria
PDF
Еmail vs Social — Евгений Вольнов
PPTX
Latvia my school-keipenes_school(1)
PDF
R&D activites on Learning Analytics
PDF
Examenopleiding energieconsulent mfl
Kulturkartläggnings processen
Continuous deployments in Azure websites (by Anton Vidishchev)
Kliniksefiuzman
Kirimkongo
Kusgribi
The Future of Big Data in Education
Życie prywatne w rodzinie
Marketing strategies to increase the ROI on mobile
Sprawne Smoki - Gładyszów 2012
香港六合彩 &raquo; SlideShare
Qenlacecovalente
The CLAS APP
El abuso de las drogas
Time Manag.
25et_Bulgaria
Еmail vs Social — Евгений Вольнов
Latvia my school-keipenes_school(1)
R&D activites on Learning Analytics
Examenopleiding energieconsulent mfl
Ad

Similar to Mobile Development 101 (20)

PDF
iPhone Programming in 30 minutes (?) [FTS]
PDF
Objective-C for Java Developers
KEY
iPhone Development Intro
PDF
Native Phone Development 101
PDF
MFF UK - Introduction to iOS
PDF
Beginningi os part1-bobmccune
PDF
FI MUNI 2012 - iOS Basics
KEY
Objective-C Crash Course for Web Developers
PDF
I Phone On Rails
PDF
Modernizes your objective C - Oliviero
PDF
iPhone Seminar Part 2
PDF
iOS overview
PDF
What's new in iOS 7
PPTX
Code camp 2011 Getting Started with IOS, Una Daly
PDF
Ios 4 Programming Cookbook Solutions Examples For Iphone Ipad And Ipod Touch ...
KEY
In-App Purchase
PDF
iOS 2 - The practical Stuff
PDF
Modernize your Objective-C
PDF
20111030i phonedeveloperworkshoppublished
iPhone Programming in 30 minutes (?) [FTS]
Objective-C for Java Developers
iPhone Development Intro
Native Phone Development 101
MFF UK - Introduction to iOS
Beginningi os part1-bobmccune
FI MUNI 2012 - iOS Basics
Objective-C Crash Course for Web Developers
I Phone On Rails
Modernizes your objective C - Oliviero
iPhone Seminar Part 2
iOS overview
What's new in iOS 7
Code camp 2011 Getting Started with IOS, Una Daly
Ios 4 Programming Cookbook Solutions Examples For Iphone Ipad And Ipod Touch ...
In-App Purchase
iOS 2 - The practical Stuff
Modernize your Objective-C
20111030i phonedeveloperworkshoppublished
Ad

More from Michael Galpin (12)

KEY
Android lessons you won't learn in school
KEY
Design Patterns for Tablets and Smartphones
KEY
Android workshop
PDF
Scala on Android: Experiences at Bump Technologies
KEY
That’s My App - Running in Your Background - Draining Your Battery
PDF
Mobile Web 5.0
PDF
Persistent Data Structures And Managed References
KEY
Scala on Your Phone
KEY
RIAs Done Right: Grails, Flex, and EXT GWT
KEY
Eclipse @eBay 2009
PDF
Introduction to Scala for Java Developers
PDF
Eclipse@eBay
Android lessons you won't learn in school
Design Patterns for Tablets and Smartphones
Android workshop
Scala on Android: Experiences at Bump Technologies
That’s My App - Running in Your Background - Draining Your Battery
Mobile Web 5.0
Persistent Data Structures And Managed References
Scala on Your Phone
RIAs Done Right: Grails, Flex, and EXT GWT
Eclipse @eBay 2009
Introduction to Scala for Java Developers
Eclipse@eBay

Recently uploaded (20)

PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PPTX
Big Data Technologies - Introduction.pptx
PPTX
MYSQL Presentation for SQL database connectivity
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
Empathic Computing: Creating Shared Understanding
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PDF
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
PDF
Approach and Philosophy of On baking technology
PDF
Review of recent advances in non-invasive hemoglobin estimation
DOCX
The AUB Centre for AI in Media Proposal.docx
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PPTX
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
Advanced methodologies resolving dimensionality complications for autism neur...
Big Data Technologies - Introduction.pptx
MYSQL Presentation for SQL database connectivity
Reach Out and Touch Someone: Haptics and Empathic Computing
Empathic Computing: Creating Shared Understanding
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
Approach and Philosophy of On baking technology
Review of recent advances in non-invasive hemoglobin estimation
The AUB Centre for AI in Media Proposal.docx
Diabetes mellitus diagnosis method based random forest with bat algorithm
Mobile App Security Testing_ A Comprehensive Guide.pdf
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
Building Integrated photovoltaic BIPV_UPV.pdf
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Agricultural_Statistics_at_a_Glance_2022_0.pdf

Mobile Development 101

  • 1. Mobile Development 101: Developing Apps for the iPhone and the Android Platforms Michael Galpin, eBay @michaelg
  • 3. Mobile Transactions 30.0 22.5 $M 15.0 7.5 0 Jan 1, 2008 May 1, 2008 Aug 1, 2008 Oct 1, 2008 Dec 1, 2008 Feb 1, 2009 Apr 1, 2009 Jun 1, 2009 Mobile Web iPhone
  • 6. Usage Capabilities Phones That Matter Distribution Barriers
  • 9. iPhone 50% of Mobile Internet Usage Comprehensive Tools High Volume Distribution Channel
  • 10. Overview • Programming Language: Objective-C • Tools: XCode/Interface Builder, iPhone SDK • Framework: Cocoa Touch • Features: Multi-threaded, Open GL ES, Contacts, Email, WebKit, iTunes, GPS, Google Maps, (Video)Camera, Local Database, Push Notifications • Pitfalls: Memory management, no background processing, no intra-application communication*, QA, App Store regulations
  • 11. Objective-C • Derived and compatible with C • C libraries in many cases • Object-oriented • Smalltalk inspired • Surprisingly dynamic
  • 12. @interface CurrencyAmount : NSObject <NSCoding> { NSDecimalNumber *amount; NSString *currencyID; } @property (nonatomic, retain) NSDecimalNumber *amount; @property (nonatomic, retain) NSString *currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID; - (id) initWithNode:(XMLNode *) node; - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale; - (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID; - (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity; - (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount; -(NSString*) stringValue; -(NSString*) rawDecimalAsString; -(NSString*) formatStringWithoutCurrency; -(NSString*) formatStringShort:(BOOL) shortForm; -(NSString*) currencyPrefixShort:(BOOL) shortForm; - (NSComparisonResult)compare:(CurrencyAmount *)other; - (BOOL) isZeroAmount; @end
  • 13. interface(header) @interface CurrencyAmount : NSObject <NSCoding> { NSDecimalNumber *amount; NSString *currencyID; } @property (nonatomic, retain) NSDecimalNumber *amount; @property (nonatomic, retain) NSString *currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID; - (id) initWithNode:(XMLNode *) node; - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale; - (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID; - (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity; - (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount; -(NSString*) stringValue; -(NSString*) rawDecimalAsString; -(NSString*) formatStringWithoutCurrency; -(NSString*) formatStringShort:(BOOL) shortForm; -(NSString*) currencyPrefixShort:(BOOL) shortForm; - (NSComparisonResult)compare:(CurrencyAmount *)other; - (BOOL) isZeroAmount; @end
  • 14. @interface CurrencyAmount : NSObject <NSCoding> { NSDecimalNumber *amount; NSString *currencyID; } @property (nonatomic, retain) NSDecimalNumber *amount; @property (nonatomic, retain) NSString *currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID; - (id) initWithNode:(XMLNode *) node; - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale; - (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID; - (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity; - (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount; -(NSString*) stringValue; -(NSString*) rawDecimalAsString; -(NSString*) formatStringWithoutCurrency; -(NSString*) formatStringShort:(BOOL) shortForm; -(NSString*) currencyPrefixShort:(BOOL) shortForm; - (NSComparisonResult)compare:(CurrencyAmount *)other; - (BOOL) isZeroAmount; @end
  • 15. inheritance @interface CurrencyAmount : NSObject <NSCoding> { NSDecimalNumber *amount; NSString *currencyID; } @property (nonatomic, retain) NSDecimalNumber *amount; @property (nonatomic, retain) NSString *currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID; - (id) initWithNode:(XMLNode *) node; - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale; - (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID; - (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity; - (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount; -(NSString*) stringValue; -(NSString*) rawDecimalAsString; -(NSString*) formatStringWithoutCurrency; -(NSString*) formatStringShort:(BOOL) shortForm; -(NSString*) currencyPrefixShort:(BOOL) shortForm; - (NSComparisonResult)compare:(CurrencyAmount *)other; - (BOOL) isZeroAmount; @end
  • 16. @interface CurrencyAmount : NSObject <NSCoding> { NSDecimalNumber *amount; NSString *currencyID; } @property (nonatomic, retain) NSDecimalNumber *amount; @property (nonatomic, retain) NSString *currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID; - (id) initWithNode:(XMLNode *) node; - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale; - (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID; - (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity; - (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount; -(NSString*) stringValue; -(NSString*) rawDecimalAsString; -(NSString*) formatStringWithoutCurrency; -(NSString*) formatStringShort:(BOOL) shortForm; -(NSString*) currencyPrefixShort:(BOOL) shortForm; - (NSComparisonResult)compare:(CurrencyAmount *)other; - (BOOL) isZeroAmount; @end
  • 17. protocol @interface CurrencyAmount : NSObject <NSCoding> { NSDecimalNumber *amount; NSString *currencyID; } @property (nonatomic, retain) NSDecimalNumber *amount; @property (nonatomic, retain) NSString *currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID; - (id) initWithNode:(XMLNode *) node; - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale; - (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID; - (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity; - (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount; -(NSString*) stringValue; -(NSString*) rawDecimalAsString; -(NSString*) formatStringWithoutCurrency; -(NSString*) formatStringShort:(BOOL) shortForm; -(NSString*) currencyPrefixShort:(BOOL) shortForm; - (NSComparisonResult)compare:(CurrencyAmount *)other; - (BOOL) isZeroAmount; @end
  • 18. @interface CurrencyAmount : NSObject <NSCoding> { NSDecimalNumber *amount; NSString *currencyID; } @property (nonatomic, retain) NSDecimalNumber *amount; @property (nonatomic, retain) NSString *currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID; - (id) initWithNode:(XMLNode *) node; - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale; - (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID; - (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity; - (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount; -(NSString*) stringValue; -(NSString*) rawDecimalAsString; -(NSString*) formatStringWithoutCurrency; -(NSString*) formatStringShort:(BOOL) shortForm; -(NSString*) currencyPrefixShort:(BOOL) shortForm; - (NSComparisonResult)compare:(CurrencyAmount *)other; - (BOOL) isZeroAmount; @end
  • 19. @interface CurrencyAmount : NSObject <NSCoding> { NSDecimalNumber *amount; NSString *currencyID; instance variable } @property (nonatomic, retain) NSDecimalNumber *amount; @property (nonatomic, retain) NSString *currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID; - (id) initWithNode:(XMLNode *) node; - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale; - (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID; - (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity; - (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount; -(NSString*) stringValue; -(NSString*) rawDecimalAsString; -(NSString*) formatStringWithoutCurrency; -(NSString*) formatStringShort:(BOOL) shortForm; -(NSString*) currencyPrefixShort:(BOOL) shortForm; - (NSComparisonResult)compare:(CurrencyAmount *)other; - (BOOL) isZeroAmount; @end
  • 20. @interface CurrencyAmount : NSObject <NSCoding> { NSDecimalNumber *amount; NSString *currencyID; } @property (nonatomic, retain) NSDecimalNumber *amount; @property (nonatomic, retain) NSString *currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID; - (id) initWithNode:(XMLNode *) node; - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale; - (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID; - (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity; - (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount; -(NSString*) stringValue; -(NSString*) rawDecimalAsString; -(NSString*) formatStringWithoutCurrency; -(NSString*) formatStringShort:(BOOL) shortForm; -(NSString*) currencyPrefixShort:(BOOL) shortForm; - (NSComparisonResult)compare:(CurrencyAmount *)other; - (BOOL) isZeroAmount; @end
  • 21. @interface CurrencyAmount : NSObject <NSCoding> { NSDecimalNumber *amount; NSString *currencyID; } method declarations @property (nonatomic, retain) NSDecimalNumber *amount; @property (nonatomic, retain) NSString *currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID; - (id) initWithNode:(XMLNode *) node; - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale; - (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID; - (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity; - (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount; -(NSString*) stringValue; -(NSString*) rawDecimalAsString; -(NSString*) formatStringWithoutCurrency; -(NSString*) formatStringShort:(BOOL) shortForm; -(NSString*) currencyPrefixShort:(BOOL) shortForm; - (NSComparisonResult)compare:(CurrencyAmount *)other; - (BOOL) isZeroAmount; @end
  • 22. @interface CurrencyAmount : NSObject <NSCoding> { NSDecimalNumber *amount; NSString *currencyID; } @property (nonatomic, retain) NSDecimalNumber *amount; @property (nonatomic, retain) NSString *currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID; - (id) initWithNode:(XMLNode *) node; - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale; - (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID; - (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity; - (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount; -(NSString*) stringValue; -(NSString*) rawDecimalAsString; -(NSString*) formatStringWithoutCurrency; -(NSString*) formatStringShort:(BOOL) shortForm; -(NSString*) currencyPrefixShort:(BOOL) shortForm; - (NSComparisonResult)compare:(CurrencyAmount *)other; - (BOOL) isZeroAmount; @end
  • 23. @interface CurrencyAmount : NSObject <NSCoding> { NSDecimalNumber *amount; NSString *currencyID; } @property (nonatomic, retain) NSDecimalNumber *amount; @property (nonatomic, retain) NSString *currencyID; property + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID; - (id) initWithNode:(XMLNode *) node; - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale; - (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID; - (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity; - (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount; -(NSString*) stringValue; -(NSString*) rawDecimalAsString; -(NSString*) formatStringWithoutCurrency; -(NSString*) formatStringShort:(BOOL) shortForm; -(NSString*) currencyPrefixShort:(BOOL) shortForm; - (NSComparisonResult)compare:(CurrencyAmount *)other; - (BOOL) isZeroAmount; @end
  • 24. @interface CurrencyAmount : NSObject <NSCoding> { NSDecimalNumber *amount; NSString *currencyID; } @property (nonatomic, retain) NSDecimalNumber *amount; @property (nonatomic, retain) NSString *currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID; - (id) initWithNode:(XMLNode *) node; - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale; - (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID; - (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity; - (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount; -(NSString*) stringValue; -(NSString*) rawDecimalAsString; -(NSString*) formatStringWithoutCurrency; -(NSString*) formatStringShort:(BOOL) shortForm; -(NSString*) currencyPrefixShort:(BOOL) shortForm; - (NSComparisonResult)compare:(CurrencyAmount *)other; - (BOOL) isZeroAmount; @end
  • 25. @interface CurrencyAmount : NSObject <NSCoding> { NSDecimalNumber *amount; NSString *currencyID; } @property (nonatomic, retain) NSDecimalNumber *amount; @property (nonatomic, retain) NSString *currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID; - (id) initWithNode:(XMLNode *) node; class/static method - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale; - (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID; - (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity; - (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount; -(NSString*) stringValue; -(NSString*) rawDecimalAsString; -(NSString*) formatStringWithoutCurrency; -(NSString*) formatStringShort:(BOOL) shortForm; -(NSString*) currencyPrefixShort:(BOOL) shortForm; - (NSComparisonResult)compare:(CurrencyAmount *)other; - (BOOL) isZeroAmount; @end
  • 26. @interface CurrencyAmount : NSObject <NSCoding> { NSDecimalNumber *amount; NSString *currencyID; } @property (nonatomic, retain) NSDecimalNumber *amount; @property (nonatomic, retain) NSString *currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID; - (id) initWithNode:(XMLNode *) node; - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale; - (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID; - (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity; - (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount; -(NSString*) stringValue; -(NSString*) rawDecimalAsString; -(NSString*) formatStringWithoutCurrency; -(NSString*) formatStringShort:(BOOL) shortForm; -(NSString*) currencyPrefixShort:(BOOL) shortForm; - (NSComparisonResult)compare:(CurrencyAmount *)other; - (BOOL) isZeroAmount; @end
  • 27. @interface CurrencyAmount : NSObject <NSCoding> { NSDecimalNumber *amount; NSString *currencyID; } @property (nonatomic, retain) NSDecimalNumber *amount; @property (nonatomic, retain) NSString *currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID; input parameter - (id) initWithNode:(XMLNode *) node; - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale; - (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID; - (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity; - (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount; -(NSString*) stringValue; -(NSString*) rawDecimalAsString; -(NSString*) formatStringWithoutCurrency; -(NSString*) formatStringShort:(BOOL) shortForm; -(NSString*) currencyPrefixShort:(BOOL) shortForm; - (NSComparisonResult)compare:(CurrencyAmount *)other; - (BOOL) isZeroAmount; @end
  • 28. @interface CurrencyAmount : NSObject <NSCoding> { NSDecimalNumber *amount; NSString *currencyID; } @property (nonatomic, retain) NSDecimalNumber *amount; @property (nonatomic, retain) NSString *currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID; - (id) initWithNode:(XMLNode *) node; - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale; - (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID; - (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity; - (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount; -(NSString*) stringValue; -(NSString*) rawDecimalAsString; -(NSString*) formatStringWithoutCurrency; -(NSString*) formatStringShort:(BOOL) shortForm; -(NSString*) currencyPrefixShort:(BOOL) shortForm; - (NSComparisonResult)compare:(CurrencyAmount *)other; - (BOOL) isZeroAmount; @end
  • 29. @interface CurrencyAmount : NSObject <NSCoding> { NSDecimalNumber *amount; NSString *currencyID; } @property (nonatomic, retain) NSDecimalNumber *amount; return type @property (nonatomic, retain) NSString *currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID; - (id) initWithNode:(XMLNode *) node; - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale; - (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID; - (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity; - (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount; -(NSString*) stringValue; -(NSString*) rawDecimalAsString; -(NSString*) formatStringWithoutCurrency; -(NSString*) formatStringShort:(BOOL) shortForm; -(NSString*) currencyPrefixShort:(BOOL) shortForm; - (NSComparisonResult)compare:(CurrencyAmount *)other; - (BOOL) isZeroAmount; @end
  • 30. @interface CurrencyAmount : NSObject <NSCoding> { NSDecimalNumber *amount; NSString *currencyID; } @property (nonatomic, retain) NSDecimalNumber *amount; @property (nonatomic, retain) NSString *currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID; - (id) initWithNode:(XMLNode *) node; - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale; - (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID; - (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity; - (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount; -(NSString*) stringValue; -(NSString*) rawDecimalAsString; -(NSString*) formatStringWithoutCurrency; -(NSString*) formatStringShort:(BOOL) shortForm; -(NSString*) currencyPrefixShort:(BOOL) shortForm; - (NSComparisonResult)compare:(CurrencyAmount *)other; - (BOOL) isZeroAmount; @end
  • 31. @interface CurrencyAmount : NSObject <NSCoding> { NSDecimalNumber *amount; NSString *currencyID; } @property (nonatomic, retain) NSDecimalNumber *amount; method name @property (nonatomic, retain) NSString *currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID; - (id) initWithNode:(XMLNode *) node; - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale; - (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID; - (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity; - (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount; -(NSString*) stringValue; -(NSString*) rawDecimalAsString; -(NSString*) formatStringWithoutCurrency; -(NSString*) formatStringShort:(BOOL) shortForm; -(NSString*) currencyPrefixShort:(BOOL) shortForm; - (NSComparisonResult)compare:(CurrencyAmount *)other; - (BOOL) isZeroAmount; @end
  • 32. @interface CurrencyAmount : NSObject <NSCoding> { NSDecimalNumber *amount; NSString *currencyID; } @property (nonatomic, retain) NSDecimalNumber *amount; @property (nonatomic, retain) NSString *currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID; - (id) initWithNode:(XMLNode *) node; - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale; - (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID; - (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity; - (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount; -(NSString*) stringValue; -(NSString*) rawDecimalAsString; -(NSString*) formatStringWithoutCurrency; -(NSString*) formatStringShort:(BOOL) shortForm; -(NSString*) currencyPrefixShort:(BOOL) shortForm; - (NSComparisonResult)compare:(CurrencyAmount *)other; - (BOOL) isZeroAmount; @end
  • 33. @interface CurrencyAmount : NSObject <NSCoding> { NSDecimalNumber *amount; NSString *currencyID; } @property (nonatomic, retain) NSDecimalNumber *amount; @property (nonatomic, retain) NSString *currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID; - (id) initWithNode:(XMLNode *) node; instance method - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale; - (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID; - (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity; - (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount; -(NSString*) stringValue; -(NSString*) rawDecimalAsString; -(NSString*) formatStringWithoutCurrency; -(NSString*) formatStringShort:(BOOL) shortForm; -(NSString*) currencyPrefixShort:(BOOL) shortForm; - (NSComparisonResult)compare:(CurrencyAmount *)other; - (BOOL) isZeroAmount; @end
  • 34. @interface CurrencyAmount : NSObject <NSCoding> { NSDecimalNumber *amount; NSString *currencyID; } @property (nonatomic, retain) NSDecimalNumber *amount; @property (nonatomic, retain) NSString *currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID; - (id) initWithNode:(XMLNode *) node; - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale; - (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID; - (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity; - (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount; -(NSString*) stringValue; -(NSString*) rawDecimalAsString; -(NSString*) formatStringWithoutCurrency; -(NSString*) formatStringShort:(BOOL) shortForm; -(NSString*) currencyPrefixShort:(BOOL) shortForm; - (NSComparisonResult)compare:(CurrencyAmount *)other; - (BOOL) isZeroAmount; @end
  • 35. @interface CurrencyAmount : NSObject <NSCoding> { NSDecimalNumber *amount; NSString *currencyID; } @property (nonatomic, retain) NSDecimalNumber *amount; @property (nonatomic, retain) NSString *currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID; - (id) initWithNode:(XMLNode *) node; 1st param - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale; - (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID; - (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity; - (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount; -(NSString*) stringValue; -(NSString*) rawDecimalAsString; -(NSString*) formatStringWithoutCurrency; -(NSString*) formatStringShort:(BOOL) shortForm; -(NSString*) currencyPrefixShort:(BOOL) shortForm; - (NSComparisonResult)compare:(CurrencyAmount *)other; - (BOOL) isZeroAmount; @end
  • 36. @interface CurrencyAmount : NSObject <NSCoding> { NSDecimalNumber *amount; NSString *currencyID; } @property (nonatomic, retain) NSDecimalNumber *amount; @property (nonatomic, retain) NSString *currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID; - (id) initWithNode:(XMLNode *) node; - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale; - (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID; - (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity; - (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount; -(NSString*) stringValue; -(NSString*) rawDecimalAsString; -(NSString*) formatStringWithoutCurrency; -(NSString*) formatStringShort:(BOOL) shortForm; -(NSString*) currencyPrefixShort:(BOOL) shortForm; - (NSComparisonResult)compare:(CurrencyAmount *)other; - (BOOL) isZeroAmount; @end
  • 37. @interface CurrencyAmount : NSObject <NSCoding> { NSDecimalNumber *amount; NSString *currencyID; } @property (nonatomic, retain) NSDecimalNumber *amount; @property (nonatomic, retain) NSString *currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID; - (id) initWithNode:(XMLNode *) node; 2nd param - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale; - (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID; - (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity; - (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount; -(NSString*) stringValue; -(NSString*) rawDecimalAsString; -(NSString*) formatStringWithoutCurrency; -(NSString*) formatStringShort:(BOOL) shortForm; -(NSString*) currencyPrefixShort:(BOOL) shortForm; - (NSComparisonResult)compare:(CurrencyAmount *)other; - (BOOL) isZeroAmount; @end
  • 38. @interface CurrencyAmount : NSObject <NSCoding> { NSDecimalNumber *amount; NSString *currencyID; } @property (nonatomic, retain) NSDecimalNumber *amount; @property (nonatomic, retain) NSString *currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID; - (id) initWithNode:(XMLNode *) node; - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale; - (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID; - (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity; - (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount; -(NSString*) stringValue; -(NSString*) rawDecimalAsString; -(NSString*) formatStringWithoutCurrency; -(NSString*) formatStringShort:(BOOL) shortForm; -(NSString*) currencyPrefixShort:(BOOL) shortForm; - (NSComparisonResult)compare:(CurrencyAmount *)other; - (BOOL) isZeroAmount; @end
  • 39. @interface CurrencyAmount : NSObject <NSCoding> { NSDecimalNumber *amount; NSString *currencyID; } @property (nonatomic, retain) NSDecimalNumber *amount; @property (nonatomic, retain) NSString *currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID; - (id) initWithNode:(XMLNode *) node; 3rd param - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale; - (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID; - (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity; - (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount; -(NSString*) stringValue; -(NSString*) rawDecimalAsString; -(NSString*) formatStringWithoutCurrency; -(NSString*) formatStringShort:(BOOL) shortForm; -(NSString*) currencyPrefixShort:(BOOL) shortForm; - (NSComparisonResult)compare:(CurrencyAmount *)other; - (BOOL) isZeroAmount; @end
  • 40. @interface CurrencyAmount : NSObject <NSCoding> { NSDecimalNumber *amount; NSString *currencyID; } @property (nonatomic, retain) NSDecimalNumber *amount; @property (nonatomic, retain) NSString *currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID; - (id) initWithNode:(XMLNode *) node; - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale; - (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID; - (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity; - (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount; -(NSString*) stringValue; -(NSString*) rawDecimalAsString; -(NSString*) formatStringWithoutCurrency; -(NSString*) formatStringShort:(BOOL) shortForm; -(NSString*) currencyPrefixShort:(BOOL) shortForm; - (NSComparisonResult)compare:(CurrencyAmount *)other; - (BOOL) isZeroAmount; @end
  • 41. @interface CurrencyAmount : NSObject <NSCoding> { NSDecimalNumber *amount; NSString *currencyID; } @property (nonatomic, retain) NSDecimalNumber *amount; @property (nonatomic, retain) NSString *currencyID; method name + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID; - (id) initWithNode:(XMLNode *) node; - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale; - (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID; - (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity; - (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount; -(NSString*) stringValue; -(NSString*) rawDecimalAsString; -(NSString*) formatStringWithoutCurrency; -(NSString*) formatStringShort:(BOOL) shortForm; -(NSString*) currencyPrefixShort:(BOOL) shortForm; - (NSComparisonResult)compare:(CurrencyAmount *)other; - (BOOL) isZeroAmount; @end
  • 42. @interface CurrencyAmount : NSObject <NSCoding> { NSDecimalNumber *amount; NSString *currencyID; } @property (nonatomic, retain) NSDecimalNumber *amount; @property (nonatomic, retain) NSString *currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID; - (id) initWithNode:(XMLNode *) node; - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale; - (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID; - (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity; - (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount; -(NSString*) stringValue; -(NSString*) rawDecimalAsString; -(NSString*) formatStringWithoutCurrency; -(NSString*) formatStringShort:(BOOL) shortForm; -(NSString*) currencyPrefixShort:(BOOL) shortForm; - (NSComparisonResult)compare:(CurrencyAmount *)other; - (BOOL) isZeroAmount; @end
  • 43. @implementation CurrencyAmount @synthesize amount; @synthesize currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID { return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease]; } - (id) initWithNode:(XMLNode *) node { NSString *inCurrencyID = [node attributeValue:@"currencyID"]; [self initWithStringAmount:[node getText] currencyID:inCurrencyID]; return self; } - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID { amount = [[NSDecimalNumber alloc] initWithDouble:inAmount]; self.currencyID = inCurrencyID; return self; } - (BOOL) isZeroAmount { return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame; } - (void) dealloc { [amount release]; [currencyID release]; [super dealloc]; } @end
  • 44. @implementation CurrencyAmount implementation of interface @synthesize amount; @synthesize currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID { return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease]; } - (id) initWithNode:(XMLNode *) node { NSString *inCurrencyID = [node attributeValue:@"currencyID"]; [self initWithStringAmount:[node getText] currencyID:inCurrencyID]; return self; } - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID { amount = [[NSDecimalNumber alloc] initWithDouble:inAmount]; self.currencyID = inCurrencyID; return self; } - (BOOL) isZeroAmount { return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame; } - (void) dealloc { [amount release]; [currencyID release]; [super dealloc]; } @end
  • 45. @implementation CurrencyAmount @synthesize amount; @synthesize currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID { return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease]; } - (id) initWithNode:(XMLNode *) node { NSString *inCurrencyID = [node attributeValue:@"currencyID"]; [self initWithStringAmount:[node getText] currencyID:inCurrencyID]; return self; } - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID { amount = [[NSDecimalNumber alloc] initWithDouble:inAmount]; self.currencyID = inCurrencyID; return self; } - (BOOL) isZeroAmount { return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame; } - (void) dealloc { [amount release]; [currencyID release]; [super dealloc]; } @end
  • 46. @implementation CurrencyAmount @synthesize amount; macro getter/setter @synthesize currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID { return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease]; } - (id) initWithNode:(XMLNode *) node { NSString *inCurrencyID = [node attributeValue:@"currencyID"]; [self initWithStringAmount:[node getText] currencyID:inCurrencyID]; return self; } - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID { amount = [[NSDecimalNumber alloc] initWithDouble:inAmount]; self.currencyID = inCurrencyID; return self; } - (BOOL) isZeroAmount { return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame; } - (void) dealloc { [amount release]; [currencyID release]; [super dealloc]; } @end
  • 47. @implementation CurrencyAmount @synthesize amount; @synthesize currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID { return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease]; } - (id) initWithNode:(XMLNode *) node { NSString *inCurrencyID = [node attributeValue:@"currencyID"]; [self initWithStringAmount:[node getText] currencyID:inCurrencyID]; return self; } - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID { amount = [[NSDecimalNumber alloc] initWithDouble:inAmount]; self.currencyID = inCurrencyID; return self; } - (BOOL) isZeroAmount { return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame; } - (void) dealloc { [amount release]; [currencyID release]; [super dealloc]; } @end
  • 48. @implementation CurrencyAmount @synthesize amount; @synthesize currencyID; method implementations + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID { return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease]; } - (id) initWithNode:(XMLNode *) node { NSString *inCurrencyID = [node attributeValue:@"currencyID"]; [self initWithStringAmount:[node getText] currencyID:inCurrencyID]; return self; } - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID { amount = [[NSDecimalNumber alloc] initWithDouble:inAmount]; self.currencyID = inCurrencyID; return self; } - (BOOL) isZeroAmount { return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame; } - (void) dealloc { [amount release]; [currencyID release]; [super dealloc]; } @end
  • 49. @implementation CurrencyAmount @synthesize amount; @synthesize currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID { return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease]; } - (id) initWithNode:(XMLNode *) node { NSString *inCurrencyID = [node attributeValue:@"currencyID"]; [self initWithStringAmount:[node getText] currencyID:inCurrencyID]; return self; } - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID { amount = [[NSDecimalNumber alloc] initWithDouble:inAmount]; self.currencyID = inCurrencyID; return self; } - (BOOL) isZeroAmount { return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame; } - (void) dealloc { [amount release]; [currencyID release]; [super dealloc]; } @end
  • 50. @implementation CurrencyAmount @synthesize amount; @synthesize currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID { return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease]; } method invocation - (id) initWithNode:(XMLNode *) node { NSString *inCurrencyID = [node attributeValue:@"currencyID"]; [self initWithStringAmount:[node getText] currencyID:inCurrencyID]; return self; } - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID { amount = [[NSDecimalNumber alloc] initWithDouble:inAmount]; self.currencyID = inCurrencyID; return self; } - (BOOL) isZeroAmount { return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame; } - (void) dealloc { [amount release]; [currencyID release]; [super dealloc]; } @end
  • 51. @implementation CurrencyAmount @synthesize amount; @synthesize currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID { return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease]; } - (id) initWithNode:(XMLNode *) node { NSString *inCurrencyID = [node attributeValue:@"currencyID"]; [self initWithStringAmount:[node getText] currencyID:inCurrencyID]; return self; } - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID { amount = [[NSDecimalNumber alloc] initWithDouble:inAmount]; self.currencyID = inCurrencyID; return self; } - (BOOL) isZeroAmount { return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame; } - (void) dealloc { [amount release]; [currencyID release]; [super dealloc]; } @end
  • 52. @implementation CurrencyAmount @synthesize amount; @synthesize currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID { return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease]; } - (id) initWithNode:(XMLNode *) node { NSString *inCurrencyID = [node attributeValue:@"currencyID"];string literal [self initWithStringAmount:[node getText] currencyID:inCurrencyID]; return self; } - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID { amount = [[NSDecimalNumber alloc] initWithDouble:inAmount]; self.currencyID = inCurrencyID; return self; } - (BOOL) isZeroAmount { return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame; } - (void) dealloc { [amount release]; [currencyID release]; [super dealloc]; } @end
  • 53. @implementation CurrencyAmount @synthesize amount; @synthesize currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID { return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease]; } - (id) initWithNode:(XMLNode *) node { NSString *inCurrencyID = [node attributeValue:@"currencyID"]; [self initWithStringAmount:[node getText] currencyID:inCurrencyID]; return self; } - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID { amount = [[NSDecimalNumber alloc] initWithDouble:inAmount]; self.currencyID = inCurrencyID; return self; } - (BOOL) isZeroAmount { return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame; } - (void) dealloc { [amount release]; [currencyID release]; [super dealloc]; } @end
  • 54. @implementation CurrencyAmount @synthesize amount; @synthesize currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID { return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease]; } - (id) initWithNode:(XMLNode *) node { NSString *inCurrencyID = [node attributeValue:@"currencyID"]; [self initWithStringAmount:[node getText] currencyID:inCurrencyID]; return self; } nested call - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID { amount = [[NSDecimalNumber alloc] initWithDouble:inAmount]; self.currencyID = inCurrencyID; return self; } - (BOOL) isZeroAmount { return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame; } - (void) dealloc { [amount release]; [currencyID release]; [super dealloc]; } @end
  • 55. @implementation CurrencyAmount @synthesize amount; @synthesize currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID { return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease]; } - (id) initWithNode:(XMLNode *) node { NSString *inCurrencyID = [node attributeValue:@"currencyID"]; [self initWithStringAmount:[node getText] currencyID:inCurrencyID]; return self; } - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID { amount = [[NSDecimalNumber alloc] initWithDouble:inAmount]; self.currencyID = inCurrencyID; return self; } - (BOOL) isZeroAmount { return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame; } - (void) dealloc { [amount release]; [currencyID release]; [super dealloc]; } @end
  • 56. @implementation CurrencyAmount @synthesize amount; @synthesize currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID { return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease]; } - (id) initWithNode:(XMLNode *) node { NSString *inCurrencyID = [node attributeValue:@"currencyID"]; [self initWithStringAmount:[node getText] currencyID:inCurrencyID]; this instance return self; } - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID { amount = [[NSDecimalNumber alloc] initWithDouble:inAmount]; self.currencyID = inCurrencyID; return self; } - (BOOL) isZeroAmount { return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame; } - (void) dealloc { [amount release]; [currencyID release]; [super dealloc]; } @end
  • 57. @implementation CurrencyAmount @synthesize amount; @synthesize currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID { return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease]; } - (id) initWithNode:(XMLNode *) node { NSString *inCurrencyID = [node attributeValue:@"currencyID"]; [self initWithStringAmount:[node getText] currencyID:inCurrencyID]; return self; } - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID { amount = [[NSDecimalNumber alloc] initWithDouble:inAmount]; self.currencyID = inCurrencyID; return self; } - (BOOL) isZeroAmount { return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame; } - (void) dealloc { [amount release]; [currencyID release]; [super dealloc]; } @end
  • 58. @implementation CurrencyAmount @synthesize amount; @synthesize currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID { return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease]; } - (id) initWithNode:(XMLNode *) node { NSString *inCurrencyID = [node attributeValue:@"currencyID"]; [self initWithStringAmount:[node getText] currencyID:inCurrencyID]; return self; } - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID { amount = [[NSDecimalNumber alloc] initWithDouble:inAmount]; self.currencyID = inCurrencyID; return self; } - (BOOL) isZeroAmount { return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame; } - (void) dealloc { override superclass [amount release]; [currencyID release]; [super dealloc]; } @end
  • 59. @implementation CurrencyAmount @synthesize amount; @synthesize currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID { return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease]; } - (id) initWithNode:(XMLNode *) node { NSString *inCurrencyID = [node attributeValue:@"currencyID"]; [self initWithStringAmount:[node getText] currencyID:inCurrencyID]; return self; } - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID { amount = [[NSDecimalNumber alloc] initWithDouble:inAmount]; self.currencyID = inCurrencyID; return self; } - (BOOL) isZeroAmount { return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame; } - (void) dealloc { [amount release]; [currencyID release]; [super dealloc]; } @end
  • 60. @implementation CurrencyAmount @synthesize amount; @synthesize currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID { return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease]; } - (id) initWithNode:(XMLNode *) node { NSString *inCurrencyID = [node attributeValue:@"currencyID"]; [self initWithStringAmount:[node getText] currencyID:inCurrencyID]; return self; } - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID { amount = [[NSDecimalNumber alloc] initWithDouble:inAmount]; self.currencyID = inCurrencyID; return self; } - (BOOL) isZeroAmount { return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame; } - (void) dealloc { memory mangement [amount release]; [currencyID release]; [super dealloc]; } @end
  • 61. @implementation CurrencyAmount @synthesize amount; @synthesize currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID { return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease]; } - (id) initWithNode:(XMLNode *) node { NSString *inCurrencyID = [node attributeValue:@"currencyID"]; [self initWithStringAmount:[node getText] currencyID:inCurrencyID]; return self; } - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID { amount = [[NSDecimalNumber alloc] initWithDouble:inAmount]; self.currencyID = inCurrencyID; return self; } - (BOOL) isZeroAmount { return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame; } - (void) dealloc { [amount release]; [currencyID release]; [super dealloc]; } @end
  • 62. Tools
  • 64. XCode • Full featured IDE • Build, debug • Code navigation, completion • Refactoring • SCM Integration • Wizards
  • 65. Interface Builder • Drag-and-drop, UI Design Tool • Integrated with XCode • Connect code to UI elements (events)
  • 66. Instruments • Profiling Tool • Memory Usage • Leaks • CPU Usage • Threads, I/O Monitoring
  • 67. iPhone Emulator Runs application natively Not all APIs available Some APIs mocked: Location
  • 68. Cocoa Touch • MVC Framework • AppKit • Controls, Events • UIKit • Accelerometer, Multi-touch
  • 71. Don’t Call Me... Push Notifications = Substitute for Background Processing?
  • 72. App 2 App No formal intra-application communication allowed Custom URL protocols used as hack
  • 76. Android • Devices, devices, devices • Open Source: OS, SDK • Language: Java+ • Features: Multi-threaded, Open GL ES, Contacts, Email, WebKit, Media, GPS, Google Maps, (Video)Camera, Local Database, Background Service, Garbage Collection, Intents • Pitfalls: Memory Management, Assault on Battery, Devices, Devices, Devices...
  • 77. Compiler Dex Compiler Compress Source Code Class files Dex File APK
  • 79. Java
  • 80. Tools
  • 81. Tools
  • 82. DDMS
  • 83. Android Runtime & App Framework • Activities & Intents • Separation of Concerns • Launch an Activity based on an • Layout Intent • Application Logic • Application Interop • XML => Bytecode • Layout • Localization
  • 85. The Web Services Diet Web Services: Made for Servers, not Phones Data Centric vs. Functional Centric Mo’ Data, Mo’ Problems XML = Teh Suck
  • 86. Try Not to Drown •Images, Audio, Video •Browser features taken for granted •Caching / Cache Management •Simultaneous Loading
  • 87. Security • What to store on device? • What about stolen devices? • Jailbreaking? • Phishing? • OAuth??? • Hard coding == FAIL
  • 88. Upgrades? What Upgrades? • Far from automatic • Out of sight, out of mind • Don’t expect upgrades • Lots of versions to manage • Agile Development FTW???
  • 89. eb le W b i Mo
  • 90. Mobile Web a.k.a. HTML 5 • One app to rule them all: iPhone, Android, webOS, Blackberry* • Language: JavaScript, HTML, CSS • Tools: ... • Features: Multi-threaded!, Open GL ES, Contacts, Email, GPS, Maps, (Video)Camera, Local Database, Media, Memory Management, Security • Pitfalls: Memory management, no background processing, WebKit versioning
  • 92. iPhone Developer Center • Silicon Valley iPhone Developers • Stack Overflow • MOTODEV • Android Developers • Silicon Valley Android Developers • Android Developers Group
  • 93. Sprint Developer Conference • October 26-28 • Santa Clara Convention Center • Android, Mobile Web, webOS, RIM, J2ME, WinMo • Coding Camps • Free HTC Hero (Android) • 4G Demo and Beta