SlideShare une entreprise Scribd logo
1  sur  46
iPhone Development for
Experienced Web Developers
         SXSW 2009
Who We Are
• Joshua Siler, VP of Technology
• Jordan Lev, Senior Developer

http://www.bnj.com
(Relationship Marketing Agency)
A few of our clients:
Poll

How many people here have
tried native iPhone app
development?
Poll

How many people here have
an online application that
might use an iPhone client?
Session Overview
•   Web developer POV
•   What’s different about iPhone dev
•   Our project, some design decisions
•   Code review and mini-tutorial
What’s Different
Web Developers…
are mad for POWER
iPhoneProcessor
• ~400mhz
  processor, 128mb
  RAM
• 10 to 100 times
  slower processor
  and memory
• Premature
  optimization takes
  on a different
  meaning


                       *
                       http://www.primatelabs.ca/blog/2007/08/gee
Web Latency
Web Latency
Web Latency
Web Latency
Web Latency
iPhone Latency
Latency Management
• Take latency into account during app design
• Asynchronous operations where anything
  takes any kind of time
• Explicitly define wait indicators
• Multithreaded considerations
Tools
•   Must have an Intel powered Mac
•   $99 to join Apple Developer Program
•   Free SDK download, Xcode, Objective C, Cocoa
•   http://developer.apple.com
TIOBE Programming Community Index
TIOBE Programming Community Index
Objective C
• C with OO added
• Totally different than typical Web Languages
  – Pointers
  – Memory Management
     • No garbage collection
  – Non-linear code execution
  – Syntactical… saltiness?
• Language features seem years behind
• Biggest burden to new non-Mac developers
Xcode
Cocoa
• Objective C all low level
• Cocoa is really great
Coming Soon
Our Project
CP Screenshot
Protocols
•   https for secure data transfer
•   Username and password authenticated
•   REST web services interface
•   JSON for returning data
Web Services SOAP (google)
<?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?>
<SOAP-ENV:Envelope
 SOAP-ENV:encodingStyle=quot;http://schemas.xmlsoap.org/soap/encoding/quot;
xmlns:SOAP-ENC=quot;http://schemas.xmlsoap.org/soap/encoding/quot;
xmlns:xsi=quot;http://www.w3.org/1999/XMLSchema-instancequot;
xmlns:SOAP-ENV=quot;http://schemas.xmlsoap.org/soap/envelope/quot;
xmlns:xsd=quot;http://www.w3.org/1999/XMLSchemaquot;
>
<SOAP-ENV:Header>
<developer_emailxsi:type=quot;xsd:stringquot; SOAP-ENC:root=quot;1quot;>INSERT_DEVELOPER_EMAIL_HERE</developer_email>
<display_localexsi:type=quot;xsd:stringquot; SOAP-ENC:root=quot;1quot;>en_US</display_locale>
<developer_passwordxsi:type=quot;xsd:stringquot; SOAP-ENC:root=quot;1quot;>INSERT_PASSWORD_HERE</developer_password>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<ns1:associateAccount xmlns:ns1=quot;http://www.google.com/api/adsense/v3quot; SOAP-ENC:root=quot;1quot;>
<loginEmail>INSERT_PUBLISHER_EMAIL_HERE</loginEmail>
<postalCode>12345</postalCode>
<phone xsi:nil=quot;1quot;/>
<developerUrl>INSERT_DEVELOPER_URL_HERE</developerUrl>
</ns1:associateAccount>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Web Services REST (amazon)
http://rcm.amazon.com/e/cm?t=[Associates ID goes here]
&l=st1&search=[subject keyword goes here]
&mode=[product line goes here]
&p=102&o=1&f=xml
Web Services
• Lightweight approach for mobile is critical
• REST interfaces far more efficient
• JSON for returned data
   – Allows you to serialize objects with known data and
     types
   – Can be 100x faster to parse than XML
   – Significantly fewer control characters and other
     overhead
   – Platform independent, easy to consume
   – http://www.json.org
