SlideShare a Scribd company logo
1 of 61
Download to read offline
Adventures in cross-platform 
Jason Kneen
ADVENTURESADVENTURES 
in cross-platform
Jason Kneen 
App Developer, TCE Certified “Titan” 
http://bouncingfish.com 
http://twitter/jasonkneen 
http://github.com/jasonkneen 
http://jasonified.com
Apps
My Work 
StoneHenge 
Audio Tour 
The Great British 
Bee Count SportsBlog
The Great British Bee Count 
• Find, photograph identify Bees 
• iOS and Android 
• Ti Alloy 
• Custom UI 
• Featured on BBC SpringWatch
Things I’ve learnt
Things I’ve learnt 
am still 
learning
Clients
“We’d like an app like Instagram, can 
you give me a cost?” 
“It’s like Twitter but location 
based” 
“It’s basically our 
web site, in an 
app” 
“We need to wrap 
a flash app in a 
native wrapper”
I break down costs
I break down costs… 
• Split pricing by function, platform 
• Factor in time for platform, form 
factors, device specific issues 
• Include costs for App builds, beta 
distribution and Appstore 
submissions (and resubmissions) 
•Watch out for 3rd party dependancies 
(APIs etc)
Working with designers
Working with Designers… 
•They (mostly) use Apple devices 
•They (usually) don’t understand mobile 
•They (usually) don’t get platform UI 
conventions / differences 
•They (all) think a “small change” is 
easy / free
“We’d like the iOS TabGroup on Android” 
“What size should the App Avatar be?” 
“Can we have a Quit 
button to exit the 
app in iOS?” 
“That’s just a 5 minute 
job right?” 
“Can you tell me all the image 
sizes you need for Android?” 
“I’ve put the images in 
“/retina” and “/non-retina“ 
folders” “I’ve sent you a layered- 
PSD with the images”
Retina Dimensions 
References PSDs 
Designed for iOS No font details 
I typically get this.
You can’t split retina pixels!
Solution?
Working with designers… 
• Explain OS differences 
(Navigation, TabGroups, back 
buttons, ActionBar) 
• Inform (Retina, DPs, Densities) 
• Give examples / links to tools 
• Send them the images folder 
structure to work with
Testing
Testing on Android… 
• HDPI, LDPI, 
different devices etc. 
• Multiple versions 
• “Crapware” (HTC, 
Samsung) 
• I buy devices, and 
develop ONLY for 
Android 4.0+
iOS isn’t 
fragmented right?
Testing on iOS… 
@2x 
• iPhone 3.5” Retina 
• iPhone 3.5” Non- 
Retina 
• iPhone 4” 
• iPhone 4.7” 
• iPhone 5.5” 
• iPad 
• iPad Retina 
• iPad Mini 
• iPad Mini Retina 
@3x
Deployment
I deliver Over The Air… 
• http://Installrapp.com 
•Watch those device limits! 
• Use the clients account! 
• Build and deploy early 
• Simple / easy to update
When it’s time to publish… 
• Use client Appstore / Play Store 
accounts 
• iTunesConnect settings 
• Advise on review times for new / 
updated apps 
• Get Paid! 
•Get Paid!
Google Play limitations 
• Google Play limited to 50mb 
• Expansion files support larger apps 
• Titanium now supports OBB files 
http://github.com/jasonkneen/ 
TiExpansionFiles
Emulation
Using the Android SDK Emulator
I use GenyMotion… 
• Free, easy and cheap to license 
• Fast (VERY FAST) 
• Google APIs, Play support, simple 
“hack” 
• Great GPS, Mapping tools 
• Android first
I use TiShadow (or Liveview)… 
• No (full) rebuild required 
• Simulator, device, multiple devices at the same 
time 
• Makes cross-platform SO easy 
• Avoid getting “locked in” to one OS 
• But, there be dragons!
Cross-platform development before Alloy
I use Alloy… 
• Separation of logic & UI 
• selectors and conditional code 
or platform, FormFactor 
• Only includes the platform 
specific assets, styles, code in 
your builds 
• uses CommonJS 
• Makes cross-platform WAY easier
I’m <BatMan/>! 
Cross-platform development after Alloy
Platforms & Screens
I use app.tss…
I use app.tss… 
• Build layouts on both platforms first 
• app.tss for global classes 
• “reset” for Android 
• Platform specific overrides 
• Simple XML, <Button class=“wide green rounded”/>
Yep, if you don’t count 
Top, Bottom, Left, Right
I build flexible layouts… 
• Every screen has a Top, Left, 
Bottom, and Right 
• Avoid fixed widths / heights 
• Ti.UI.SIZE & Ti.UI.FILL 
• Use dp (ti.ui.defaultunit) 
• %age and fluid layouts 
• Dynamic buttons
I keep density simple… 
• Can be very granular 
• Long, NotLong, Landscape, 
Portrait 
• Keep it simple 
• Use retina images for xhdpi 
(3x retina === xxhdpi)
I use TiCons… 
• Create a base 1024 x 1024 icon 
• Auto-generate icons (http:// 
ticons.fokkezb.nl/) 
• The CLI can generate density 
images from retina ones 
• icons, assets, splash screens 
• Updated for iPhone 6 / 3x
I create density assets from 
Retina images…* 
'res-mdpi' => "0.5", 
'res-hdpi' => "0.75", 
'res-xhdpi' => "1", 
'res-xxhdpi' => "1.5", 
'res-xxxhdpi' => "2" 
*when I have to 
http://ticons.fokkezb.nl/
I use 9-Patch images… 
• iOS style stretchable images 
on Android 
• Splash screens 
• Android version of leftCap, 
topCap 
• Editor built-in to Android 
SDK 
• http://9patch.fokkezb.nl/
I optimise the $h!t out of Android… 
• Reduce “over the bridge” calls 
• TableViews - classname (Android speed bump) 
• or better still, use ListViews 
• ImageViews vs Views 
• Reduce views, especially in tables / repeating 
elements and especially nested views
I use Instruments… 
• If my app is leaking, it’s leaking 
on everything 
• Instruments is iOS only 
• DDMS for Android specific 
leaks / memory usage 
“Rick Blalock: Your Apps are Leaking” 
https://vimeo.com/29804284
I use ScrollableViews… 
• Views = screens 
• Swipe between views (great for prototyping) 
• Simple view stack management 
• Super-fast and smooth animation on Android 
• Useful when building UI layouts with apps
I use base controllers… 
• Simple “inheritance” for Alloy Controllers 
• Re-use controllers, views 
• Create cross-platform template wrappers
I also use Alloy templates… 
• <require src=“controllerName”/> 
• Alloy supports require/widgets with children 
• Create a wrapper template controller
I create/override Alloy tags… 
• Little-known feature of Alloy 
• <View module=“modulename”/> 
• Override Alloy Tags to provide per-platform support 
• Create your own tags! 
• Not a replacement for Widgets, just different
I create/override Alloy tags… 
A two-way slide menu in Alloy
I create/override Alloy tags… 
• Just drop into the XML 
• Specify Left/Right Menu 
• Works!
Custom Tag Demo
“Module” attribute… 
• TitleControl - full implementation for iOS and 
Android 
• TabGroup - iOS style TabGroup for Android 
• CheckBox, SlideMenu for both iOS/Android 
• AttributedString for iOS, falls back to HTML for 
Android 
• But be careful…and tidy up after you
In summary… 
• Separate costs, use client dev accounts, get paid 
• Help designers - you’re they’re only hope 
• Test on real devices - buy everything! 
• Create flexible layouts, use constants, device info 
• Use Genymotion! 
• Deliver apps over-the-air 
• Use Alloy, templates, create or re-write Alloy tags 
• Test your apps for memory leaks
One more thing… 
• TiDev.io 
• News, Articles 
• Tips / Advice 
• twitter.com/tidevio
Thank you! 
http://bouncingfish.com 
http://twitter/jasonkneen 
http://github.com/jasonkneen 
http://jasonified.com

