SlideShare a Scribd company logo
1 of 22
iPhone geo hacking 101
        Michael Dales
• where am I?
• no, really, I’m a human. where am I?
• Can you show me where I am?
• Can you show me where it is?
• where should I be?
CoreLocation
• where am I?
• no, really, I’m a human. where am I?
• Can you show me where I am?
• Can you show me where it is?
• where should I be?
CoreLocation
• where am I?
• no, really, I’m a human. where am I?
• Can you show me where I am?
• Can you show me where it is? MapKit
• where should I be?
CoreLocation
• where am I?
• no, really, I’m a human. where am I?
• Can you show me where I am?
• Can you show me where it is? MapKit
• where should I be?         AddressBook
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
locationManager.desiredAccuracy =
               kCLLocationAccuracyBest;
[locationManager startUpdatingLocation];
- (void)locationManager: (CLLocationManager *)manager

 didUpdateToLocation: (CLLocation *)newLocation

 
      fromLocation: (CLLocation *)oldLocation
{

 NSString *latitudeString = [[NSString alloc] initWithFormat: @"%g",

 
    
 
 
 
 
 
 newLocation.coordinate.latitude];

 latitudeLabel.text = latitudeString;

 [latitudeString release];


 NSString *longitudeString = [[NSString alloc] initWithFormat: @"%g",

 
    
 
 
 
 
 
          newLocation.coordinate.longitude];

 longitudeLabel.text = longitudeString;

 [longitudeString release];
}
CLLocation
•   Location info

    •   lat, long, accuracy

•   Altitude info, speed info,
    heading info

•   ask distance from
    another point
• Remember the user!
 • Battery matters to them
• Also available on the Mac
MKReverseGeocoder *geocoder = [[MKReverseGeocoder alloc] initWithCoordinate:
 coordinate];
geocoder.delegate = self;
[geocoder start];
MKReverseGeocoder *geocoder = [[MKReverseGeocoder alloc] initWithCoordinate:
     coordinate];
    geocoder.delegate = self;
    [geocoder start];


                            and a little later...

-   (void)reverseGeocoder: (MKReverseGeocoder *)geocoder

     didFindPlacemark: (MKPlacemark *)pplacemark
{

   self.placemark = pplacemark;

   geocoder.delegate = nil;

   [geocoder autorelease];
}
MKPlacemark
NSString   *thoroughfare; // street address, eg 1 Infinite Loop
NSString   *subThoroughfare;
NSString   *locality; // city, eg. Cupertino
NSString   *subLocality; // neighborhood, landmark, common name, etc
NSString   *administrativeArea; // state, eg. CA
NSString   *subAdministrativeArea; // county, eg. Santa Clara
NSString   *postalCode; // zip code, eg 95014
NSString   *country; // eg. United States
NSString   *countryCode; // eg. US
maps demo
set where to look
 
   MKCoordinateRegion region;
 
   region.center = lastPoint.coordinate;
 
   region.span.latitudeDelta = 0.002;
 
   region.span.longitudeDelta = 0.002;
 
 
   [mapView setRegion: region
 
   
  
   animated: YES];
annotations
@interface LocationDemoAnnotation : NSObject <MKAnnotation,
MKReverseGeocoderDelegate>
{

 // essential

 CLLocationCoordinate2D coordinate;
}

@property (nonatomic, readonly) CLLocationCoordinate2D coordinate;

- (id)initWithCoordinate: (CLLocationCoordinate2D)coord;
- (NSString *)title;
- (NSString *)subtitle;
making it personal
ABAddressBook *addressBook = [ABAddressBook addressBook];
ABPerson *me = [addressBook me];
id home = [me valueForProperty: kABAddressProperty];
making it personal
ABAddressBook *addressBook = [ABAddressBook addressBook];
ABPerson *me = [addressBook me];
id home = [me valueForProperty: kABAddressProperty];


  2010-03-12 13:34:09.804 MacLocationTest[34432:a0b] ABPerson (0x20009d180) {
  
     ABPersonFlags : 0
  
     Address       :{
  
     
       home {
    City = Impington;
    Country = UK;
    State = Cambridge;
    Street = "42 North Road";
    ZIP = "CB99 9ZX";
  }
  }
  
     Creation      : 2010-01-04 18:00:01 +0000
  
     First     : Michael
  
     Last       : Dales
  
     Modification : 2010-03-12 13:29:27 +0000
  
     Unique ID : 506661FE-8D0D-407F-AEAB-61699D59E943:ABPerson
  }
what’s left

• Talking to something else
 • ASIHTTPRequest
 • JSON Framework

More Related Content

Similar to WhereCamp EU talk: iPhone location 101