Architecture Diagram                             Web


                    https; GET websites
 Retrieve List of                                         Provide List of
                    JSON result, [[name,id]…]
    Projects                                                Websites


                                                  Auth
                    https; GET websites?id=
                                                         Provide Data for
Retrieve Data for
                    JSON result, [[key,value]…]              Website
     Project

   Edit/Enter
 Username and
   Password

 Local Storage
App Demo and Mini-Tutorial
Concepts
• MVC
• Events and Delegates
• Interface Builder
Lay of the Land
• AppDelegate
  – (initialization)
• ViewController
  – (one per page)
     • + XIB
• Data Models
Pseudocode
Screen loads
• Controller asks model for data
• Make http request
• Parse JSON (convert it to objects)
• Display data
• Wait for additional events (e.g. button click):
  repeat process with new page
Pseudocode
Screen loads
Controller asks model for data
• Make http request
• Parse JSON (convert it to objects)
• Display data
• Wait for additional events (e.g. button click):
  repeat process with new page
Pseudocode
Screen loads
Controller asks model for data
Make http request
• Parse JSON (convert it to objects)
• Display data
• Wait for additional events (e.g. button click):
  repeat process with new page
Pseudocode
Screen loads
Controller asks model for data
Make http request
Parse JSON (convert it to objects)
• Display data
• Wait for additional events (e.g. button click):
  repeat process with new page
Pseudocode
Screen loads
Controller asks model for data
Make http request
Parse JSON (convert it to objects)
Display data
• Wait for additional events (e.g. button click):
  repeat process with new page
Pseudocode
Screen loads
Controller asks model for data
Make http request
Parse JSON (convert it to objects)
Display data
Wait for additional events (e.g. button click):
 repeat process with new page
Memory Management
• Golden Rule
  – If you alloc/init it, you have to release it.
     • If you’re returning it from a method, autorelease it.
  – If you’re NOT alloc/init’ing it, do NOT release it!
     • Mostly…
• Finding leaks
  – Use “Instruments” application.
Compiling, Testing, Distributing
• Apple developer account required to deploy
  to iPhone
• Simulator can be different than actual device
  operation, be sure to QA thoroughly
• Be prepared for a lengthy process of
  registering, signing, deploying and obtaining
  approval for your app
What We Think
Really Like about iPhone Development
• Incomparable/exciting platform
• Standardized hardware, relatively powerful
  device
• Cocoa and MVC paradigm
• “Bare metal” programming is a refreshing
  change of pace
Really Don’t’ Like
• Objective C, iPhone application model
  – Lots of assumed knowledge and undocumented rules
    to discover
  – Refactoring is difficult
• Xcode
  – Code editor with GCC config… have come to expect
    more
• App deployment
• Flaky connectivity
• Apple controlled domain
Q&A

Contenu connexe

Tendances

Advanced front end debugging with ms edge and ms tools
Advanced front end debugging with ms edge and ms toolsAdvanced front end debugging with ms edge and ms tools
Advanced front end debugging with ms edge and ms toolsChris Love
 
Enough with the javas cript already! de Nicholas Zakas
Enough with the javas cript already! de Nicholas ZakasEnough with the javas cript already! de Nicholas Zakas
Enough with the javas cript already! de Nicholas ZakasKubide
 
Develop a vanilla.js spa you and your customers will love
Develop a vanilla.js spa you and your customers will loveDevelop a vanilla.js spa you and your customers will love
Develop a vanilla.js spa you and your customers will loveChris Love
 
Building Realtime Apps with Ember.js and WebSockets
Building Realtime Apps with Ember.js and WebSocketsBuilding Realtime Apps with Ember.js and WebSockets
Building Realtime Apps with Ember.js and WebSocketsBen Limmer
 
Web automation in BDD
Web automation in BDDWeb automation in BDD
Web automation in BDDSandy Yu
 
