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

Viewers also liked

Kulturkartläggnings processen
Kulturkartläggnings  processenKulturkartläggnings  processen
Kulturkartläggnings processen
Lina Ydrefelt
 
Managing Communities of Learning: The Impact and Role of Facilitators
Managing Communities of Learning: The Impact and Role of FacilitatorsManaging Communities of Learning: The Impact and Role of Facilitators
Managing Communities of Learning: The Impact and Role of Facilitators
Martin Rehm
 
Continuous deployments in Azure websites (by Anton Vidishchev)
Continuous deployments in Azure websites (by Anton Vidishchev)Continuous deployments in Azure websites (by Anton Vidishchev)
Continuous deployments in Azure websites (by Anton Vidishchev)
Alexandra Chudner
 
Kliniksefiuzman
KliniksefiuzmanKliniksefiuzman
Kliniksefiuzman
anttab
 
Kirimkongo
KirimkongoKirimkongo
Kirimkongo
anttab
 
Kusgribi
KusgribiKusgribi
Kusgribi
anttab
 
The Future of Big Data in Education
The Future of Big Data in EducationThe Future of Big Data in Education
The Future of Big Data in Education
Hendrik Drachsler
 
Życie prywatne w rodzinie
Życie prywatne w rodzinieŻycie prywatne w rodzinie
Życie prywatne w rodzinie
agata stanisz
 
Marketing strategies to increase the ROI on mobile
Marketing strategies to increase the ROI on mobileMarketing strategies to increase the ROI on mobile
Marketing strategies to increase the ROI on mobile
Amit Ambastha
 
Sprawne Smoki - Gładyszów 2012
Sprawne Smoki - Gładyszów 2012Sprawne Smoki - Gładyszów 2012
Sprawne Smoki - Gładyszów 2012
Maria Ptak
 
香港六合彩 &raquo; SlideShare
香港六合彩 &raquo; SlideShare香港六合彩 &raquo; SlideShare
香港六合彩 &raquo; SlideShare
piwnioyh
 
The CLAS APP
The CLAS APPThe CLAS APP
The CLAS APP
Hendrik Drachsler
 
El abuso de las drogas
El abuso de las drogasEl abuso de las drogas
El abuso de las drogas
Paulo Arieu
 
Time Manag.
Time Manag.Time Manag.
Time Manag.
agek2005
 
25et_Bulgaria
25et_Bulgaria25et_Bulgaria
25et_Bulgaria
Gavranica
 
Building Bridges between Academic Tribes
Building Bridges between Academic TribesBuilding Bridges between Academic Tribes
Building Bridges between Academic Tribes
Martin Rehm
 
Еmail vs Social — Евгений Вольнов
Еmail vs Social — Евгений ВольновЕmail vs Social — Евгений Вольнов
Еmail vs Social — Евгений Вольнов
Maria Podolyak
 
Latvia my school-keipenes_school(1)
Latvia my school-keipenes_school(1)Latvia my school-keipenes_school(1)
Latvia my school-keipenes_school(1)
Gavranica
 
R&D activites on Learning Analytics
R&D activites on Learning AnalyticsR&D activites on Learning Analytics
R&D activites on Learning Analytics
Hendrik Drachsler
 

Viewers also liked (20)

Kulturkartläggnings processen
Kulturkartläggnings  processenKulturkartläggnings  processen
Kulturkartläggnings processen
 
Managing Communities of Learning: The Impact and Role of Facilitators
Managing Communities of Learning: The Impact and Role of FacilitatorsManaging Communities of Learning: The Impact and Role of Facilitators
Managing Communities of Learning: The Impact and Role of Facilitators
 
Continuous deployments in Azure websites (by Anton Vidishchev)
Continuous deployments in Azure websites (by Anton Vidishchev)Continuous deployments in Azure websites (by Anton Vidishchev)
Continuous deployments in Azure websites (by Anton Vidishchev)
 
Kliniksefiuzman
KliniksefiuzmanKliniksefiuzman
Kliniksefiuzman
 
Kirimkongo
KirimkongoKirimkongo
Kirimkongo
 
Kusgribi
KusgribiKusgribi
Kusgribi
 
The Future of Big Data in Education
The Future of Big Data in EducationThe Future of Big Data in Education
The Future of Big Data in Education
 