More Related Content

What's hot

Adobe and the Flash Gaming Landscape
Adobe and the Flash Gaming LandscapeAdobe and the Flash Gaming Landscape
Adobe and the Flash Gaming LandscapeJoseph Labrecque
 
Advanced Android Design Implementation
Advanced Android Design ImplementationAdvanced Android Design Implementation
Advanced Android Design ImplementationTack Mobile
 
Deploy All The Games
Deploy All The GamesDeploy All The Games
Deploy All The GamesAdam Hill
 
W3C HTML5 KIG-The near future of the web platform
 W3C HTML5 KIG-The near future of the web platform W3C HTML5 KIG-The near future of the web platform
W3C HTML5 KIG-The near future of the web platformChanghwan Yi
 
Bridging worlds: Avatar Idenitity
Bridging worlds: Avatar IdenitityBridging worlds: Avatar Idenitity
Bridging worlds: Avatar IdenitityDavid Fliesen
 
From Unity3D to Unreal Engine 4
From Unity3D to Unreal Engine 4From Unity3D to Unreal Engine 4
From Unity3D to Unreal Engine 4Martin Pernica
 
Teacher Training Workshop - Game Development with Phaser
Teacher Training Workshop  - Game Development with PhaserTeacher Training Workshop  - Game Development with Phaser
Teacher Training Workshop - Game Development with PhaserPablo Farías Navarro
 