GlobalLogic Test Automation Online TechTalk “Playwright — A New Hope”
GlobalLogic Test Automation Online TechTalk “Playwright — A New Hope”GlobalLogic Test Automation Online TechTalk “Playwright — A New Hope”
GlobalLogic Test Automation Online TechTalk “Playwright — A New Hope”GlobalLogic Ukraine
 
Passo a Passo para criar uma aplicação Móvel Híbrida
Passo a Passo para criar uma aplicação Móvel HíbridaPasso a Passo para criar uma aplicação Móvel Híbrida
Passo a Passo para criar uma aplicação Móvel HíbridaJuliano Martins
 
Hacking Movable Type Training - Day 1
Hacking Movable Type Training - Day 1Hacking Movable Type Training - Day 1
Hacking Movable Type Training - Day 1Byrne Reese
 
Hyperlight Websites - Chris Zacharias
Hyperlight Websites - Chris ZachariasHyperlight Websites - Chris Zacharias
Hyperlight Websites - Chris ZachariasChristopher Zacharias
 
2012.sandiego.wordcamp
2012.sandiego.wordcamp2012.sandiego.wordcamp
2012.sandiego.wordcampBrandon Dove
 
State And Ajax Zend Con
State And Ajax   Zend ConState And Ajax   Zend Con
State And Ajax Zend ConZendCon
 
State of jQuery June 2013 - Portland
State of jQuery June 2013 - PortlandState of jQuery June 2013 - Portland
State of jQuery June 2013 - Portlanddmethvin
 
Engage 2019: Modernising Your Domino and XPages Applications
Engage 2019: Modernising Your Domino and XPages Applications Engage 2019: Modernising Your Domino and XPages Applications
Engage 2019: Modernising Your Domino and XPages Applications Paul Withers
 
Operacion Guinda 2
Operacion Guinda 2Operacion Guinda 2
Operacion Guinda 2Red RADAR
 
Front-End Single Point of Failure - Velocity 2016 Training
Front-End Single Point of Failure - Velocity 2016 TrainingFront-End Single Point of Failure - Velocity 2016 Training
Front-End Single Point of Failure - Velocity 2016 TrainingPatrick Meenan
 
Building an HTML5 Video Player
Building an HTML5 Video PlayerBuilding an HTML5 Video Player
Building an HTML5 Video PlayerJim Jeffers
 

Tendances (20)

Advanced front end debugging with ms edge and ms tools
Advanced front end debugging with ms edge and ms toolsAdvanced front end debugging with ms edge and ms tools
Advanced front end debugging with ms edge and ms tools
 
Enough with the javas cript already! de Nicholas Zakas
Enough with the javas cript already! de Nicholas ZakasEnough with the javas cript already! de Nicholas Zakas
Enough with the javas cript already! de Nicholas Zakas
 
Develop a vanilla.js spa you and your customers will love
Develop a vanilla.js spa you and your customers will loveDevelop a vanilla.js spa you and your customers will love
Develop a vanilla.js spa you and your customers will love
 
Building Realtime Apps with Ember.js and WebSockets
Building Realtime Apps with Ember.js and WebSocketsBuilding Realtime Apps with Ember.js and WebSockets
Building Realtime Apps with Ember.js and WebSockets
 
Web automation in BDD
Web automation in BDDWeb automation in BDD
Web automation in BDD
 
Makezine
MakezineMakezine
Makezine
 
GlobalLogic Test Automation Online TechTalk “Playwright — A New Hope”
GlobalLogic Test Automation Online TechTalk “Playwright — A New Hope”GlobalLogic Test Automation Online TechTalk “Playwright — A New Hope”
GlobalLogic Test Automation Online TechTalk “Playwright — A New Hope”
 
Passo a Passo para criar uma aplicação Móvel Híbrida
Passo a Passo para criar uma aplicação Móvel HíbridaPasso a Passo para criar uma aplicação Móvel Híbrida
Passo a Passo para criar uma aplicação Móvel Híbrida
 
