adventures in cross platform connectjs / ticonnect 2014

61
Adventures in cross-platform Jason Kneen

Upload: jason-kneen

Post on 28-Nov-2014

620 views

Category:

Technology


4 download

DESCRIPTION

My Talk from Ti Connect / ConnectJS on cross-platform adventures with Titanium and iOS and Android.

TRANSCRIPT

Page 1: Adventures in cross platform ConnectJS / TiConnect 2014

Adventures in cross-platformJason Kneen

Page 2: Adventures in cross platform ConnectJS / TiConnect 2014

in cross-platformADVENTURES

ADVENTURES

Page 3: Adventures in cross platform ConnectJS / TiConnect 2014

Jason Kneen

http://twitter/jasonkneen

http://github.com/jasonkneen

http://jasonified.com

http://bouncingfish.com

App Developer, TCE Certified “Titan”

Page 4: Adventures in cross platform ConnectJS / TiConnect 2014
Page 5: Adventures in cross platform ConnectJS / TiConnect 2014

Apps

Page 6: Adventures in cross platform ConnectJS / TiConnect 2014

My Work

StoneHenge Audio Tour

The Great British Bee Count SportsBlog

Page 7: Adventures in cross platform ConnectJS / TiConnect 2014

The Great British Bee Count

• Find, photograph identify Bees

• iOS and Android

• Ti Alloy

• Custom UI

• Featured on BBC SpringWatch

Page 8: Adventures in cross platform ConnectJS / TiConnect 2014

Things I’ve learnt

Page 9: Adventures in cross platform ConnectJS / TiConnect 2014

Things I’ve learnt

am stilllearning

Page 10: Adventures in cross platform ConnectJS / TiConnect 2014

Clients

Page 11: Adventures in cross platform ConnectJS / TiConnect 2014

“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”

“We’d like an app like Instagram, can you give me a cost?”

Page 12: Adventures in cross platform ConnectJS / TiConnect 2014

I break down costs

Page 13: Adventures in cross platform ConnectJS / TiConnect 2014

• 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)

I break down costs…

Page 14: Adventures in cross platform ConnectJS / TiConnect 2014

Working with designers

Page 15: Adventures in cross platform ConnectJS / TiConnect 2014

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

Page 16: Adventures in cross platform ConnectJS / TiConnect 2014

“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?”

“We’d like the iOS TabGroup on Android”

“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”

Page 17: Adventures in cross platform ConnectJS / TiConnect 2014

I typically get this.

Retina Dimensions

No font detailsDesigned for iOS

References PSDs

Page 18: Adventures in cross platform ConnectJS / TiConnect 2014

You can’t split retina pixels!

Page 19: Adventures in cross platform ConnectJS / TiConnect 2014

Solution?

Page 20: Adventures in cross platform ConnectJS / TiConnect 2014

• 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

Working with designers…

Page 21: Adventures in cross platform ConnectJS / TiConnect 2014
Page 22: Adventures in cross platform ConnectJS / TiConnect 2014

Testing

Page 23: Adventures in cross platform ConnectJS / TiConnect 2014
Page 24: Adventures in cross platform ConnectJS / TiConnect 2014

• HDPI, LDPI, different devices etc.

• Multiple versions

• “Crapware” (HTC, Samsung)

• I buy devices, and develop ONLY for Android 4.0+

Testing on Android…

Page 25: Adventures in cross platform ConnectJS / TiConnect 2014

iOS isn’t fragmented right?

Page 26: Adventures in cross platform ConnectJS / TiConnect 2014

@2x

• iPhone 3.5” Retina

• iPhone 3.5” Non-Retina

• iPhone 4”

• iPhone 4.7”

• iPhone 5.5”

Testing on iOS…

• iPad

• iPad Retina

• iPad Mini

• iPad Mini Retina

@3x

Page 27: Adventures in cross platform ConnectJS / TiConnect 2014

Deployment

Page 28: Adventures in cross platform ConnectJS / TiConnect 2014

• http://Installrapp.com

• Watch those device limits!

• Use the clients account!

• Build and deploy early

• Simple / easy to update

I deliver Over The Air…

Page 29: Adventures in cross platform ConnectJS / TiConnect 2014

• Use client Appstore / Play Store accounts

• iTunesConnect settings

• Advise on review times for new / updated apps

• Get Paid!

•Get Paid!

When it’s time to publish…

Page 30: Adventures in cross platform ConnectJS / TiConnect 2014

• Google Play limited to 50mb

• Expansion files support larger apps

• Titanium now supports OBB fileshttp://github.com/jasonkneen/TiExpansionFiles

Google Play limitations

Page 31: Adventures in cross platform ConnectJS / TiConnect 2014