GDC Europe 2014: Unreal Engine 4 for Programmers - Lessons Learned & Things t...
GDC Europe 2014: Unreal Engine 4 for Programmers - Lessons Learned & Things t...GDC Europe 2014: Unreal Engine 4 for Programmers - Lessons Learned & Things t...
GDC Europe 2014: Unreal Engine 4 for Programmers - Lessons Learned & Things t...Gerke Max Preussner
 
Future of unreal
Future of unreal Future of unreal
Future of unreal Ning Hu
 
Unity3D Tips and Tricks or "You are doing it wrong!"
Unity3D Tips and Tricks or "You are doing it wrong!"Unity3D Tips and Tricks or "You are doing it wrong!"
Unity3D Tips and Tricks or "You are doing it wrong!"Taras Leskiv
 
Unty3D Awesome Assets - uTomate
Unty3D Awesome Assets - uTomateUnty3D Awesome Assets - uTomate
Unty3D Awesome Assets - uTomateTaras Leskiv
 
HTML5 Mobile Game Development Workshop - Module 2 - HTML5 Developer Conferenc...
HTML5 Mobile Game Development Workshop - Module 2 - HTML5 Developer Conferenc...HTML5 Mobile Game Development Workshop - Module 2 - HTML5 Developer Conferenc...
HTML5 Mobile Game Development Workshop - Module 2 - HTML5 Developer Conferenc...Pablo Farías Navarro
 
Intro to Flash 8 welcome & course outline (2008)
Intro to Flash 8 welcome & course outline (2008)Intro to Flash 8 welcome & course outline (2008)
Intro to Flash 8 welcome & course outline (2008)Matteo Wyllyamz
 

What's hot (15)

Adobe and the Flash Gaming Landscape
Adobe and the Flash Gaming LandscapeAdobe and the Flash Gaming Landscape
Adobe and the Flash Gaming Landscape
 
Advanced Android Design Implementation
Advanced Android Design ImplementationAdvanced Android Design Implementation
Advanced Android Design Implementation
 
Deploy All The Games
Deploy All The GamesDeploy All The Games
Deploy All The Games
 
W3C HTML5 KIG-The near future of the web platform
 W3C HTML5 KIG-The near future of the web platform W3C HTML5 KIG-The near future of the web platform
W3C HTML5 KIG-The near future of the web platform
 