Hacking Movable Type Training - Day 1
Hacking Movable Type Training - Day 1Hacking Movable Type Training - Day 1
Hacking Movable Type Training - Day 1
 
Hyperlight Websites - Chris Zacharias
Hyperlight Websites - Chris ZachariasHyperlight Websites - Chris Zacharias
Hyperlight Websites - Chris Zacharias
 
2012.sandiego.wordcamp
2012.sandiego.wordcamp2012.sandiego.wordcamp
2012.sandiego.wordcamp
 
Oracle APEX & PhoneGap
Oracle APEX & PhoneGapOracle APEX & PhoneGap
Oracle APEX & PhoneGap
 
State And Ajax Zend Con
State And Ajax   Zend ConState And Ajax   Zend Con
State And Ajax Zend Con
 
Just another bughunt
Just another bughunt Just another bughunt
Just another bughunt
 
ICEfaces and JSF 2.0 on GlassFish
ICEfaces and JSF 2.0 on GlassFishICEfaces and JSF 2.0 on GlassFish
ICEfaces and JSF 2.0 on GlassFish
 
State of jQuery June 2013 - Portland
State of jQuery June 2013 - PortlandState of jQuery June 2013 - Portland
State of jQuery June 2013 - Portland
 
Engage 2019: Modernising Your Domino and XPages Applications
Engage 2019: Modernising Your Domino and XPages Applications Engage 2019: Modernising Your Domino and XPages Applications
Engage 2019: Modernising Your Domino and XPages Applications
 
Operacion Guinda 2
Operacion Guinda 2Operacion Guinda 2
Operacion Guinda 2
 
Front-End Single Point of Failure - Velocity 2016 Training
Front-End Single Point of Failure - Velocity 2016 TrainingFront-End Single Point of Failure - Velocity 2016 Training
Front-End Single Point of Failure - Velocity 2016 Training
 
Building an HTML5 Video Player
Building an HTML5 Video PlayerBuilding an HTML5 Video Player
Building an HTML5 Video Player
 

Similaire à iPhone Development For Experienced Web Developers

GDD Japan 2009 - Designing OpenSocial Apps For Speed and Scale
GDD Japan 2009 - Designing OpenSocial Apps For Speed and ScaleGDD Japan 2009 - Designing OpenSocial Apps For Speed and Scale
GDD Japan 2009 - Designing OpenSocial Apps For Speed and ScalePatrick Chanezon
 
Intro To Django
Intro To DjangoIntro To Django
Intro To DjangoUdi Bauman
 
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 Enginecatherinewall
 
Building production websites with Node.js on the Microsoft stack
Building production websites with Node.js on the Microsoft stackBuilding production websites with Node.js on the Microsoft stack
Building production websites with Node.js on the Microsoft stackCellarTracker
 
Offline capable web applications with Google Gears and Dojo Offline
Offline capable web applications with Google Gears and Dojo OfflineOffline capable web applications with Google Gears and Dojo Offline
Offline capable web applications with Google Gears and Dojo Offlineguestcb5c22
 
H2O World - Building a Smarter Application - Tom Kraljevic
H2O World - Building a Smarter Application - Tom KraljevicH2O World - Building a Smarter Application - Tom Kraljevic
H2O World - Building a Smarter Application - Tom KraljevicSri Ambati
 
Frank Mantek Google G Data
Frank Mantek Google G DataFrank Mantek Google G Data
Frank Mantek Google G Datadeimos
 
Wes Leonardo - Putting AIR into your Application
Wes Leonardo - Putting AIR into your ApplicationWes Leonardo - Putting AIR into your Application
Wes Leonardo - Putting AIR into your Application360|Conferences
 
Google G Data Reading And Writing Data On The Web
Google G Data Reading And Writing Data On The WebGoogle G Data Reading And Writing Data On The Web
Google G Data Reading And Writing Data On The WebQConLondon2008
 