Core Location and Map Kit: Bringing Your Own Maps [Voices That Matter: iPhone...
Core Location and Map Kit: Bringing Your Own Maps [Voices That Matter: iPhone...Core Location and Map Kit: Bringing Your Own Maps [Voices That Matter: iPhone...
Core Location and Map Kit: Bringing Your Own Maps [Voices That Matter: iPhone...Chris Adamson
 
#include iostream #include fstream #include string #incl.pdf
#include iostream #include fstream #include string #incl.pdf#include iostream #include fstream #include string #incl.pdf
#include iostream #include fstream #include string #incl.pdfaptexx
 
There and Back Again
There and Back AgainThere and Back Again
There and Back AgainMike Harris
 
Handling Real-time Geostreams
Handling Real-time GeostreamsHandling Real-time Geostreams
Handling Real-time Geostreamsguest35660bc
 
Handling Real-time Geostreams
Handling Real-time GeostreamsHandling Real-time Geostreams
Handling Real-time GeostreamsRaffi Krikorian
 
js+ts fullstack typescript with react and express.pdf
js+ts fullstack typescript with react and express.pdfjs+ts fullstack typescript with react and express.pdf
js+ts fullstack typescript with react and express.pdfNuttavutThongjor1
 
fullstack typescript with react and express.pdf
fullstack typescript with react and express.pdffullstack typescript with react and express.pdf
fullstack typescript with react and express.pdfNuttavutThongjor1
 
Das Web Wird Mobil - Geolocation und Location Based Services
Das Web Wird Mobil - Geolocation und Location Based ServicesDas Web Wird Mobil - Geolocation und Location Based Services
Das Web Wird Mobil - Geolocation und Location Based ServicesStephan Schmidt
 
How to work with legacy code PHPers Rzeszow #2
How to work with legacy code PHPers Rzeszow #2How to work with legacy code PHPers Rzeszow #2
How to work with legacy code PHPers Rzeszow #2Michał Kruczek
 
Coffeescript: No really, it's just Javascript
Coffeescript: No really, it's just JavascriptCoffeescript: No really, it's just Javascript
Coffeescript: No really, it's just JavascriptBrian Mann
 
How to work with legacy code
How to work with legacy codeHow to work with legacy code
How to work with legacy codeMichał Kruczek
 
Designing Opeation Oriented Web Applications / YAPC::Asia Tokyo 2011
Designing Opeation Oriented Web Applications / YAPC::Asia Tokyo 2011Designing Opeation Oriented Web Applications / YAPC::Asia Tokyo 2011
Designing Opeation Oriented Web Applications / YAPC::Asia Tokyo 2011Masahiro Nagano
 
ETL for Pros: Getting Data Into MongoDB
ETL for Pros: Getting Data Into MongoDBETL for Pros: Getting Data Into MongoDB
ETL for Pros: Getting Data Into MongoDBMongoDB
 
Symfony & Javascript. Combining the best of two worlds
Symfony & Javascript. Combining the best of two worldsSymfony & Javascript. Combining the best of two worlds
Symfony & Javascript. Combining the best of two worldsIgnacio Martín
 

Similar to WhereCamp EU talk: iPhone location 101 (17)

Core Location and Map Kit: Bringing Your Own Maps [Voices That Matter: iPhone...
Core Location and Map Kit: Bringing Your Own Maps [Voices That Matter: iPhone...Core Location and Map Kit: Bringing Your Own Maps [Voices That Matter: iPhone...
Core Location and Map Kit: Bringing Your Own Maps [Voices That Matter: iPhone...
 
#include iostream #include fstream #include string #incl.pdf
#include iostream #include fstream #include string #incl.pdf#include iostream #include fstream #include string #incl.pdf
#include iostream #include fstream #include string #incl.pdf
 
Introduction of ES2015
Introduction of ES2015Introduction of ES2015
Introduction of ES2015
 
There and Back Again
There and Back AgainThere and Back Again
There and Back Again
 
Handling Real-time Geostreams
Handling Real-time GeostreamsHandling Real-time Geostreams
Handling Real-time Geostreams
 
Handling Real-time Geostreams
Handling Real-time GeostreamsHandling Real-time Geostreams
Handling Real-time Geostreams
 
ts+js
ts+jsts+js
ts+js
 
js+ts fullstack typescript with react and express.pdf
js+ts fullstack typescript with react and express.pdfjs+ts fullstack typescript with react and express.pdf
js+ts fullstack typescript with react and express.pdf
 
fullstack typescript with react and express.pdf
fullstack typescript with react and express.pdffullstack typescript with react and express.pdf
fullstack typescript with react and express.pdf
 
Das Web Wird Mobil - Geolocation und Location Based Services
Das Web Wird Mobil - Geolocation und Location Based ServicesDas Web Wird Mobil - Geolocation und Location Based Services
Das Web Wird Mobil - Geolocation und Location Based Services
 
How to work with legacy code PHPers Rzeszow #2
How to work with legacy code PHPers Rzeszow #2How to work with legacy code PHPers Rzeszow #2
How to work with legacy code PHPers Rzeszow #2
 
Coffeescript: No really, it's just Javascript
Coffeescript: No really, it's just JavascriptCoffeescript: No really, it's just Javascript
Coffeescript: No really, it's just Javascript
 
How to work with legacy code
How to work with legacy codeHow to work with legacy code
How to work with legacy code
 
Designing Opeation Oriented Web Applications / YAPC::Asia Tokyo 2011
Designing Opeation Oriented Web Applications / YAPC::Asia Tokyo 2011Designing Opeation Oriented Web Applications / YAPC::Asia Tokyo 2011
Designing Opeation Oriented Web Applications / YAPC::Asia Tokyo 2011
 
ETL for Pros: Getting Data Into MongoDB
ETL for Pros: Getting Data Into MongoDBETL for Pros: Getting Data Into MongoDB
ETL for Pros: Getting Data Into MongoDB
 
Map kit light
Map kit lightMap kit light
Map kit light
 
Symfony & Javascript. Combining the best of two worlds
Symfony & Javascript. Combining the best of two worldsSymfony & Javascript. Combining the best of two worlds
Symfony & Javascript. Combining the best of two worlds
 

Recently uploaded

Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...gurkirankumar98700
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsRoshan Dwivedi
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilV3cube
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 

Recently uploaded (20)

Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 

WhereCamp EU talk: iPhone location 101

  • 1. iPhone geo hacking 101 Michael Dales
  • 2. • where am I? • no, really, I’m a human. where am I? • Can you show me where I am? • Can you show me where it is? • where should I be?
  • 3. CoreLocation • where am I? • no, really, I’m a human. where am I? • Can you show me where I am? • Can you show me where it is? • where should I be?
  • 4. CoreLocation • where am I? • no, really, I’m a human. where am I? • Can you show me where I am? • Can you show me where it is? MapKit • where should I be?
  • 5. CoreLocation • where am I? • no, really, I’m a human. where am I? • Can you show me where I am? • Can you show me where it is? MapKit • where should I be? AddressBook
  • 6. locationManager = [[CLLocationManager alloc] init]; locationManager.delegate = self; locationManager.desiredAccuracy = kCLLocationAccuracyBest; [locationManager startUpdatingLocation];
  • 7. - (void)locationManager: (CLLocationManager *)manager didUpdateToLocation: (CLLocation *)newLocation fromLocation: (CLLocation *)oldLocation { NSString *latitudeString = [[NSString alloc] initWithFormat: @"%g", newLocation.coordinate.latitude]; latitudeLabel.text = latitudeString; [latitudeString release]; NSString *longitudeString = [[NSString alloc] initWithFormat: @"%g", newLocation.coordinate.longitude]; longitudeLabel.text = longitudeString; [longitudeString release]; }
  • 8. CLLocation • Location info • lat, long, accuracy • Altitude info, speed info, heading info • ask distance from another point
  • 9. • Remember the user! • Battery matters to them • Also available on the Mac
  • 10.
  • 11. MKReverseGeocoder *geocoder = [[MKReverseGeocoder alloc] initWithCoordinate: coordinate]; geocoder.delegate = self; [geocoder start];
  • 12. MKReverseGeocoder *geocoder = [[MKReverseGeocoder alloc] initWithCoordinate: coordinate]; geocoder.delegate = self; [geocoder start]; and a little later... - (void)reverseGeocoder: (MKReverseGeocoder *)geocoder didFindPlacemark: (MKPlacemark *)pplacemark { self.placemark = pplacemark; geocoder.delegate = nil; [geocoder autorelease]; }
  • 13. MKPlacemark NSString *thoroughfare; // street address, eg 1 Infinite Loop NSString *subThoroughfare; NSString *locality; // city, eg. Cupertino NSString *subLocality; // neighborhood, landmark, common name, etc NSString *administrativeArea; // state, eg. CA NSString *subAdministrativeArea; // county, eg. Santa Clara NSString *postalCode; // zip code, eg 95014 NSString *country; // eg. United States NSString *countryCode; // eg. US
  • 14.
  • 16.
  • 17. set where to look MKCoordinateRegion region; region.center = lastPoint.coordinate; region.span.latitudeDelta = 0.002; region.span.longitudeDelta = 0.002; [mapView setRegion: region animated: YES];
  • 18. annotations @interface LocationDemoAnnotation : NSObject <MKAnnotation, MKReverseGeocoderDelegate> { // essential CLLocationCoordinate2D coordinate; } @property (nonatomic, readonly) CLLocationCoordinate2D coordinate; - (id)initWithCoordinate: (CLLocationCoordinate2D)coord; - (NSString *)title; - (NSString *)subtitle;
  • 19.
  • 20. making it personal ABAddressBook *addressBook = [ABAddressBook addressBook]; ABPerson *me = [addressBook me]; id home = [me valueForProperty: kABAddressProperty];
  • 21. making it personal ABAddressBook *addressBook = [ABAddressBook addressBook]; ABPerson *me = [addressBook me]; id home = [me valueForProperty: kABAddressProperty]; 2010-03-12 13:34:09.804 MacLocationTest[34432:a0b] ABPerson (0x20009d180) { ABPersonFlags : 0 Address :{ home { City = Impington; Country = UK; State = Cambridge; Street = "42 North Road"; ZIP = "CB99 9ZX"; } } Creation : 2010-01-04 18:00:01 +0000 First : Michael Last : Dales Modification : 2010-03-12 13:29:27 +0000 Unique ID : 506661FE-8D0D-407F-AEAB-61699D59E943:ABPerson }
  • 22. what’s left • Talking to something else • ASIHTTPRequest • JSON Framework

Editor's Notes