Życie prywatne w rodzinie
Życie prywatne w rodzinieŻycie prywatne w rodzinie
Życie prywatne w rodzinie
 
Marketing strategies to increase the ROI on mobile
Marketing strategies to increase the ROI on mobileMarketing strategies to increase the ROI on mobile
Marketing strategies to increase the ROI on mobile
 
Sprawne Smoki - Gładyszów 2012
Sprawne Smoki - Gładyszów 2012Sprawne Smoki - Gładyszów 2012
Sprawne Smoki - Gładyszów 2012
 
香港六合彩 &raquo; SlideShare
香港六合彩 &raquo; SlideShare香港六合彩 &raquo; SlideShare
香港六合彩 &raquo; SlideShare
 
Qenlacecovalente
QenlacecovalenteQenlacecovalente
Qenlacecovalente
 
The CLAS APP
The CLAS APPThe CLAS APP
The CLAS APP
 
El abuso de las drogas
El abuso de las drogasEl abuso de las drogas
El abuso de las drogas
 
Time Manag.
Time Manag.Time Manag.
Time Manag.
 
25et_Bulgaria
25et_Bulgaria25et_Bulgaria
25et_Bulgaria
 
Building Bridges between Academic Tribes
Building Bridges between Academic TribesBuilding Bridges between Academic Tribes
Building Bridges between Academic Tribes
 
Еmail vs Social — Евгений Вольнов
Еmail vs Social — Евгений ВольновЕmail vs Social — Евгений Вольнов
Еmail vs Social — Евгений Вольнов
 
Latvia my school-keipenes_school(1)
Latvia my school-keipenes_school(1)Latvia my school-keipenes_school(1)
Latvia my school-keipenes_school(1)
 
R&D activites on Learning Analytics
R&D activites on Learning AnalyticsR&D activites on Learning Analytics
R&D activites on Learning Analytics
 

Similar to Mobile Development 101

iPhone Development Intro
iPhone Development IntroiPhone Development Intro
iPhone Development Intro
Luis Azevedo
 
Programming iOS in C#
Programming iOS in C#Programming iOS in C#
Programming iOS in C#
Frank Krueger
 
Danny Banks - Building consistent Cross-Platform interfaces - Codemotion Amst...
Danny Banks - Building consistent Cross-Platform interfaces - Codemotion Amst...Danny Banks - Building consistent Cross-Platform interfaces - Codemotion Amst...
Danny Banks - Building consistent Cross-Platform interfaces - Codemotion Amst...
Codemotion
 
UIWebView Tips
UIWebView TipsUIWebView Tips
UIWebView Tips
Katsumi Kishikawa
 
Native Phone Development 101
Native Phone Development 101Native Phone Development 101
Native Phone Development 101
Sasmito Adibowo
 
Iphone os dev sharing with new examples
Iphone os dev sharing with new examplesIphone os dev sharing with new examples
Iphone os dev sharing with new examples
kenshin03
 
Super spike
Super spikeSuper spike
Super spike
Michael Falanga
 
HTML5 and Other Modern Browser Game Tech
HTML5 and Other Modern Browser Game TechHTML5 and Other Modern Browser Game Tech
HTML5 and Other Modern Browser Game Tech
vincent_scheib
 
Cooking your Ravioli "al dente" with Hexagonal Architecture
Cooking your Ravioli "al dente" with Hexagonal ArchitectureCooking your Ravioli "al dente" with Hexagonal Architecture
Cooking your Ravioli "al dente" with Hexagonal Architecture
Jeroen Rosenberg
 
iOS Einführung am Beispiel von play NEXT TEE
iOS Einführung am Beispiel von play NEXT TEEiOS Einführung am Beispiel von play NEXT TEE
iOS Einführung am Beispiel von play NEXT TEE
Hendrik Ebel
 
NativeScript and Angular
NativeScript and AngularNativeScript and Angular
NativeScript and Angular
Jen Looper
 
NativeScript 環境のインストールとはじめてのプロジェクト実行
NativeScript 環境のインストールとはじめてのプロジェクト実行NativeScript 環境のインストールとはじめてのプロジェクト実行
NativeScript 環境のインストールとはじめてのプロジェクト実行
Osamu Monoe
 