Google G Data Reading And Writing Data On The Web 1
Google G Data Reading And Writing Data On The Web 1Google G Data Reading And Writing Data On The Web 1
Google G Data Reading And Writing Data On The Web 1QConLondon2008
 
Developing for LinkedIn's Application Platform
Developing for LinkedIn's Application PlatformDeveloping for LinkedIn's Application Platform
Developing for LinkedIn's Application PlatformTaylor Singletary
 
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 Example360|Conferences
 
Mobile is slow - Over the Air 2013
Mobile is slow - Over the Air 2013Mobile is slow - Over the Air 2013
Mobile is slow - Over the Air 2013Jon Arne Sæterås
 
"Progressive Web Apps" by Riza Fahmi (Hacktiv8)
"Progressive Web Apps" by Riza Fahmi	(Hacktiv8)"Progressive Web Apps" by Riza Fahmi	(Hacktiv8)
"Progressive Web Apps" by Riza Fahmi (Hacktiv8)Tech in Asia ID
 
Progressive Web Apps. What, why and how
Progressive Web Apps. What, why and howProgressive Web Apps. What, why and how
Progressive Web Apps. What, why and howRiza Fahmi
 
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
 
The Recording HTTP Proxy: Not Yet Another Messiah - Bulgaria PHP 2019
The Recording HTTP Proxy: Not Yet Another Messiah - Bulgaria PHP 2019The Recording HTTP Proxy: Not Yet Another Messiah - Bulgaria PHP 2019
The Recording HTTP Proxy: Not Yet Another Messiah - Bulgaria PHP 2019Viktor Todorov
 

Similaire à iPhone Development For Experienced Web Developers (20)

GDD Japan 2009 - Designing OpenSocial Apps For Speed and Scale
GDD Japan 2009 - Designing OpenSocial Apps For Speed and ScaleGDD Japan 2009 - Designing OpenSocial Apps For Speed and Scale
GDD Japan 2009 - Designing OpenSocial Apps For Speed and Scale
 
Intro To Django
Intro To DjangoIntro To Django
Intro To Django
 
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
 
Building production websites with Node.js on the Microsoft stack
Building production websites with Node.js on the Microsoft stackBuilding production websites with Node.js on the Microsoft stack
Building production websites with Node.js on the Microsoft stack
 
Offline capable web applications with Google Gears and Dojo Offline
Offline capable web applications with Google Gears and Dojo OfflineOffline capable web applications with Google Gears and Dojo Offline
Offline capable web applications with Google Gears and Dojo Offline
 
H2O World - Building a Smarter Application - Tom Kraljevic
H2O World - Building a Smarter Application - Tom KraljevicH2O World - Building a Smarter Application - Tom Kraljevic
H2O World - Building a Smarter Application - Tom Kraljevic
 
Frank Mantek Google G Data
Frank Mantek Google G DataFrank Mantek Google G Data
Frank Mantek Google G Data
 
Wes Leonardo - Putting AIR into your Application
Wes Leonardo - Putting AIR into your ApplicationWes Leonardo - Putting AIR into your Application
Wes Leonardo - Putting AIR into your Application
 
Google G Data Reading And Writing Data On The Web
Google G Data Reading And Writing Data On The WebGoogle G Data Reading And Writing Data On The Web
Google G Data Reading And Writing Data On The Web
 
Google G Data Reading And Writing Data On The Web 1
Google G Data Reading And Writing Data On The Web 1Google G Data Reading And Writing Data On The Web 1
Google G Data Reading And Writing Data On The Web 1
 
Django 101
Django 101Django 101
Django 101
 
Ajax World West
Ajax World WestAjax World West
Ajax World West
 
Developing for LinkedIn's Application Platform
Developing for LinkedIn's Application PlatformDeveloping for LinkedIn's Application Platform
Developing for LinkedIn's Application Platform
 
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
 