Emulation

Page 32: Adventures in cross platform ConnectJS / TiConnect 2014

Using the Android SDK Emulator

Page 33: Adventures in cross platform ConnectJS / TiConnect 2014

• Free, easy and cheap to license

• Fast (VERY FAST)

• Google APIs, Play support, simple “hack”

• Great GPS, Mapping tools

• Android first

I use GenyMotion…

Page 34: Adventures in cross platform ConnectJS / TiConnect 2014

• 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!

I use TiShadow (or Liveview)…

Page 35: Adventures in cross platform ConnectJS / TiConnect 2014

Cross-platform development before Alloy

Page 36: Adventures in cross platform ConnectJS / TiConnect 2014

• 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 use Alloy…

Page 37: Adventures in cross platform ConnectJS / TiConnect 2014

Cross-platform development after Alloy

I’m <BatMan/>!

Page 38: Adventures in cross platform ConnectJS / TiConnect 2014

Platforms & Screens

Page 39: Adventures in cross platform ConnectJS / TiConnect 2014

I use app.tss…

Page 40: Adventures in cross platform ConnectJS / TiConnect 2014

• Build layouts on both platforms first

• app.tss for global classes

• “reset” for Android

• Platform specific overrides

• Simple XML, <Button class=“wide green rounded”/>

I use app.tss…

Page 41: Adventures in cross platform ConnectJS / TiConnect 2014

Yep, if you don’t countTop, Bottom, Left, Right

Page 42: Adventures in cross platform ConnectJS / TiConnect 2014

• 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 build flexible layouts…

Page 43: Adventures in cross platform ConnectJS / TiConnect 2014

• Can be very granular

• Long, NotLong, Landscape, Portrait

• Keep it simple

• Use retina images for xhdpi(3x retina === xxhdpi)

I keep density simple…

Page 44: Adventures in cross platform ConnectJS / TiConnect 2014

• 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 use TiCons…

Page 45: Adventures in cross platform ConnectJS / TiConnect 2014

'res-mdpi' => "0.5", 'res-hdpi' => "0.75",

'res-xhdpi' => "1", 'res-xxhdpi' => "1.5", 'res-xxxhdpi' => "2"

I create density assets from Retina images…*

*when I have to

http://ticons.fokkezb.nl/

Page 46: Adventures in cross platform ConnectJS / TiConnect 2014

• iOS style stretchable images on Android

• Splash screens

• Android version of leftCap, topCap

• Editor built-in to Android SDK

• http://9patch.fokkezb.nl/

I use 9-Patch images…

Page 47: Adventures in cross platform ConnectJS / TiConnect 2014

• 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 optimise the $h!t out of Android…

Page 48: Adventures in cross platform ConnectJS / TiConnect 2014

• If my app is leaking, it’s leaking on everything

• Instruments is iOS only

• DDMS for Android specific leaks / memory usage

I use Instruments…

https://vimeo.com/29804284“Rick Blalock: Your Apps are Leaking”

Page 49: Adventures in cross platform ConnectJS / TiConnect 2014

• 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 ScrollableViews…

Page 50: Adventures in cross platform ConnectJS / TiConnect 2014

• Simple “inheritance” for Alloy Controllers

• Re-use controllers, views

• Create cross-platform template wrappers

I use base controllers…

Page 51: Adventures in cross platform ConnectJS / TiConnect 2014

• <require src=“controllerName”/>

• Alloy supports require/widgets with children

• Create a wrapper template controller

I also use Alloy templates…

Page 52: Adventures in cross platform ConnectJS / TiConnect 2014

• 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…

Page 53: Adventures in cross platform ConnectJS / TiConnect 2014

I create/override Alloy tags…A two-way slide menu in Alloy

Page 54: Adventures in cross platform ConnectJS / TiConnect 2014

I create/override Alloy tags…

• Just drop into the XML

• Specify Left/Right Menu

• Works!

Page 55: Adventures in cross platform ConnectJS / TiConnect 2014

Custom Tag Demo

Page 56: Adventures in cross platform ConnectJS / TiConnect 2014

“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

Page 57: Adventures in cross platform ConnectJS / TiConnect 2014
Page 58: Adventures in cross platform ConnectJS / TiConnect 2014

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

Page 59: Adventures in cross platform ConnectJS / TiConnect 2014

One more thing…

• TiDev.io

• News, Articles

• Tips / Advice

• twitter.com/tidevio

Page 60: Adventures in cross platform ConnectJS / TiConnect 2014
Page 61: Adventures in cross platform ConnectJS / TiConnect 2014

Thank you!

http://twitter/jasonkneen http://github.com/jasonkneen

http://jasonified.com

http://bouncingfish.com