SlideShare une entreprise Scribd logo
1  sur  46
Télécharger pour lire hors ligne
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. 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
 
"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
 
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. What, why and how
Progressive Web Apps. What, why and howProgressive Web Apps. What, why and how
Progressive Web Apps. What, why and how
 
"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)
 
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

Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterMydbops
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Mark Goldstein
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesKari Kakkonen
 
QCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesQCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesBernd Ruecker
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfpanagenda
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality AssuranceInflectra
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch TuesdayIvanti
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPathCommunity
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersNicole Novielli
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Nikki Chapple
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxGenerative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxfnnc6jmgwh
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
Varsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
Varsha Sewlal- Cyber Attacks on Critical Critical InfrastructureVarsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
Varsha Sewlal- Cyber Attacks on Critical Critical Infrastructureitnewsafrica
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 

Dernier (20)

Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL Router
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examples
 
QCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesQCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architectures
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch Tuesday
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to Hero
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software Developers
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxGenerative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
Varsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
Varsha Sewlal- Cyber Attacks on Critical Critical InfrastructureVarsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
Varsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 

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