Bridging worlds: Avatar Idenitity
Bridging worlds: Avatar IdenitityBridging worlds: Avatar Idenitity
Bridging worlds: Avatar Idenitity
 
From Unity3D to Unreal Engine 4
From Unity3D to Unreal Engine 4From Unity3D to Unreal Engine 4
From Unity3D to Unreal Engine 4
 
Teacher Training Workshop - Game Development with Phaser
Teacher Training Workshop  - Game Development with PhaserTeacher Training Workshop  - Game Development with Phaser
Teacher Training Workshop - Game Development with Phaser
 
GDC Europe 2014: Unreal Engine 4 for Programmers - Lessons Learned & Things t...
GDC Europe 2014: Unreal Engine 4 for Programmers - Lessons Learned & Things t...GDC Europe 2014: Unreal Engine 4 for Programmers - Lessons Learned & Things t...
GDC Europe 2014: Unreal Engine 4 for Programmers - Lessons Learned & Things t...
 
fpadvanced
fpadvancedfpadvanced
fpadvanced
 
Future of unreal
Future of unreal Future of unreal
Future of unreal
 
Unity3D Tips and Tricks or "You are doing it wrong!"
Unity3D Tips and Tricks or "You are doing it wrong!"Unity3D Tips and Tricks or "You are doing it wrong!"
Unity3D Tips and Tricks or "You are doing it wrong!"
 
Unty3D Awesome Assets - uTomate
Unty3D Awesome Assets - uTomateUnty3D Awesome Assets - uTomate
Unty3D Awesome Assets - uTomate
 
HTML5 Mobile Game Development Workshop - Module 2 - HTML5 Developer Conferenc...
HTML5 Mobile Game Development Workshop - Module 2 - HTML5 Developer Conferenc...HTML5 Mobile Game Development Workshop - Module 2 - HTML5 Developer Conferenc...
HTML5 Mobile Game Development Workshop - Module 2 - HTML5 Developer Conferenc...
 
Mocast Postmortem
Mocast PostmortemMocast Postmortem
Mocast Postmortem
 
Intro to Flash 8 welcome & course outline (2008)
Intro to Flash 8 welcome & course outline (2008)Intro to Flash 8 welcome & course outline (2008)
Intro to Flash 8 welcome & course outline (2008)
 

Similar to Adventures in cross platform ConnectJS / TiConnect 2014

Appcelerator Titanium Intro
Appcelerator Titanium IntroAppcelerator Titanium Intro
Appcelerator Titanium IntroNicholas Jansma
 
Getting started with Appcelerator Titanium
Getting started with Appcelerator TitaniumGetting started with Appcelerator Titanium
Getting started with Appcelerator TitaniumTechday7
 
Getting started with titanium
Getting started with titaniumGetting started with titanium
Getting started with titaniumNaga Harish M
 
Dnn connect dnnmobi-slides
Dnn connect dnnmobi-slidesDnn connect dnnmobi-slides
Dnn connect dnnmobi-slidesashishpd
 
Appium Overview - by Daniel Puterman
Appium Overview - by Daniel PutermanAppium Overview - by Daniel Puterman
Appium Overview - by Daniel PutermanApplitools
 
Froyo to kit kat two years developing & maintaining deliradio
Froyo to kit kat   two years developing & maintaining deliradioFroyo to kit kat   two years developing & maintaining deliradio
Froyo to kit kat two years developing & maintaining deliradioDroidcon Berlin
 
Browser Developer Tools for APEX Developers
Browser Developer Tools for APEX DevelopersBrowser Developer Tools for APEX Developers
Browser Developer Tools for APEX DevelopersChristian Rokitta
 
Introduction to Cross Platform Development with Xamarin/ Visual Studio
Introduction to Cross Platform Development with Xamarin/ Visual StudioIntroduction to Cross Platform Development with Xamarin/ Visual Studio
Introduction to Cross Platform Development with Xamarin/ Visual StudioIndyMobileNetDev
 
