SlideShare uma empresa Scribd logo
1 de 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

Mais conteúdo relacionado

Mais procurados

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
 

Mais procurados (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
 

Semelhante a 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
 

Semelhante a 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
 

Último

Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
08448380779 Call Girls In 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
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
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
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
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 2024Results
 
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 RobisonAnna Loughnan Colquhoun
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilV3cube
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
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
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
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
 
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
 
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.pptxMalak Abu Hammad
 
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
 

Último (20)

Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
08448380779 Call Girls In 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
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
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
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
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
 
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
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
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
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
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
 
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
 
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
 
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
 

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