Mobile is slow - Over the Air 2013
Mobile is slow - Over the Air 2013Mobile is slow - Over the Air 2013
Mobile is slow - Over the Air 2013
 
iPhone & Java Web Services
iPhone & Java Web ServicesiPhone & Java Web Services
iPhone & Java Web Services
 
"Progressive Web Apps" by Riza Fahmi (Hacktiv8)
"Progressive Web Apps" by Riza Fahmi	(Hacktiv8)"Progressive Web Apps" by Riza Fahmi	(Hacktiv8)
"Progressive Web Apps" by Riza Fahmi (Hacktiv8)
 
Progressive Web Apps. What, why and how
Progressive Web Apps. What, why and howProgressive Web Apps. What, why and how
Progressive Web Apps. What, why and how
 
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)
 
The Recording HTTP Proxy: Not Yet Another Messiah - Bulgaria PHP 2019
The Recording HTTP Proxy: Not Yet Another Messiah - Bulgaria PHP 2019The Recording HTTP Proxy: Not Yet Another Messiah - Bulgaria PHP 2019
The Recording HTTP Proxy: Not Yet Another Messiah - Bulgaria PHP 2019
 

Dernier

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
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
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 Scriptwesley chun
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
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
 
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
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
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)wesley chun
 
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
 
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...Enterprise Knowledge
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
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
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
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 textsMaria Levchenko
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdflior mazor
 
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
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 

Dernier (20)

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
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
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
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
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
 
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
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
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)
 
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
 
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...
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
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
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
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
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
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
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 