Building your first android app using Xamarin
Building your first android app using XamarinBuilding your first android app using Xamarin
Building your first android app using XamarinGill Cleeren
 
Android development - the basics, MFF UK, 2013
Android development - the basics, MFF UK, 2013Android development - the basics, MFF UK, 2013
Android development - the basics, MFF UK, 2013Tomáš Kypta
 
FI MUNI 2012 - iOS Basics
FI MUNI 2012 - iOS BasicsFI MUNI 2012 - iOS Basics
FI MUNI 2012 - iOS BasicsPetr Dvorak
 
Native Script Overview
Native Script OverviewNative Script Overview
Native Script OverviewBaskar rao Dsn
 
Modeveast Appcelerator Presentation
Modeveast Appcelerator PresentationModeveast Appcelerator Presentation
Modeveast Appcelerator PresentationAaron Saunders
 
Native script overview
Native script overviewNative script overview
Native script overviewBaskar rao Dsn
 
Doug McCune - Using Open Source Flex and ActionScript Projects
Doug McCune - Using Open Source Flex and ActionScript ProjectsDoug McCune - Using Open Source Flex and ActionScript Projects
Doug McCune - Using Open Source Flex and ActionScript ProjectsDoug McCune
 
Building High Quality Android Applications
Building High Quality Android ApplicationsBuilding High Quality Android Applications
Building High Quality Android ApplicationsLeif Janzik
 

Similar to Adventures in cross platform ConnectJS / TiConnect 2014 (20)

Appcelerator Titanium Intro
Appcelerator Titanium IntroAppcelerator Titanium Intro
Appcelerator Titanium Intro
 
Intro to appcelerator
Intro to appceleratorIntro to appcelerator
Intro to appcelerator
 
Getting started with Appcelerator Titanium
Getting started with Appcelerator TitaniumGetting started with Appcelerator Titanium
Getting started with Appcelerator Titanium
 
Getting started with titanium
Getting started with titaniumGetting started with titanium
Getting started with titanium
 
Mobile native-hacks
Mobile native-hacksMobile native-hacks
Mobile native-hacks
 
Titanium Alloy Tutorial
Titanium Alloy TutorialTitanium Alloy Tutorial
Titanium Alloy Tutorial
 
Dnn connect dnnmobi-slides
Dnn connect dnnmobi-slidesDnn connect dnnmobi-slides
Dnn connect dnnmobi-slides
 
Appium Overview - by Daniel Puterman
Appium Overview - by Daniel PutermanAppium Overview - by Daniel Puterman
Appium Overview - by Daniel Puterman
 
Froyo to kit kat two years developing & maintaining deliradio
Froyo to kit kat   two years developing & maintaining deliradioFroyo to kit kat   two years developing & maintaining deliradio
Froyo to kit kat two years developing & maintaining deliradio
 
Browser Developer Tools for APEX Developers
Browser Developer Tools for APEX DevelopersBrowser Developer Tools for APEX Developers
Browser Developer Tools for APEX Developers
 
Introduction to Cross Platform Development with Xamarin/ Visual Studio
Introduction to Cross Platform Development with Xamarin/ Visual StudioIntroduction to Cross Platform Development with Xamarin/ Visual Studio
Introduction to Cross Platform Development with Xamarin/ Visual Studio
 
Building your first android app using Xamarin
Building your first android app using XamarinBuilding your first android app using Xamarin
Building your first android app using Xamarin
 
Android development - the basics, MFF UK, 2013
Android development - the basics, MFF UK, 2013Android development - the basics, MFF UK, 2013
Android development - the basics, MFF UK, 2013
 
Xamarin tools
Xamarin toolsXamarin tools
Xamarin tools
 
FI MUNI 2012 - iOS Basics
FI MUNI 2012 - iOS BasicsFI MUNI 2012 - iOS Basics
FI MUNI 2012 - iOS Basics
 
Native Script Overview
Native Script OverviewNative Script Overview
Native Script Overview
 