Adopt JSR 354
Adopt JSR 354Adopt JSR 354
Adopt JSR 354
Anatole Tresch
 
JSR 354: Money and Currency API - Short Overview
JSR 354: Money and Currency API - Short OverviewJSR 354: Money and Currency API - Short Overview
JSR 354: Money and Currency API - Short Overview
Werner Keil
 
Users' Data Security in iOS Applications
Users' Data Security in iOS ApplicationsUsers' Data Security in iOS Applications
Users' Data Security in iOS Applications
Stanfy
 
iOS
iOSiOS
Build your wp8 app today
Build your wp8 app todayBuild your wp8 app today
Build your wp8 app today
jalpf
 
Crypton Studio Presentation
Crypton Studio PresentationCrypton Studio Presentation
Crypton Studio Presentation
AlexMainov
 
Presentation of Crypton Studio
Presentation of Crypton StudioPresentation of Crypton Studio
Presentation of Crypton Studio
IgorUstinov6
 
mobl
moblmobl
mobl
zefhemel
 

Similar to Mobile Development 101 (20)

iPhone Development Intro
iPhone Development IntroiPhone Development Intro
iPhone Development Intro
 
Programming iOS in C#
Programming iOS in C#Programming iOS in C#
Programming iOS in C#
 
Danny Banks - Building consistent Cross-Platform interfaces - Codemotion Amst...
Danny Banks - Building consistent Cross-Platform interfaces - Codemotion Amst...Danny Banks - Building consistent Cross-Platform interfaces - Codemotion Amst...
Danny Banks - Building consistent Cross-Platform interfaces - Codemotion Amst...
 
UIWebView Tips
UIWebView TipsUIWebView Tips
UIWebView Tips
 
Native Phone Development 101
Native Phone Development 101Native Phone Development 101
Native Phone Development 101
 
Iphone os dev sharing with new examples
Iphone os dev sharing with new examplesIphone os dev sharing with new examples
Iphone os dev sharing with new examples
 
Super spike
Super spikeSuper spike
Super spike
 
HTML5 and Other Modern Browser Game Tech
HTML5 and Other Modern Browser Game TechHTML5 and Other Modern Browser Game Tech
HTML5 and Other Modern Browser Game Tech
 
Cooking your Ravioli "al dente" with Hexagonal Architecture
Cooking your Ravioli "al dente" with Hexagonal ArchitectureCooking your Ravioli "al dente" with Hexagonal Architecture
Cooking your Ravioli "al dente" with Hexagonal Architecture
 
iOS Einführung am Beispiel von play NEXT TEE
iOS Einführung am Beispiel von play NEXT TEEiOS Einführung am Beispiel von play NEXT TEE
iOS Einführung am Beispiel von play NEXT TEE
 
NativeScript and Angular
NativeScript and AngularNativeScript and Angular
NativeScript and Angular
 
NativeScript 環境のインストールとはじめてのプロジェクト実行
NativeScript 環境のインストールとはじめてのプロジェクト実行NativeScript 環境のインストールとはじめてのプロジェクト実行
NativeScript 環境のインストールとはじめてのプロジェクト実行
 
Adopt JSR 354
Adopt JSR 354Adopt JSR 354
Adopt JSR 354
 
JSR 354: Money and Currency API - Short Overview
JSR 354: Money and Currency API - Short OverviewJSR 354: Money and Currency API - Short Overview
JSR 354: Money and Currency API - Short Overview
 
Users' Data Security in iOS Applications
Users' Data Security in iOS ApplicationsUsers' Data Security in iOS Applications
Users' Data Security in iOS Applications
 
iOS
iOSiOS
iOS
 
Build your wp8 app today
Build your wp8 app todayBuild your wp8 app today
Build your wp8 app today
 
Crypton Studio Presentation
Crypton Studio PresentationCrypton Studio Presentation
Crypton Studio Presentation
 
Presentation of Crypton Studio
Presentation of Crypton StudioPresentation of Crypton Studio
Presentation of Crypton Studio
 
mobl
moblmobl
mobl
 

More from Michael Galpin

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

More from Michael Galpin (12)

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

Recently uploaded

