SlideShare a Scribd company logo
1 of 19
Mobile ‘i’ for the .NET Guy
iPhone development for .NET developer




         Tuesday May 5th, 2009




              © ThoughtWorks 2009
Agenda
•   Introduction
•   What do you need?
•   Comparisons
•   Code Demo
•   Pleasure & Pain
•   MIA
•   Why?
•   Open discussion

                    © ThoughtWorks 2009
Introduction

•   .NET developer since 2004 (WinForms, WebForms,
    ASP.NET MVC)
•   C/C++ before that
•   iPhone development since SDK beta 1




                        © ThoughtWorks 2009
What do you need?

                                  Hardware
•   Mac
    •   Mini - $599
    •   iMac - $1199
    •   MacBook - $1299
    •   MacBook Pro - $1999


•   iPod Touch - $229 (8GB)
•   iPhone 3G
    • $199 (8GB + 2yr contract)
    • $599 (8GB + no contract)




                                  © ThoughtWorks 2009
What do you need?

                                Software
•   iPhone SDK (require registration but free to download)




•   iPhone Developer Program
    • Personal - $99 (ad-hoc deploy to hardware, submit to AppStore)
    • Enterprise - $299 (Personal + in-house deployment)




                                 © ThoughtWorks 2009
What do you need?

                             Books

• The iPhone Developer Cookbook



• Beginning iPhone Development



• Beginning Xcode



• Programming in Objective-C 2.0



                            © ThoughtWorks 2009
What do you need?

                           Optional