Modeveast Appcelerator Presentation
Modeveast Appcelerator PresentationModeveast Appcelerator Presentation
Modeveast Appcelerator Presentation
 
Native script overview
Native script overviewNative script overview
Native script overview
 
Doug McCune - Using Open Source Flex and ActionScript Projects
Doug McCune - Using Open Source Flex and ActionScript ProjectsDoug McCune - Using Open Source Flex and ActionScript Projects
Doug McCune - Using Open Source Flex and ActionScript Projects
 
Building High Quality Android Applications
Building High Quality Android ApplicationsBuilding High Quality Android Applications
Building High Quality Android Applications
 

Recently uploaded

DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
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
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 

Recently uploaded (20)

DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
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
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 

Adventures in cross platform ConnectJS / TiConnect 2014

  • 3. Jason Kneen App Developer, TCE Certified “Titan” http://bouncingfish.com http://twitter/jasonkneen http://github.com/jasonkneen http://jasonified.com
  • 4.
  • 6. My Work StoneHenge Audio Tour The Great British Bee Count SportsBlog
  • 7. The Great British Bee Count • Find, photograph identify Bees • iOS and Android • Ti Alloy • Custom UI • Featured on BBC SpringWatch
  • 9. Things I’ve learnt am still learning
  • 11. “We’d like an app like Instagram, can you give me a cost?” “It’s like Twitter but location based” “It’s basically our web site, in an app” “We need to wrap a flash app in a native wrapper”
  • 12. I break down costs
  • 13. I break down costs… • Split pricing by function, platform • Factor in time for platform, form factors, device specific issues • Include costs for App builds, beta distribution and Appstore submissions (and resubmissions) •Watch out for 3rd party dependancies (APIs etc)
  • 15. Working with Designers… •They (mostly) use Apple devices •They (usually) don’t understand mobile •They (usually) don’t get platform UI conventions / differences •They (all) think a “small change” is easy / free
  • 16. “We’d like the iOS TabGroup on Android” “What size should the App Avatar be?” “Can we have a Quit button to exit the app in iOS?” “That’s just a 5 minute job right?” “Can you tell me all the image sizes you need for Android?” “I’ve put the images in “/retina” and “/non-retina“ folders” “I’ve sent you a layered- PSD with the images”
  • 17. Retina Dimensions References PSDs Designed for iOS No font details I typically get this.
  • 18. You can’t split retina pixels!
  • 20. Working with designers… • Explain OS differences (Navigation, TabGroups, back buttons, ActionBar) • Inform (Retina, DPs, Densities) • Give examples / links to tools • Send them the images folder structure to work with
  • 21.
  • 23.
  • 24. Testing on Android… • HDPI, LDPI, different devices etc. • Multiple versions • “Crapware” (HTC, Samsung) • I buy devices, and develop ONLY for Android 4.0+
  • 26. Testing on iOS… @2x • iPhone 3.5” Retina • iPhone 3.5” Non- Retina • iPhone 4” • iPhone 4.7” • iPhone 5.5” • iPad • iPad Retina • iPad Mini • iPad Mini Retina @3x
  • 28. I deliver Over The Air… • http://Installrapp.com •Watch those device limits! • Use the clients account! • Build and deploy early • Simple / easy to update
  • 29. When it’s time to publish… • Use client Appstore / Play Store accounts • iTunesConnect settings • Advise on review times for new / updated apps • Get Paid! •Get Paid!
  • 30. Google Play limitations • Google Play limited to 50mb • Expansion files support larger apps • Titanium now supports OBB files http://github.com/jasonkneen/ TiExpansionFiles
  • 32. Using the Android SDK Emulator
  • 33. I use GenyMotion… • Free, easy and cheap to license • Fast (VERY FAST) • Google APIs, Play support, simple “hack” • Great GPS, Mapping tools • Android first
  • 34. I use TiShadow (or Liveview)… • No (full) rebuild required • Simulator, device, multiple devices at the same time • Makes cross-platform SO easy • Avoid getting “locked in” to one OS • But, there be dragons!
  • 36. I use Alloy… • Separation of logic & UI • selectors and conditional code or platform, FormFactor • Only includes the platform specific assets, styles, code in your builds • uses CommonJS • Makes cross-platform WAY easier
  • 37. I’m <BatMan/>! Cross-platform development after Alloy
  • 40. I use app.tss… • Build layouts on both platforms first • app.tss for global classes • “reset” for Android • Platform specific overrides • Simple XML, <Button class=“wide green rounded”/>
  • 41. Yep, if you don’t count Top, Bottom, Left, Right
  • 42. I build flexible layouts… • Every screen has a Top, Left, Bottom, and Right • Avoid fixed widths / heights • Ti.UI.SIZE & Ti.UI.FILL • Use dp (ti.ui.defaultunit) • %age and fluid layouts • Dynamic buttons
  • 43. I keep density simple… • Can be very granular • Long, NotLong, Landscape, Portrait • Keep it simple • Use retina images for xhdpi (3x retina === xxhdpi)
  • 44. I use TiCons… • Create a base 1024 x 1024 icon • Auto-generate icons (http:// ticons.fokkezb.nl/) • The CLI can generate density images from retina ones • icons, assets, splash screens • Updated for iPhone 6 / 3x
  • 45. I create density assets from Retina images…* 'res-mdpi' => "0.5", 'res-hdpi' => "0.75", 'res-xhdpi' => "1", 'res-xxhdpi' => "1.5", 'res-xxxhdpi' => "2" *when I have to http://ticons.fokkezb.nl/
  • 46. I use 9-Patch images… • iOS style stretchable images on Android • Splash screens • Android version of leftCap, topCap • Editor built-in to Android SDK • http://9patch.fokkezb.nl/
  • 47. I optimise the $h!t out of Android… • Reduce “over the bridge” calls • TableViews - classname (Android speed bump) • or better still, use ListViews • ImageViews vs Views • Reduce views, especially in tables / repeating elements and especially nested views
  • 48. I use Instruments… • If my app is leaking, it’s leaking on everything • Instruments is iOS only • DDMS for Android specific leaks / memory usage “Rick Blalock: Your Apps are Leaking” https://vimeo.com/29804284
  • 49. I use ScrollableViews… • Views = screens • Swipe between views (great for prototyping) • Simple view stack management • Super-fast and smooth animation on Android • Useful when building UI layouts with apps
  • 50. I use base controllers… • Simple “inheritance” for Alloy Controllers • Re-use controllers, views • Create cross-platform template wrappers
  • 51. I also use Alloy templates… • <require src=“controllerName”/> • Alloy supports require/widgets with children • Create a wrapper template controller
  • 52. I create/override Alloy tags… • Little-known feature of Alloy • <View module=“modulename”/> • Override Alloy Tags to provide per-platform support • Create your own tags! • Not a replacement for Widgets, just different
  • 53. I create/override Alloy tags… A two-way slide menu in Alloy
  • 54. I create/override Alloy tags… • Just drop into the XML • Specify Left/Right Menu • Works!
  • 56. “Module” attribute… • TitleControl - full implementation for iOS and Android • TabGroup - iOS style TabGroup for Android • CheckBox, SlideMenu for both iOS/Android • AttributedString for iOS, falls back to HTML for Android • But be careful…and tidy up after you
  • 57.
  • 58. In summary… • Separate costs, use client dev accounts, get paid • Help designers - you’re they’re only hope • Test on real devices - buy everything! • Create flexible layouts, use constants, device info • Use Genymotion! • Deliver apps over-the-air • Use Alloy, templates, create or re-write Alloy tags • Test your apps for memory leaks
  • 59. One more thing… • TiDev.io • News, Articles • Tips / Advice • twitter.com/tidevio
  • 60.
  • 61. Thank you! http://bouncingfish.com http://twitter/jasonkneen http://github.com/jasonkneen http://jasonified.com