SlideShare a Scribd company logo
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

More Related Content

What's hot

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
Chris 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 Zakas
Kubide
 
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
Chris 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
Ben Limmer
 
Web automation in BDD
Web automation in BDDWeb automation in BDD
Web automation in BDD
Sandy 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íbrida
Juliano Martins
 
Hacking Movable Type Training - Day 1
Hacking Movable Type Training - Day 1Hacking Movable Type Training - Day 1
Hacking Movable Type Training - Day 1
Byrne Reese
 
Hyperlight Websites - Chris Zacharias
Hyperlight Websites - Chris ZachariasHyperlight Websites - Chris Zacharias
Hyperlight Websites - Chris Zacharias
Christopher 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 Con
ZendCon
 
Just another bughunt
Just another bughunt Just another bughunt
Just another bughunt
Charles Fulton
 
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
Eduardo Pelegri-Llopart
 
State of jQuery June 2013 - Portland
State of jQuery June 2013 - PortlandState of jQuery June 2013 - Portland
State of jQuery June 2013 - Portland
dmethvin
 
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 2
Red 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 Training
Patrick Meenan
 
Building an HTML5 Video Player
Building an HTML5 Video PlayerBuilding an HTML5 Video Player
Building an HTML5 Video Player
Jim Jeffers
 

What's hot (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
 

Similar to 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 Scale
Patrick Chanezon
 
Intro To Django
Intro To DjangoIntro To Django
Intro To Django
Udi 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 Engine
catherinewall
 
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
CellarTracker
 
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
guestcb5c22
 
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
Sri 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 Application
360|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
 
Django 101
Django 101Django 101
Django 101
Robert Coup
 
Developing for LinkedIn's Application Platform
Developing for LinkedIn's Application PlatformDeveloping for LinkedIn's Application Platform
Developing for LinkedIn's Application Platform
Taylor 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 Example
360|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 2013
Jon Arne Sæterås
 
iPhone & Java Web Services
iPhone & Java Web ServicesiPhone & Java Web Services
iPhone & Java Web Services
Matthew McCullough
 
"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 how
Riza 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 2019
Viktor Todorov
 

Similar to 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
 

Recently uploaded

GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
Guy Korland
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
Cheryl Hung
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
Alan Dix
 
Assuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyesAssuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyes
ThousandEyes
 
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
Product School
 
Connector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a buttonConnector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a button
DianaGray10
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
Product School
 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance
 
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMsTo Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
Paul Groth
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
DianaGray10
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
James Anderson
 
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Jeffrey Haguewood
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
BookNet Canada
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Product School
 
ODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User GroupODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User Group
CatarinaPereira64715
 
JMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and GrafanaJMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and Grafana
RTTS
 
Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........
Alison B. Lowndes
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Product School
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
Prayukth K V
 
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Product School
 

Recently uploaded (20)

GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
 
Assuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyesAssuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyes
 
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
 
Connector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a buttonConnector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a button
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
 
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMsTo Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
 
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
 
ODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User GroupODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User Group
 
JMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and GrafanaJMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and Grafana
 
Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
 
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...
 

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