SlideShare uma empresa Scribd logo
1 de 46
Baixar para ler offline
Dev e lo p in g iP h o n e
  A ppl i c a t i ons i n




                               Paul	
  Rayner

                          AGILITY.	
  CRAFT.	
  ARCHITECTURE.
Tuesday, March 16, 2010
Why the
iPhone?




Tuesday, March 16, 2010
Why the
iPhone?




Tuesday, March 16, 2010
Tools




Tuesday, March 16, 2010
Distributing Apps
Tuesday, March 16, 2010
Tuesday, March 16, 2010
MonoTouch Tools




Tuesday, March 16, 2010
MonoTouch Tools




Tuesday, March 16, 2010
MonoTouch Tools




Tuesday, March 16, 2010
Demo :: Getting Started




Tuesday, March 16, 2010
Demo :: Getting Started




Tuesday, March 16, 2010
iPhone Constraints




Tuesday, March 16, 2010
iPhone Constraints
•iPhone	
  apps	
  are	
  not	
  small	
  desktop	
  apps




Tuesday, March 16, 2010
iPhone Constraints
•iPhone	
  apps	
  are	
  not	
  small	
  desktop	
  apps
•Limited	
  resources




Tuesday, March 16, 2010
iPhone Constraints
•iPhone	
  apps	
  are	
  not	
  small	
  desktop	
  apps
•Limited	
  resources
•Different	
  usage	
  pa8erns



Tuesday, March 16, 2010
iPhone Constraints
•iPhone	
  apps	
  are	
  not	
  small	
  desktop	
  apps
•Limited	
  resources
•Different	
  usage	
  pa8erns
•Only	
  one	
  applica;on	
  can	
  run	
  at	
  a	
  ;me


Tuesday, March 16, 2010
iPhone Constraints
•iPhone	
  apps	
  are	
  not	
  small	
  desktop	
  apps
•Limited	
  resources
•Different	
  usage	
  pa8erns
•Only	
  one	
  applica;on	
  can	
  run	
  at	
  a	
  ;me
•Handle	
  device	
  differences	
  gracefully

Tuesday, March 16, 2010
iPhone Constraints
•iPhone	
  apps	
  are	
  not	
  small	
  desktop	
  apps
•Limited	
  resources
•Different	
  usage	
  pa8erns
•Only	
  one	
  applica;on	
  can	
  run	
  at	
  a	
  ;me
•Handle	
  device	
  differences	
  gracefully
•Devs:	
  No	
  JIT	
  compila;on,	
  no	
  scrip;ng