Mockup Software
– Balsamiq (http://www.balsamiq.com/)
– iPhone Mockup (http://iphonemockup.lkmc.ch/)




Bucket loads of patience!


                            © ThoughtWorks 2009
Language Comparison

               Objective-C                                         C#
Square Brackets + Dot notation                Dot notation
self.currentPostion = 0.5;                    this.currentPosition = 0.5;
[foodoStuffWith:bar];                         foo.DoStuff(bar);
Named Parameter                               Object/Collection Initializer in C# 3.0
[foodoStuffWith:bar atPosition:4];            Named Parameter in C# 4.0
                                              new foo(bar = “ISO”, position = 4);
Message Passing                               Method Invocation
Category                                      Extension Method
Protocol/Interface                            Interface/Class
Class/Method prefix                           Namespace
C based (header file, pointers)               Inline declaration, no pointer
Manual Memory Management (in iPhone)          GC
NSString *foo = [NSStringalloc];
[foo release];


                                   © ThoughtWorks 2009
IDE Comparison




quot;What is Xcode? It starts as a great source code editor...” and
quot;... and also has a nice debugger”
- Scott Forstall, Senior VP of iPhone Software




                                       © ThoughtWorks 2009
IDE Comparison

               Xcode 3.1                   Visual Studio 2008
Text Editor
Refactoring
UI Design
Debugging
Profiling
Localization




                     © ThoughtWorks 2009
Code Demo




 © ThoughtWorks 2009
Pleasure
•   MVC architecture

•   SDK’s API
    o Hit the 80/20 rules
    o Convention over Configuration
       Settings bundle
       Application icon

                                             © JesperRønn-Jensen
•   Simulator
    o Work exactly as the real phone
    o Except bandwidth, CPU (audio/video), interruptions




                                 © ThoughtWorks 2009
Pleasure – cont’d
•   Objective-C language features
    o   Dynamic
    o   Named parameters
    o   Categories
    o   Properties & @synthesize
    o   C-based. Lots of libraries available (e.g. libxml)




                                     © ThoughtWorks 2009
Pain
•   Xcode IDE
    o CodeSense is not that smart
    o Keyboard shortcuts are strange
    o Take a while to re-train muscle memory


•   Interface Builder                                   © deeleea
    o Good for simple UI, not so for complext UI
    o Can’t do everything (UITabController and UINavigationController don’t
      mix well)


•   Objective-C syntax
    o [foodoBar] – having to type the square brackets get old very quickly
    o Header files – What’s this, the 90’s?


                                  © ThoughtWorks 2009
Pain – cont’d
•   Memory management
    o Constraint environment
    o No GC
    o Have to remember to release object manually


•   Debugging
    o Do I really care about register address?
    o Erratic behavior


•   Unit testing framework
    o OCUnit/Google Toolbox for mac
    o OCMock



                                  © ThoughtWorks 2009
Pain – cont’d
•   Deployment
    o Require code signing
    o Opaque approval process


o   Small(er) developer community
    o StackOverflow
    o Google’s your friend!




                                 © ThoughtWorks 2009
MIA/WIP
• DI/IoC container

• OR/M
   – Partly solved by SqlitePersistanceObjects (Google Code)


• Build Framework
   – Use scripts (Rake, shell script)




                                  © ThoughtWorks 2009
Why learn something so different?

• Diversify skills

• Expansive API
   –   A/V
   –   Graphics/Animation
   –   Game/Peer to Peer (in 3.0)
   –   Maps (in 3.0)


• On most CTOs’ radar

• iTuneAppStore
   – Broad reach
   – Easy to start

                                    © ThoughtWorks 2009
Open Discussion           ahung@thoughtworks.com
                          Twitter: AlexHung
                          http://alexhung.vox.com




  Questions?
  RubyCocoa
     Mono
   Feedback




    © ThoughtWorks 2009

More Related Content

Similar to iPhone Development For .Net Dev

symfony: An Open-Source Framework for Professionals (Dutch Php Conference 2008)
symfony: An Open-Source Framework for Professionals (Dutch Php Conference 2008)symfony: An Open-Source Framework for Professionals (Dutch Php Conference 2008)
symfony: An Open-Source Framework for Professionals (Dutch Php Conference 2008)
Fabien Potencier
 
Ajax Tutorial
Ajax TutorialAjax Tutorial
Ajax Tutorial
oscon2007
 
Introduction to MonoTouch
Introduction to MonoTouchIntroduction to MonoTouch
Introduction to MonoTouch
Jonas Follesø
 

Similar to iPhone Development For .Net Dev (20)

Titanium Desktop Intro
Titanium Desktop IntroTitanium Desktop Intro
Titanium Desktop Intro
 
SpringPeople Introduction to iOS Apps Development
SpringPeople Introduction to iOS Apps DevelopmentSpringPeople Introduction to iOS Apps Development
SpringPeople Introduction to iOS Apps Development
 
Jun Heider - Flex Application Profiling By Example
Jun Heider - Flex Application Profiling By ExampleJun Heider - Flex Application Profiling By Example
Jun Heider - Flex Application Profiling By Example
 
How to Use OpenMP on Native Activity
How to Use OpenMP on Native ActivityHow to Use OpenMP on Native Activity
How to Use OpenMP on Native Activity
 
Lviv MD Day 2015 Ігор Кантор "Розробка додатків зі спільним C++ кодом для iOS...
Lviv MD Day 2015 Ігор Кантор "Розробка додатків зі спільним C++ кодом для iOS...Lviv MD Day 2015 Ігор Кантор "Розробка додатків зі спільним C++ кодом для iOS...
Lviv MD Day 2015 Ігор Кантор "Розробка додатків зі спільним C++ кодом для iOS...
 
Ios - Intorduction to view controller
Ios - Intorduction to view controllerIos - Intorduction to view controller
Ios - Intorduction to view controller
 
symfony: An Open-Source Framework for Professionals (Dutch Php Conference 2008)
symfony: An Open-Source Framework for Professionals (Dutch Php Conference 2008)symfony: An Open-Source Framework for Professionals (Dutch Php Conference 2008)
symfony: An Open-Source Framework for Professionals (Dutch Php Conference 2008)
 
Ajax Tutorial
Ajax TutorialAjax Tutorial
Ajax Tutorial
 
Using Adobe Gaming Tools for Education
Using Adobe Gaming Tools for EducationUsing Adobe Gaming Tools for Education
Using Adobe Gaming Tools for Education
 
Pc54
Pc54Pc54
Pc54
 
An introduction to java programming language forbeginners(java programming tu...
An introduction to java programming language forbeginners(java programming tu...An introduction to java programming language forbeginners(java programming tu...
An introduction to java programming language forbeginners(java programming tu...
 
Scaling Django
Scaling DjangoScaling Django
Scaling Django
 
Code and Conquer with Globe Labs, October 27, 2012
Code and Conquer with Globe Labs, October 27, 2012Code and Conquer with Globe Labs, October 27, 2012
Code and Conquer with Globe Labs, October 27, 2012
 
Jython: Integrating Python and Java
Jython: Integrating Python and JavaJython: Integrating Python and Java
Jython: Integrating Python and Java
 
Spark core intro
Spark core introSpark core intro
Spark core intro
 
Cross Platform Development Strategies with vendor review and PhoneGap case study
Cross Platform Development Strategies with vendor review and PhoneGap case studyCross Platform Development Strategies with vendor review and PhoneGap case study
Cross Platform Development Strategies with vendor review and PhoneGap case study
 
Introduction to MonoTouch
Introduction to MonoTouchIntroduction to MonoTouch
Introduction to MonoTouch
 
Castles in the Cloud: Developing with Google App Engine
Castles in the Cloud: Developing with Google App EngineCastles in the Cloud: Developing with Google App Engine
Castles in the Cloud: Developing with Google App Engine
 
Articulate Studio '09 Presentation
Articulate Studio '09 PresentationArticulate Studio '09 Presentation
Articulate Studio '09 Presentation
 
Road to sbt 1.0: Paved with server (2015 Amsterdam)
Road to sbt 1.0: Paved with server (2015 Amsterdam)Road to sbt 1.0: Paved with server (2015 Amsterdam)
Road to sbt 1.0: Paved with server (2015 Amsterdam)
 

Recently uploaded

Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 

Recently uploaded (20)

Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
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
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
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
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
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
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 

iPhone Development For .Net Dev

  • 1. Mobile ‘i’ for the .NET Guy iPhone development for .NET developer Tuesday May 5th, 2009 © ThoughtWorks 2009
  • 2. Agenda • Introduction • What do you need? • Comparisons • Code Demo • Pleasure & Pain • MIA • Why? • Open discussion © ThoughtWorks 2009
  • 3. Introduction • .NET developer since 2004 (WinForms, WebForms, ASP.NET MVC) • C/C++ before that • iPhone development since SDK beta 1 © ThoughtWorks 2009
  • 4. What do you need? Hardware • Mac • Mini - $599 • iMac - $1199 • MacBook - $1299 • MacBook Pro - $1999 • iPod Touch - $229 (8GB) • iPhone 3G • $199 (8GB + 2yr contract) • $599 (8GB + no contract) © ThoughtWorks 2009
  • 5. What do you need? Software • iPhone SDK (require registration but free to download) • iPhone Developer Program • Personal - $99 (ad-hoc deploy to hardware, submit to AppStore) • Enterprise - $299 (Personal + in-house deployment) © ThoughtWorks 2009
  • 6. What do you need? Books • The iPhone Developer Cookbook • Beginning iPhone Development • Beginning Xcode • Programming in Objective-C 2.0 © ThoughtWorks 2009
  • 7. What do you need? Optional Mockup Software – Balsamiq (http://www.balsamiq.com/) – iPhone Mockup (http://iphonemockup.lkmc.ch/) Bucket loads of patience! © ThoughtWorks 2009
  • 8. Language Comparison Objective-C C# Square Brackets + Dot notation Dot notation self.currentPostion = 0.5; this.currentPosition = 0.5; [foodoStuffWith:bar]; foo.DoStuff(bar); Named Parameter Object/Collection Initializer in C# 3.0 [foodoStuffWith:bar atPosition:4]; Named Parameter in C# 4.0 new foo(bar = “ISO”, position = 4); Message Passing Method Invocation Category Extension Method Protocol/Interface Interface/Class Class/Method prefix Namespace C based (header file, pointers) Inline declaration, no pointer Manual Memory Management (in iPhone) GC NSString *foo = [NSStringalloc]; [foo release]; © ThoughtWorks 2009
  • 9. IDE Comparison quot;What is Xcode? It starts as a great source code editor...” and quot;... and also has a nice debugger” - Scott Forstall, Senior VP of iPhone Software © ThoughtWorks 2009
  • 10. IDE Comparison Xcode 3.1 Visual Studio 2008 Text Editor Refactoring UI Design Debugging Profiling Localization © ThoughtWorks 2009
  • 11. Code Demo © ThoughtWorks 2009
  • 12. Pleasure • MVC architecture • SDK’s API o Hit the 80/20 rules o Convention over Configuration  Settings bundle  Application icon © JesperRønn-Jensen • Simulator o Work exactly as the real phone o Except bandwidth, CPU (audio/video), interruptions © ThoughtWorks 2009
  • 13. Pleasure – cont’d • Objective-C language features o Dynamic o Named parameters o Categories o Properties & @synthesize o C-based. Lots of libraries available (e.g. libxml) © ThoughtWorks 2009
  • 14. Pain • Xcode IDE o CodeSense is not that smart o Keyboard shortcuts are strange o Take a while to re-train muscle memory • Interface Builder © deeleea o Good for simple UI, not so for complext UI o Can’t do everything (UITabController and UINavigationController don’t mix well) • Objective-C syntax o [foodoBar] – having to type the square brackets get old very quickly o Header files – What’s this, the 90’s? © ThoughtWorks 2009
  • 15. Pain – cont’d • Memory management o Constraint environment o No GC o Have to remember to release object manually • Debugging o Do I really care about register address? o Erratic behavior • Unit testing framework o OCUnit/Google Toolbox for mac o OCMock © ThoughtWorks 2009
  • 16. Pain – cont’d • Deployment o Require code signing o Opaque approval process o Small(er) developer community o StackOverflow o Google’s your friend! © ThoughtWorks 2009
  • 17. MIA/WIP • DI/IoC container • OR/M – Partly solved by SqlitePersistanceObjects (Google Code) • Build Framework – Use scripts (Rake, shell script) © ThoughtWorks 2009
  • 18. Why learn something so different? • Diversify skills • Expansive API – A/V – Graphics/Animation – Game/Peer to Peer (in 3.0) – Maps (in 3.0) • On most CTOs’ radar • iTuneAppStore – Broad reach – Easy to start © ThoughtWorks 2009
  • 19. Open Discussion ahung@thoughtworks.com Twitter: AlexHung http://alexhung.vox.com Questions? RubyCocoa Mono Feedback © ThoughtWorks 2009