CHAPTER-8 COMPONENTS OF COMPUTER SYSTEM CLASS 9 CBSE
CHAPTER-8 COMPONENTS OF COMPUTER SYSTEM CLASS 9 CBSECHAPTER-8 COMPONENTS OF COMPUTER SYSTEM CLASS 9 CBSE
CHAPTER-8 COMPONENTS OF COMPUTER SYSTEM CLASS 9 CBSE
kumarjarun2010
 
TrustArc Webinar - 2024 Data Privacy Trends: A Mid-Year Check-In
TrustArc Webinar - 2024 Data Privacy Trends: A Mid-Year Check-InTrustArc Webinar - 2024 Data Privacy Trends: A Mid-Year Check-In
TrustArc Webinar - 2024 Data Privacy Trends: A Mid-Year Check-In
TrustArc
 
The Role of IoT in Australian Mobile App Development - PDF Guide
The Role of IoT in Australian Mobile App Development - PDF GuideThe Role of IoT in Australian Mobile App Development - PDF Guide
The Role of IoT in Australian Mobile App Development - PDF Guide
Shiv Technolabs
 
Salesforce AI & Einstein Copilot Workshop
Salesforce AI & Einstein Copilot WorkshopSalesforce AI & Einstein Copilot Workshop
Salesforce AI & Einstein Copilot Workshop
CEPTES Software Inc
 
leewayhertz.com-AI agents for healthcare Applications benefits and implementa...
leewayhertz.com-AI agents for healthcare Applications benefits and implementa...leewayhertz.com-AI agents for healthcare Applications benefits and implementa...
leewayhertz.com-AI agents for healthcare Applications benefits and implementa...
alexjohnson7307
 
Feature sql server terbaru performance.pptx
Feature sql server terbaru performance.pptxFeature sql server terbaru performance.pptx
Feature sql server terbaru performance.pptx
ssuser1915fe1
 
Introduction-to-the-IAM-Platform-Implementation-Plan.pptx
Introduction-to-the-IAM-Platform-Implementation-Plan.pptxIntroduction-to-the-IAM-Platform-Implementation-Plan.pptx
Introduction-to-the-IAM-Platform-Implementation-Plan.pptx
313mohammedarshad
 
RPA In Healthcare Benefits, Use Case, Trend And Challenges 2024.pptx
RPA In Healthcare Benefits, Use Case, Trend And Challenges 2024.pptxRPA In Healthcare Benefits, Use Case, Trend And Challenges 2024.pptx
RPA In Healthcare Benefits, Use Case, Trend And Challenges 2024.pptx
SynapseIndia
 
Types of Weaving loom machine & it's technology
Types of Weaving loom machine & it's technologyTypes of Weaving loom machine & it's technology
Types of Weaving loom machine & it's technology
ldtexsolbl
 
Dublin_mulesoft_meetup_Mulesoft_Salesforce_Integration (1).pptx
Dublin_mulesoft_meetup_Mulesoft_Salesforce_Integration (1).pptxDublin_mulesoft_meetup_Mulesoft_Salesforce_Integration (1).pptx
Dublin_mulesoft_meetup_Mulesoft_Salesforce_Integration (1).pptx
Kunal Gupta
 
Opencast Summit 2024 — Opencast @ University of Münster
Opencast Summit 2024 — Opencast @ University of MünsterOpencast Summit 2024 — Opencast @ University of Münster
Opencast Summit 2024 — Opencast @ University of Münster
Matthias Neugebauer
 
(CISOPlatform Summit & SACON 2024) Digital Personal Data Protection Act.pdf
(CISOPlatform Summit & SACON 2024) Digital Personal Data Protection Act.pdf(CISOPlatform Summit & SACON 2024) Digital Personal Data Protection Act.pdf
(CISOPlatform Summit & SACON 2024) Digital Personal Data Protection Act.pdf
Priyanka Aash
 
Girls call Kolkata 👀 XXXXXXXXXXX 👀 Rs.9.5 K Cash Payment With Room Delivery
Girls call Kolkata 👀 XXXXXXXXXXX 👀 Rs.9.5 K Cash Payment With Room Delivery Girls call Kolkata 👀 XXXXXXXXXXX 👀 Rs.9.5 K Cash Payment With Room Delivery
Girls call Kolkata 👀 XXXXXXXXXXX 👀 Rs.9.5 K Cash Payment With Room Delivery
sunilverma7884
 
