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
Usage
Capabilities
Usage
      Capabilities


Phones That Matter
Distribution Barriers
What Platforms?
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
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
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
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
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 processenLina 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 rodzinieagata 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 mobileAmit 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
 
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_BulgariaGavranica
 
Building Bridges between Academic Tribes
Building Bridges between Academic TribesBuilding Bridges between Academic Tribes
Building Bridges between Academic TribesMartin 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
 
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

20240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 202420240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 2024
Matthew Sinclair
 
UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6
DianaGray10
 
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
Neo4j
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
James Anderson
 
By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024
Pierluigi Pugliese
 
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
Neo4j
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
Uni Systems S.M.S.A.
 
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
SOFTTECHHUB
 
A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...
sonjaschweigert1
 
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionGenerative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Aggregage
 
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptxSecstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
nkrafacyberclub
 
UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5
DianaGray10
 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance
 
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
Neo4j
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Albert Hoitingh
 
Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1
DianaGray10
 
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
名前 です男
 
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdfUni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems S.M.S.A.
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
Kari Kakkonen
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
Aftab Hussain
 

Recently uploaded (20)

20240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 202420240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 2024
 
UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6
 
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
 
By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024
 
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
 
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
 
A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...
 
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionGenerative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to Production
 
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptxSecstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
 
UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5
 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
 
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
 
Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1
 
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
 
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdfUni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdf
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
 

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
  • 4.
  • 6. Usage Capabilities Phones That Matter Distribution Barriers
  • 8.
  • 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
  • 63.
  • 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
  • 74.
  • 75.
  • 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
  • 78.
  • 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
  • 84.
  • 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