Tuesday, March 16, 2010
Cocoa & Objective-C
  ! NSMutableURLRequest *theRequest = [NSMutableURLRequest
  requestWithURL:[NSURL URLWithString:@"http://
  virtualgenius:dummypassword@twitter.com/statuses/update.xml"]
  ! !    !   !  !   !  !   !  !   !     ! !  !  !  !   !   !  !  !   !
   cachePolicy:NSURLRequestUseProtocolCachePolicy
  ! !    !   !  !   !  !   !  !   !     ! !  !  !  !   !   !  !  !   !
   timeoutInterval:60.0];
                                   Text
  ! [theRequest setHTTPMethod:@"POST"];
  ! [theRequest setHTTPBody:[[NSString stringWithFormat:@"status=%@",
  themessage] dataUsingEncoding:NSASCIIStringEncoding]];
  ! NSURLResponse* response;
  ! NSError* error;
  ! NSData* result = [NSURLConnection sendSynchronousRequest:theRequest
  returningResponse:&response error:&error];
  ! NSLog(@"%@", [[[NSString alloc] initWithData:result
  encoding:NSASCIIStringEncoding] autorelease]);




Tuesday, March 16, 2010
Cocoa & Objective-C
  ! NSMutableURLRequest *theRequest = [NSMutableURLRequest
  requestWithURL:[NSURL URLWithString:@"http://
  virtualgenius:dummypassword@twitter.com/statuses/update.xml"]
  ! !    !   !  !   !  !   !  !   !     ! !  !  !  !   !   !  !  !   !
   cachePolicy:NSURLRequestUseProtocolCachePolicy
  ! !    !   !  !   !  !   !  !   !     ! !  !  !  !   !   !  !  !   !
   timeoutInterval:60.0];
                                   Text
  ! [theRequest setHTTPMethod:@"POST"];
  ! [theRequest setHTTPBody:[[NSString stringWithFormat:@"status=%@",
  themessage] dataUsingEncoding:NSASCIIStringEncoding]];
  ! NSURLResponse* response;
  ! NSError* error;
  ! NSData* result = [NSURLConnection sendSynchronousRequest:theRequest
  returningResponse:&response error:&error];
  ! NSLog(@"%@", [[[NSString alloc] initWithData:result
  encoding:NSASCIIStringEncoding] autorelease]);




Tuesday, March 16, 2010
Cocoa & Objective-C
  ! NSMutableURLRequest *theRequest = [NSMutableURLRequest
  requestWithURL:[NSURL URLWithString:@"http://
  virtualgenius:dummypassword@twitter.com/statuses/update.xml"]
  ! !    !   !  !   !  !   !  !   !  !   !   !  !  !   !   !  !  !   !
   cachePolicy:NSURLRequestUseProtocolCachePolicy
  ! !    !   !  !   !  !   !  !   !  !   !   !  !  !   !   !  !  !   !
   timeoutInterval:60.0];
  ! [theRequest setHTTPMethod:@"POST"];
  ! [theRequest setHTTPBody:[[NSString stringWithFormat:@"status=%@",
  themessage] dataUsingEncoding:NSASCIIStringEncoding]];
  ! NSURLResponse* response;
  ! NSError* error;
  ! NSData* result = [NSURLConnection sendSynchronousRequest:theRequest
  returningResponse:&response error:&error];
  ! NSLog(@"%@", [[[NSString alloc] initWithData:result
  encoding:NSASCIIStringEncoding] autorelease]);




Tuesday, March 16, 2010
Cocoa & Objective-C
    •When	
  there	
  is	
  no	
  more	
  memory,	
  there	
  is	
  
  ! NSMutableURLRequest *theRequest = [NSMutableURLRequest
  requestWithURL:[NSURL URLWithString:@"http://

  ! !
         no	
  more	
  memory
  virtualgenius:dummypassword@twitter.com/statuses/update.xml"]
         !   !  !   !  !   !  !   !  !   !   !  !  !   !   !  !  !   !
   cachePolicy:NSURLRequestUseProtocolCachePolicy
  ! !    !   !  !   !  !   !  !   !  !   !   !  !  !   !   !  !  !   !
   timeoutInterval:60.0];
  ! [theRequest setHTTPMethod:@"POST"];
  ! [theRequest setHTTPBody:[[NSString stringWithFormat:@"status=%@",
  themessage] dataUsingEncoding:NSASCIIStringEncoding]];
  ! NSURLResponse* response;
  ! NSError* error;
  ! NSData* result = [NSURLConnection sendSynchronousRequest:theRequest
  returningResponse:&response error:&error];
  ! NSLog(@"%@", [[[NSString alloc] initWithData:result
  encoding:NSASCIIStringEncoding] autorelease]);




Tuesday, March 16, 2010
Cocoa & Objective-C
    •When	
  there	
  is	
  no	
  more	
  memory,	
  there	
  is	
  
  ! NSMutableURLRequest *theRequest = [NSMutableURLRequest
  requestWithURL:[NSURL URLWithString:@"http://

  ! !
     no	
  more	
  memory
  virtualgenius:dummypassword@twitter.com/statuses/update.xml"]
         !   !  !   !  !   !  !   !  !   !   !  !  !   !   !  !  !   !

    •No	
  automa3c	
  objects	
  on	
  the	
  stack.
   cachePolicy:NSURLRequestUseProtocolCachePolicy
  ! !    !   !  !   !  !
   timeoutInterval:60.0];
                           !  !   !  !   !   !  !  !   !   !  !  !   !

  ! [theRequest setHTTPMethod:@"POST"];
  ! [theRequest setHTTPBody:[[NSString stringWithFormat:@"status=%@",
  themessage] dataUsingEncoding:NSASCIIStringEncoding]];
  ! NSURLResponse* response;
  ! NSError* error;
  ! NSData* result = [NSURLConnection sendSynchronousRequest:theRequest
  returningResponse:&response error:&error];
  ! NSLog(@"%@", [[[NSString alloc] initWithData:result
  encoding:NSASCIIStringEncoding] autorelease]);




Tuesday, March 16, 2010
Cocoa & Objective-C
    •When	
  there	
  is	
  no	
  more	
  memory,	
  there	
  is	
  
  ! NSMutableURLRequest *theRequest = [NSMutableURLRequest
  requestWithURL:[NSURL URLWithString:@"http://

  ! !
     no	
  more	
  memory
  virtualgenius:dummypassword@twitter.com/statuses/update.xml"]
         !   !  !   !  !   !  !   !  !   !   !  !  !   !   !  !  !   !

    •No	
  automa3c	
  objects	
  on	
  the	
  stack.
   cachePolicy:NSURLRequestUseProtocolCachePolicy
  ! !    !   !  !   !  !   !  !   !  !   !   !  !  !   !   !  !  !   !

    •No	
  garbage	
  collector	
  (manual	
  memory	
  
   timeoutInterval:60.0];
  ! [theRequest setHTTPMethod:@"POST"];
  ! [theRequest setHTTPBody:[[NSString stringWithFormat:@"status=%@",
     management)
  themessage] dataUsingEncoding:NSASCIIStringEncoding]];
  ! NSURLResponse* response;
  ! NSError* error;
  ! NSData* result = [NSURLConnection sendSynchronousRequest:theRequest
  returningResponse:&response error:&error];
  ! NSLog(@"%@", [[[NSString alloc] initWithData:result
  encoding:NSASCIIStringEncoding] autorelease]);




Tuesday, March 16, 2010
Cocoa & Objective-C
    •When	
  there	
  is	
  no	
  more	
  memory,	
  there	
  is	
  
  ! NSMutableURLRequest *theRequest = [NSMutableURLRequest
  requestWithURL:[NSURL URLWithString:@"http://

  ! !
     no	
  more	
  memory
  virtualgenius:dummypassword@twitter.com/statuses/update.xml"]
         !   !  !   !  !   !  !   !  !   !   !  !  !   !   !  !  !   !

    •No	
  automa3c	
  objects	
  on	
  the	
  stack.
   cachePolicy:NSURLRequestUseProtocolCachePolicy
  ! !    !   !  !   !  !   !  !   !  !   !   !  !  !   !   !  !  !   !

    •No	
  garbage	
  collector	
  (manual	
  memory	
  
   timeoutInterval:60.0];
  ! [theRequest setHTTPMethod:@"POST"];
  ! [theRequest setHTTPBody:[[NSString stringWithFormat:@"status=%@",
     management)
  themessage] dataUsingEncoding:NSASCIIStringEncoding]];
  ! NSURLResponse* response;
  ! NSError* error;
  ! NSData* result = [NSURLConnection sendSynchronousRequest:theRequest
  returningResponse:&response error:&error];
  ! NSLog(@"%@", [[[NSString alloc] initWithData:result
  encoding:NSASCIIStringEncoding] autorelease]);




Tuesday, March 16, 2010
MonoTouch Limitations




Tuesday, March 16, 2010
MonoTouch Limitations

•No	
  JIT	
  or	
  scrip3ng




Tuesday, March 16, 2010
MonoTouch Limitations

•No	
  JIT	
  or	
  scrip3ng
•No	
  code	
  gen	
  at	
  run3me




Tuesday, March 16, 2010
MonoTouch Limitations

•No	
  JIT	
  or	
  scrip3ng
•No	
  code	
  gen	
  at	
  run3me
         System.Reflec3on.Emit	
  not	
  available




Tuesday, March 16, 2010
MonoTouch Limitations

•No	
  JIT	
  or	
  scrip3ng
•No	
  code	
  gen	
  at	
  run3me
         System.Reflec3on.Emit	
  not	
  available
         No	
  support	
  for	
  System.Run3me.Remo3ng




Tuesday, March 16, 2010
MonoTouch Limitations

•No	
  JIT	
  or	
  scrip3ng
•No	
  code	
  gen	
  at	
  run3me
         System.Reflec3on.Emit	
  not	
  available
         No	
  support	
  for	
  System.Run3me.Remo3ng
         No	
  support	
  for	
  DLR	
  languages	
  (eg.	
  IronRuby,	
  
         IronPython)



Tuesday, March 16, 2010
MonoTouch Limitations

•No	
  JIT	
  or	
  scrip3ng
•No	
  code	
  gen	
  at	
  run3me
         System.Reflec3on.Emit	
  not	
  available
         No	
  support	
  for	
  System.Run3me.Remo3ng
         No	
  support	
  for	
  DLR	
  languages	
  (eg.	
  IronRuby,	
  
         IronPython)
         See	
  hJp://monotouch.net/Documenta3on/
         Limita3ons

Tuesday, March 16, 2010
Sample App
Walkthrough




Tuesday, March 16, 2010
What’s Next?




                          15

Tuesday, March 16, 2010
What’s Next?




                          15

Tuesday, March 16, 2010
What’s Next?




                          15

Tuesday, March 16, 2010
What’s Next?




                          15

Tuesday, March 16, 2010
iPhone	
  development	
  is	
  
challenging




Tuesday, March 16, 2010
iPhone	
  development	
  is	
  
challenging




              MonoTouch	
  ==	
  	
  Goodness
Tuesday, March 16, 2010
Questions




Tuesday, March 16, 2010
Resources




Tuesday, March 16, 2010
Resources




Tuesday, March 16, 2010
Resources




Tuesday, March 16, 2010
Resources




       http://delicious.com/virtualgenius/monotouch
Tuesday, March 16, 2010
Thank You…
                          Paul	
  Rayner
                          paul@virtual-genius.com
                          www.virtual-genius.com
                          http://twitter.com/virtualgenius




                                                             AGILITY.	
  CRAFT.	
  ARCHITECTURE.
Tuesday, March 16, 2010
References
     • http://www.amazon.com/Building-iPhone-Applications-Developer-
       MonoTouch/dp/B003A6RCF2
     • iPhone image: http://ke2yk.wordpress.com/2009/03/22/first-it-was-cw-
       now-its-the-question-pool/
     • iPhone sales chart: http://en.wikipedia.org/wiki/IPhone
     • Monotouch home page: http://monotouch.net/
     • MacBook Pro: http://www.apple.com/macbookpro/
     • iPhone Dev Center Logo: http://developer.apple.com/iphone/index.action
     • Mono logo: www.mono-project.net
     • Objective C memory management: http://cocoadevcentral.com/d/
       learn_objectivec/
     • Microphone: http://www.faqs.org/photo-dict/phrase/377/microphone.html
     • App store logo: http://www.apple.com/iphone/apps-for-iphone/
     • Android developer logo: http://developer.android.com/index.html
     • Head First iPhone Development: http://oreilly.com/catalog/9780596803551




Tuesday, March 16, 2010

Mais conteúdo relacionado

Último

Structuring Teams and Portfolios for Success
Structuring Teams and Portfolios for SuccessStructuring Teams and Portfolios for Success
Structuring Teams and Portfolios for Success
UXDXConf
 
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo DiehlFuture Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Peter Udo Diehl
 

Último (20)

TEST BANK For, Information Technology Project Management 9th Edition Kathy Sc...
TEST BANK For, Information Technology Project Management 9th Edition Kathy Sc...TEST BANK For, Information Technology Project Management 9th Edition Kathy Sc...
TEST BANK For, Information Technology Project Management 9th Edition Kathy Sc...
 
Syngulon - Selection technology May 2024.pdf
Syngulon - Selection technology May 2024.pdfSyngulon - Selection technology May 2024.pdf
Syngulon - Selection technology May 2024.pdf
 
Structuring Teams and Portfolios for Success
Structuring Teams and Portfolios for SuccessStructuring Teams and Portfolios for Success
Structuring Teams and Portfolios for Success
 
The Value of Certifying Products for FDO _ Paul at FIDO Alliance.pdf
The Value of Certifying Products for FDO _ Paul at FIDO Alliance.pdfThe Value of Certifying Products for FDO _ Paul at FIDO Alliance.pdf
The Value of Certifying Products for FDO _ Paul at FIDO Alliance.pdf
 
Optimizing NoSQL Performance Through Observability
Optimizing NoSQL Performance Through ObservabilityOptimizing NoSQL Performance Through Observability
Optimizing NoSQL Performance Through Observability
 
WSO2CONMay2024OpenSourceConferenceDebrief.pptx
WSO2CONMay2024OpenSourceConferenceDebrief.pptxWSO2CONMay2024OpenSourceConferenceDebrief.pptx
WSO2CONMay2024OpenSourceConferenceDebrief.pptx
 
Custom Approval Process: A New Perspective, Pavel Hrbacek & Anindya Halder
Custom Approval Process: A New Perspective, Pavel Hrbacek & Anindya HalderCustom Approval Process: A New Perspective, Pavel Hrbacek & Anindya Halder
Custom Approval Process: A New Perspective, Pavel Hrbacek & Anindya Halder
 
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo DiehlFuture Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
 
Google I/O Extended 2024 Warsaw
Google I/O Extended 2024 WarsawGoogle I/O Extended 2024 Warsaw
Google I/O Extended 2024 Warsaw
 
IoT Analytics Company Presentation May 2024
IoT Analytics Company Presentation May 2024IoT Analytics Company Presentation May 2024
IoT Analytics Company Presentation May 2024
 
IESVE for Early Stage Design and Planning
IESVE for Early Stage Design and PlanningIESVE for Early Stage Design and Planning
IESVE for Early Stage Design and Planning
 
THE BEST IPTV in GERMANY for 2024: IPTVreel
THE BEST IPTV in  GERMANY for 2024: IPTVreelTHE BEST IPTV in  GERMANY for 2024: IPTVreel
THE BEST IPTV in GERMANY for 2024: IPTVreel
 
A Business-Centric Approach to Design System Strategy
A Business-Centric Approach to Design System StrategyA Business-Centric Approach to Design System Strategy
A Business-Centric Approach to Design System Strategy
 
What's New in Teams Calling, Meetings and Devices April 2024
What's New in Teams Calling, Meetings and Devices April 2024What's New in Teams Calling, Meetings and Devices April 2024
What's New in Teams Calling, Meetings and Devices April 2024
 
Intro in Product Management - Коротко про професію продакт менеджера
Intro in Product Management - Коротко про професію продакт менеджераIntro in Product Management - Коротко про професію продакт менеджера
Intro in Product Management - Коротко про професію продакт менеджера
 
How Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdf
How Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdfHow Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdf
How Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdf
 
Integrating Telephony Systems with Salesforce: Insights and Considerations, B...
Integrating Telephony Systems with Salesforce: Insights and Considerations, B...Integrating Telephony Systems with Salesforce: Insights and Considerations, B...
Integrating Telephony Systems with Salesforce: Insights and Considerations, B...
 
Strategic AI Integration in Engineering Teams
Strategic AI Integration in Engineering TeamsStrategic AI Integration in Engineering Teams
Strategic AI Integration in Engineering Teams
 
The UX of Automation by AJ King, Senior UX Researcher, Ocado
The UX of Automation by AJ King, Senior UX Researcher, OcadoThe UX of Automation by AJ King, Senior UX Researcher, Ocado
The UX of Automation by AJ King, Senior UX Researcher, Ocado
 
10 Differences between Sales Cloud and CPQ, Blanka Doktorová
10 Differences between Sales Cloud and CPQ, Blanka Doktorová10 Differences between Sales Cloud and CPQ, Blanka Doktorová
10 Differences between Sales Cloud and CPQ, Blanka Doktorová
 

Destaque

How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
ThinkNow
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
Kurio // The Social Media Age(ncy)
 

Destaque (20)

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPT
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage Engineerings
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 

Developing iPhone Applications In .Net - March 16 SDC2010

  • 1. Dev e lo p in g iP h o n e A ppl i c a t i ons i n Paul  Rayner AGILITY.  CRAFT.  ARCHITECTURE. Tuesday, March 16, 2010
  • 10. Demo :: Getting Started Tuesday, March 16, 2010
  • 11. Demo :: Getting Started Tuesday, March 16, 2010
  • 13. iPhone Constraints •iPhone  apps  are  not  small  desktop  apps Tuesday, March 16, 2010
  • 14. iPhone Constraints •iPhone  apps  are  not  small  desktop  apps •Limited  resources Tuesday, March 16, 2010
  • 15. iPhone Constraints •iPhone  apps  are  not  small  desktop  apps •Limited  resources •Different  usage  pa8erns Tuesday, March 16, 2010
  • 16. iPhone Constraints •iPhone  apps  are  not  small  desktop  apps •Limited  resources •Different  usage  pa8erns •Only  one  applica;on  can  run  at  a  ;me Tuesday, March 16, 2010
  • 17. iPhone Constraints •iPhone  apps  are  not  small  desktop  apps •Limited  resources •Different  usage  pa8erns •Only  one  applica;on  can  run  at  a  ;me •Handle  device  differences  gracefully Tuesday, March 16, 2010
  • 18. iPhone Constraints •iPhone  apps  are  not  small  desktop  apps •Limited  resources •Different  usage  pa8erns •Only  one  applica;on  can  run  at  a  ;me •Handle  device  differences  gracefully •Devs:  No  JIT  compila;on,  no  scrip;ng Tuesday, March 16, 2010
  • 19. Cocoa & Objective-C ! NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http:// virtualgenius:dummypassword@twitter.com/statuses/update.xml"] ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! cachePolicy:NSURLRequestUseProtocolCachePolicy ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! timeoutInterval:60.0]; Text ! [theRequest setHTTPMethod:@"POST"]; ! [theRequest setHTTPBody:[[NSString stringWithFormat:@"status=%@", themessage] dataUsingEncoding:NSASCIIStringEncoding]]; ! NSURLResponse* response; ! NSError* error; ! NSData* result = [NSURLConnection sendSynchronousRequest:theRequest returningResponse:&response error:&error]; ! NSLog(@"%@", [[[NSString alloc] initWithData:result encoding:NSASCIIStringEncoding] autorelease]); Tuesday, March 16, 2010
  • 20. Cocoa & Objective-C ! NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http:// virtualgenius:dummypassword@twitter.com/statuses/update.xml"] ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! cachePolicy:NSURLRequestUseProtocolCachePolicy ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! timeoutInterval:60.0]; Text ! [theRequest setHTTPMethod:@"POST"]; ! [theRequest setHTTPBody:[[NSString stringWithFormat:@"status=%@", themessage] dataUsingEncoding:NSASCIIStringEncoding]]; ! NSURLResponse* response; ! NSError* error; ! NSData* result = [NSURLConnection sendSynchronousRequest:theRequest returningResponse:&response error:&error]; ! NSLog(@"%@", [[[NSString alloc] initWithData:result encoding:NSASCIIStringEncoding] autorelease]); Tuesday, March 16, 2010
  • 21. Cocoa & Objective-C ! NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http:// virtualgenius:dummypassword@twitter.com/statuses/update.xml"] ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! cachePolicy:NSURLRequestUseProtocolCachePolicy ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! timeoutInterval:60.0]; ! [theRequest setHTTPMethod:@"POST"]; ! [theRequest setHTTPBody:[[NSString stringWithFormat:@"status=%@", themessage] dataUsingEncoding:NSASCIIStringEncoding]]; ! NSURLResponse* response; ! NSError* error; ! NSData* result = [NSURLConnection sendSynchronousRequest:theRequest returningResponse:&response error:&error]; ! NSLog(@"%@", [[[NSString alloc] initWithData:result encoding:NSASCIIStringEncoding] autorelease]); Tuesday, March 16, 2010
  • 22. Cocoa & Objective-C •When  there  is  no  more  memory,  there  is   ! NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http:// ! ! no  more  memory virtualgenius:dummypassword@twitter.com/statuses/update.xml"] ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! cachePolicy:NSURLRequestUseProtocolCachePolicy ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! timeoutInterval:60.0]; ! [theRequest setHTTPMethod:@"POST"]; ! [theRequest setHTTPBody:[[NSString stringWithFormat:@"status=%@", themessage] dataUsingEncoding:NSASCIIStringEncoding]]; ! NSURLResponse* response; ! NSError* error; ! NSData* result = [NSURLConnection sendSynchronousRequest:theRequest returningResponse:&response error:&error]; ! NSLog(@"%@", [[[NSString alloc] initWithData:result encoding:NSASCIIStringEncoding] autorelease]); Tuesday, March 16, 2010
  • 23. Cocoa & Objective-C •When  there  is  no  more  memory,  there  is   ! NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http:// ! ! no  more  memory virtualgenius:dummypassword@twitter.com/statuses/update.xml"] ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! •No  automa3c  objects  on  the  stack. cachePolicy:NSURLRequestUseProtocolCachePolicy ! ! ! ! ! ! ! timeoutInterval:60.0]; ! ! ! ! ! ! ! ! ! ! ! ! ! ! [theRequest setHTTPMethod:@"POST"]; ! [theRequest setHTTPBody:[[NSString stringWithFormat:@"status=%@", themessage] dataUsingEncoding:NSASCIIStringEncoding]]; ! NSURLResponse* response; ! NSError* error; ! NSData* result = [NSURLConnection sendSynchronousRequest:theRequest returningResponse:&response error:&error]; ! NSLog(@"%@", [[[NSString alloc] initWithData:result encoding:NSASCIIStringEncoding] autorelease]); Tuesday, March 16, 2010
  • 24. Cocoa & Objective-C •When  there  is  no  more  memory,  there  is   ! NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http:// ! ! no  more  memory virtualgenius:dummypassword@twitter.com/statuses/update.xml"] ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! •No  automa3c  objects  on  the  stack. cachePolicy:NSURLRequestUseProtocolCachePolicy ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! •No  garbage  collector  (manual  memory   timeoutInterval:60.0]; ! [theRequest setHTTPMethod:@"POST"]; ! [theRequest setHTTPBody:[[NSString stringWithFormat:@"status=%@", management) themessage] dataUsingEncoding:NSASCIIStringEncoding]]; ! NSURLResponse* response; ! NSError* error; ! NSData* result = [NSURLConnection sendSynchronousRequest:theRequest returningResponse:&response error:&error]; ! NSLog(@"%@", [[[NSString alloc] initWithData:result encoding:NSASCIIStringEncoding] autorelease]); Tuesday, March 16, 2010
  • 25. Cocoa & Objective-C •When  there  is  no  more  memory,  there  is   ! NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http:// ! ! no  more  memory virtualgenius:dummypassword@twitter.com/statuses/update.xml"] ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! •No  automa3c  objects  on  the  stack. cachePolicy:NSURLRequestUseProtocolCachePolicy ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! •No  garbage  collector  (manual  memory   timeoutInterval:60.0]; ! [theRequest setHTTPMethod:@"POST"]; ! [theRequest setHTTPBody:[[NSString stringWithFormat:@"status=%@", management) themessage] dataUsingEncoding:NSASCIIStringEncoding]]; ! NSURLResponse* response; ! NSError* error; ! NSData* result = [NSURLConnection sendSynchronousRequest:theRequest returningResponse:&response error:&error]; ! NSLog(@"%@", [[[NSString alloc] initWithData:result encoding:NSASCIIStringEncoding] autorelease]); Tuesday, March 16, 2010
  • 27. MonoTouch Limitations •No  JIT  or  scrip3ng Tuesday, March 16, 2010
  • 28. MonoTouch Limitations •No  JIT  or  scrip3ng •No  code  gen  at  run3me Tuesday, March 16, 2010
  • 29. MonoTouch Limitations •No  JIT  or  scrip3ng •No  code  gen  at  run3me System.Reflec3on.Emit  not  available Tuesday, March 16, 2010
  • 30. MonoTouch Limitations •No  JIT  or  scrip3ng •No  code  gen  at  run3me System.Reflec3on.Emit  not  available No  support  for  System.Run3me.Remo3ng Tuesday, March 16, 2010
  • 31. MonoTouch Limitations •No  JIT  or  scrip3ng •No  code  gen  at  run3me System.Reflec3on.Emit  not  available No  support  for  System.Run3me.Remo3ng No  support  for  DLR  languages  (eg.  IronRuby,   IronPython) Tuesday, March 16, 2010
  • 32. MonoTouch Limitations •No  JIT  or  scrip3ng •No  code  gen  at  run3me System.Reflec3on.Emit  not  available No  support  for  System.Run3me.Remo3ng No  support  for  DLR  languages  (eg.  IronRuby,   IronPython) See  hJp://monotouch.net/Documenta3on/ Limita3ons Tuesday, March 16, 2010
  • 34. What’s Next? 15 Tuesday, March 16, 2010
  • 35. What’s Next? 15 Tuesday, March 16, 2010
  • 36. What’s Next? 15 Tuesday, March 16, 2010
  • 37. What’s Next? 15 Tuesday, March 16, 2010
  • 38. iPhone  development  is   challenging Tuesday, March 16, 2010
  • 39. iPhone  development  is   challenging MonoTouch  ==    Goodness Tuesday, March 16, 2010
  • 44. Resources http://delicious.com/virtualgenius/monotouch Tuesday, March 16, 2010
  • 45. Thank You… Paul  Rayner paul@virtual-genius.com www.virtual-genius.com http://twitter.com/virtualgenius AGILITY.  CRAFT.  ARCHITECTURE. Tuesday, March 16, 2010
  • 46. References • http://www.amazon.com/Building-iPhone-Applications-Developer- MonoTouch/dp/B003A6RCF2 • iPhone image: http://ke2yk.wordpress.com/2009/03/22/first-it-was-cw- now-its-the-question-pool/ • iPhone sales chart: http://en.wikipedia.org/wiki/IPhone • Monotouch home page: http://monotouch.net/ • MacBook Pro: http://www.apple.com/macbookpro/ • iPhone Dev Center Logo: http://developer.apple.com/iphone/index.action • Mono logo: www.mono-project.net • Objective C memory management: http://cocoadevcentral.com/d/ learn_objectivec/ • Microphone: http://www.faqs.org/photo-dict/phrase/377/microphone.html • App store logo: http://www.apple.com/iphone/apps-for-iphone/ • Android developer logo: http://developer.android.com/index.html • Head First iPhone Development: http://oreilly.com/catalog/9780596803551 Tuesday, March 16, 2010