Girls Call Churchgate 9910780858 Provide Best And Top Girl Service And No1 in...
Girls Call Churchgate 9910780858 Provide Best And Top Girl Service And No1 in...Girls Call Churchgate 9910780858 Provide Best And Top Girl Service And No1 in...
Girls Call Churchgate 9910780858 Provide Best And Top Girl Service And No1 in...
maigasapphire
 
WhatsApp Spy Online Trackers and Monitoring Apps
WhatsApp Spy Online Trackers and Monitoring AppsWhatsApp Spy Online Trackers and Monitoring Apps
WhatsApp Spy Online Trackers and Monitoring Apps
HackersList
 
Vertex AI Agent Builder - GDG Alicante - Julio 2024
Vertex AI Agent Builder - GDG Alicante - Julio 2024Vertex AI Agent Builder - GDG Alicante - Julio 2024
Vertex AI Agent Builder - GDG Alicante - Julio 2024
Nicolás Lopéz
 
Active Inference is a veryyyyyyyyyyyyyyyyyyyyyyyy
Active Inference is a veryyyyyyyyyyyyyyyyyyyyyyyyActive Inference is a veryyyyyyyyyyyyyyyyyyyyyyyy
Active Inference is a veryyyyyyyyyyyyyyyyyyyyyyyy
RaminGhanbari2
 
Tirana Tech Meetup - Agentic RAG with Milvus, Llama3 and Ollama
Tirana Tech Meetup - Agentic RAG with Milvus, Llama3 and OllamaTirana Tech Meetup - Agentic RAG with Milvus, Llama3 and Ollama
Tirana Tech Meetup - Agentic RAG with Milvus, Llama3 and Ollama
Zilliz
 
July Patch Tuesday
July Patch TuesdayJuly Patch Tuesday
July Patch Tuesday
Ivanti
 
High Profile Girls call Service Pune 000XX00000 Provide Best And Top Girl Ser...
High Profile Girls call Service Pune 000XX00000 Provide Best And Top Girl Ser...High Profile Girls call Service Pune 000XX00000 Provide Best And Top Girl Ser...
High Profile Girls call Service Pune 000XX00000 Provide Best And Top Girl Ser...
bhumivarma35300
 

Recently uploaded (20)

CHAPTER-8 COMPONENTS OF COMPUTER SYSTEM CLASS 9 CBSE
CHAPTER-8 COMPONENTS OF COMPUTER SYSTEM CLASS 9 CBSECHAPTER-8 COMPONENTS OF COMPUTER SYSTEM CLASS 9 CBSE
CHAPTER-8 COMPONENTS OF COMPUTER SYSTEM CLASS 9 CBSE
 
TrustArc Webinar - 2024 Data Privacy Trends: A Mid-Year Check-In
TrustArc Webinar - 2024 Data Privacy Trends: A Mid-Year Check-InTrustArc Webinar - 2024 Data Privacy Trends: A Mid-Year Check-In
TrustArc Webinar - 2024 Data Privacy Trends: A Mid-Year Check-In
 
The Role of IoT in Australian Mobile App Development - PDF Guide
The Role of IoT in Australian Mobile App Development - PDF GuideThe Role of IoT in Australian Mobile App Development - PDF Guide
The Role of IoT in Australian Mobile App Development - PDF Guide
 
Salesforce AI & Einstein Copilot Workshop
Salesforce AI & Einstein Copilot WorkshopSalesforce AI & Einstein Copilot Workshop
Salesforce AI & Einstein Copilot Workshop
 
leewayhertz.com-AI agents for healthcare Applications benefits and implementa...
leewayhertz.com-AI agents for healthcare Applications benefits and implementa...leewayhertz.com-AI agents for healthcare Applications benefits and implementa...
leewayhertz.com-AI agents for healthcare Applications benefits and implementa...
 
Feature sql server terbaru performance.pptx
Feature sql server terbaru performance.pptxFeature sql server terbaru performance.pptx
Feature sql server terbaru performance.pptx
 
Introduction-to-the-IAM-Platform-Implementation-Plan.pptx
Introduction-to-the-IAM-Platform-Implementation-Plan.pptxIntroduction-to-the-IAM-Platform-Implementation-Plan.pptx
Introduction-to-the-IAM-Platform-Implementation-Plan.pptx
 