iPhone Development For Experienced Web Developers

  • 1. iPhone Development for Experienced Web Developers SXSW 2009
  • 2. Who We Are • Joshua Siler, VP of Technology • Jordan Lev, Senior Developer http://www.bnj.com (Relationship Marketing Agency) A few of our clients:
  • 3. Poll How many people here have tried native iPhone app development?
  • 4. Poll How many people here have an online application that might use an iPhone client?
  • 5. Session Overview • Web developer POV • What’s different about iPhone dev • Our project, some design decisions • Code review and mini-tutorial
  • 8. iPhoneProcessor • ~400mhz processor, 128mb RAM • 10 to 100 times slower processor and memory • Premature optimization takes on a different meaning * http://www.primatelabs.ca/blog/2007/08/gee
  • 15. Latency Management • Take latency into account during app design • Asynchronous operations where anything takes any kind of time • Explicitly define wait indicators • Multithreaded considerations
  • 16. Tools • Must have an Intel powered Mac • $99 to join Apple Developer Program • Free SDK download, Xcode, Objective C, Cocoa • http://developer.apple.com
  • 19. Objective C • C with OO added • Totally different than typical Web Languages – Pointers – Memory Management • No garbage collection – Non-linear code execution – Syntactical… saltiness? • Language features seem years behind • Biggest burden to new non-Mac developers
  • 20. Xcode
  • 21. Cocoa • Objective C all low level • Cocoa is really great
  • 25. Protocols • https for secure data transfer • Username and password authenticated • REST web services interface • JSON for returning data
  • 26. Web Services SOAP (google) <?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?> <SOAP-ENV:Envelope SOAP-ENV:encodingStyle=quot;http://schemas.xmlsoap.org/soap/encoding/quot; xmlns:SOAP-ENC=quot;http://schemas.xmlsoap.org/soap/encoding/quot; xmlns:xsi=quot;http://www.w3.org/1999/XMLSchema-instancequot; xmlns:SOAP-ENV=quot;http://schemas.xmlsoap.org/soap/envelope/quot; xmlns:xsd=quot;http://www.w3.org/1999/XMLSchemaquot; > <SOAP-ENV:Header> <developer_emailxsi:type=quot;xsd:stringquot; SOAP-ENC:root=quot;1quot;>INSERT_DEVELOPER_EMAIL_HERE</developer_email> <display_localexsi:type=quot;xsd:stringquot; SOAP-ENC:root=quot;1quot;>en_US</display_locale> <developer_passwordxsi:type=quot;xsd:stringquot; SOAP-ENC:root=quot;1quot;>INSERT_PASSWORD_HERE</developer_password> </SOAP-ENV:Header> <SOAP-ENV:Body> <ns1:associateAccount xmlns:ns1=quot;http://www.google.com/api/adsense/v3quot; SOAP-ENC:root=quot;1quot;> <loginEmail>INSERT_PUBLISHER_EMAIL_HERE</loginEmail> <postalCode>12345</postalCode> <phone xsi:nil=quot;1quot;/> <developerUrl>INSERT_DEVELOPER_URL_HERE</developerUrl> </ns1:associateAccount> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
  • 27. Web Services REST (amazon) http://rcm.amazon.com/e/cm?t=[Associates ID goes here] &l=st1&search=[subject keyword goes here] &mode=[product line goes here] &p=102&o=1&f=xml
  • 28. Web Services • Lightweight approach for mobile is critical • REST interfaces far more efficient • JSON for returned data – Allows you to serialize objects with known data and types – Can be 100x faster to parse than XML – Significantly fewer control characters and other overhead – Platform independent, easy to consume – http://www.json.org
  • 29. Architecture Diagram Web https; GET websites Retrieve List of Provide List of JSON result, [[name,id]…] Projects Websites Auth https; GET websites?id= Provide Data for Retrieve Data for JSON result, [[key,value]…] Website Project Edit/Enter Username and Password Local Storage
  • 30. App Demo and Mini-Tutorial
  • 31. Concepts • MVC • Events and Delegates • Interface Builder
  • 32.
  • 33. Lay of the Land • AppDelegate – (initialization) • ViewController – (one per page) • + XIB • Data Models
  • 34. Pseudocode Screen loads • Controller asks model for data • Make http request • Parse JSON (convert it to objects) • Display data • Wait for additional events (e.g. button click): repeat process with new page
  • 35. Pseudocode Screen loads Controller asks model for data • Make http request • Parse JSON (convert it to objects) • Display data • Wait for additional events (e.g. button click): repeat process with new page
  • 36. Pseudocode Screen loads Controller asks model for data Make http request • Parse JSON (convert it to objects) • Display data • Wait for additional events (e.g. button click): repeat process with new page
  • 37. Pseudocode Screen loads Controller asks model for data Make http request Parse JSON (convert it to objects) • Display data • Wait for additional events (e.g. button click): repeat process with new page
  • 38. Pseudocode Screen loads Controller asks model for data Make http request Parse JSON (convert it to objects) Display data • Wait for additional events (e.g. button click): repeat process with new page
  • 39. Pseudocode Screen loads Controller asks model for data Make http request Parse JSON (convert it to objects) Display data Wait for additional events (e.g. button click): repeat process with new page
  • 40. Memory Management • Golden Rule – If you alloc/init it, you have to release it. • If you’re returning it from a method, autorelease it. – If you’re NOT alloc/init’ing it, do NOT release it! • Mostly… • Finding leaks – Use “Instruments” application.
  • 41.
  • 42. Compiling, Testing, Distributing • Apple developer account required to deploy to iPhone • Simulator can be different than actual device operation, be sure to QA thoroughly • Be prepared for a lengthy process of registering, signing, deploying and obtaining approval for your app
  • 44. Really Like about iPhone Development • Incomparable/exciting platform • Standardized hardware, relatively powerful device • Cocoa and MVC paradigm • “Bare metal” programming is a refreshing change of pace
  • 45. Really Don’t’ Like • Objective C, iPhone application model – Lots of assumed knowledge and undocumented rules to discover – Refactoring is difficult • Xcode – Code editor with GCC config… have come to expect more • App deployment • Flaky connectivity • Apple controlled domain
  • 46. Q&A