RPA In Healthcare Benefits, Use Case, Trend And Challenges 2024.pptx
RPA In Healthcare Benefits, Use Case, Trend And Challenges 2024.pptxRPA In Healthcare Benefits, Use Case, Trend And Challenges 2024.pptx
RPA In Healthcare Benefits, Use Case, Trend And Challenges 2024.pptx
 
Types of Weaving loom machine & it's technology
Types of Weaving loom machine & it's technologyTypes of Weaving loom machine & it's technology
Types of Weaving loom machine & it's technology
 
Dublin_mulesoft_meetup_Mulesoft_Salesforce_Integration (1).pptx
Dublin_mulesoft_meetup_Mulesoft_Salesforce_Integration (1).pptxDublin_mulesoft_meetup_Mulesoft_Salesforce_Integration (1).pptx
Dublin_mulesoft_meetup_Mulesoft_Salesforce_Integration (1).pptx
 
Opencast Summit 2024 — Opencast @ University of Münster
Opencast Summit 2024 — Opencast @ University of MünsterOpencast Summit 2024 — Opencast @ University of Münster
Opencast Summit 2024 — Opencast @ University of Münster
 
(CISOPlatform Summit & SACON 2024) Digital Personal Data Protection Act.pdf
(CISOPlatform Summit & SACON 2024) Digital Personal Data Protection Act.pdf(CISOPlatform Summit & SACON 2024) Digital Personal Data Protection Act.pdf
(CISOPlatform Summit & SACON 2024) Digital Personal Data Protection Act.pdf
 
Girls call Kolkata 👀 XXXXXXXXXXX 👀 Rs.9.5 K Cash Payment With Room Delivery
Girls call Kolkata 👀 XXXXXXXXXXX 👀 Rs.9.5 K Cash Payment With Room Delivery Girls call Kolkata 👀 XXXXXXXXXXX 👀 Rs.9.5 K Cash Payment With Room Delivery
Girls call Kolkata 👀 XXXXXXXXXXX 👀 Rs.9.5 K Cash Payment With Room Delivery
 
Girls Call Churchgate 9910780858 Provide Best And Top Girl Service And No1 in...
Girls Call Churchgate 9910780858 Provide Best And Top Girl Service And No1 in...Girls Call Churchgate 9910780858 Provide Best And Top Girl Service And No1 in...
Girls Call Churchgate 9910780858 Provide Best And Top Girl Service And No1 in...
 
WhatsApp Spy Online Trackers and Monitoring Apps
WhatsApp Spy Online Trackers and Monitoring AppsWhatsApp Spy Online Trackers and Monitoring Apps
WhatsApp Spy Online Trackers and Monitoring Apps
 
Vertex AI Agent Builder - GDG Alicante - Julio 2024
Vertex AI Agent Builder - GDG Alicante - Julio 2024Vertex AI Agent Builder - GDG Alicante - Julio 2024
Vertex AI Agent Builder - GDG Alicante - Julio 2024
 
Active Inference is a veryyyyyyyyyyyyyyyyyyyyyyyy
Active Inference is a veryyyyyyyyyyyyyyyyyyyyyyyyActive Inference is a veryyyyyyyyyyyyyyyyyyyyyyyy
Active Inference is a veryyyyyyyyyyyyyyyyyyyyyyyy
 
Tirana Tech Meetup - Agentic RAG with Milvus, Llama3 and Ollama
Tirana Tech Meetup - Agentic RAG with Milvus, Llama3 and OllamaTirana Tech Meetup - Agentic RAG with Milvus, Llama3 and Ollama
Tirana Tech Meetup - Agentic RAG with Milvus, Llama3 and Ollama
 
July Patch Tuesday
July Patch TuesdayJuly Patch Tuesday
July Patch Tuesday
 
High Profile Girls call Service Pune 000XX00000 Provide Best And Top Girl Ser...
High Profile Girls call Service Pune 000XX00000 Provide Best And Top Girl Ser...High Profile Girls call Service Pune 000XX00000 Provide Best And Top Girl Ser...
High Profile Girls call Service Pune 000XX00000 Provide Best And Top Girl Ser...
 

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