iOS Development experience (with Swift) guest lecture for NUS CS3217

Post on 16-Jul-2015

221 views 2 download

Tags:

Transcript of iOS Development experience (with Swift) guest lecture for NUS CS3217

My iOS dev experiences

By: Yeo Kheng Meng (CS3217 alumni)https://github.com/yeokm1http://yeokhengmeng.com/yeokm1@gmail.com

About me

• Year 4 Computer Science student

• Interned in two startups doing Android and iOS

• Developer for NUS SoC Print app (iOS and Android)

• Took CS3217 from Jan to May 2014• Last class in Objective-C

Just four main areas

1. CS3217 app vs production app

2. Experience in developing my iOS (Swift) app and publishing to app store

3. Stuff I learned in the workplace as an iOS dev

4. Working with Android devs

Disclaimer

• I’m not a Swift expert

• I may make mistakes

• Practices I suggest may not be the best

• Apple may have changed• New UI guidelines

• New/Modified APIs

1. CS3217 app vs Production appType CS3217 Production

Screen type/resolution (inches) 10” iPhone: 3.5”, 4”, 4.7”, 5.5”

Device types/functions iPad Air iPhone: 4S, 5, 5S, 6, 6+iPod Touch: 5GiPad: 2, 3, 4, Air, Air 2, Mini, Mini 2

OS version iOS8 iOS7, iOS8

UI polish Just satisfy Prof Sim and STEPS visitors

Must satisfy Apple’s human interface “guidelines”

User support/feedback/improvements None Negative ratings or lost customers for you if you don’t

Code robustness Good enough to demo Very high

Your Bible: https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/MobileHIG/

2a. App intro

https://itunes.apple.com/sg/app/id916524327

https://github.com/yeokm1/nus-soc-print-ios

https://play.google.com/store/apps/details?id=com.yeokm1.nussocprintandroid

https://github.com/yeokm1/nus-soc-print

• Sends documents for printing to our SoC Unix printers ( psts, pstsb… psc011…)

2b. How it works?

SoC Sunfire serverNUS SOC Print

App-to-app transfer SSH

http://yeokhengmeng.com/2014/12/nus-soc-print-androidios-background-technical-aspects-and-learning-points/

2c. Developing with Swift during the early days• Little or no documentation, Stackoverflow

examples, online examples, NO NOTHING

• Changing APIs (especially ? or !)

• Buggy Xcode betas, iOS 8 betas• Crash loops

• Wrong auto-completion

• Basic clean insufficient, need clean build folder

2d. Swift issues today

• No auto-refactor

• Swift still in flux• https://github.com/ksm/SwiftInFlux

• Compatibility with future Apple OSes• No source code compatibility• App Binary compatibility

• Embedded Swift runtime

• No library binary compatibility

• Certain functions/libraries have no Swift equivalent• Apple Reachability library• Existing libraries: NMSSH etc• Solution: Objective C – Swift interoperation (later)

2f. User support

• Users cannot ask questions from the App Store• They just give you negative ratings instead

• Make it easy for them to contact you in-app

• Put your email/contacts in an easily accessible place

• Include device details

• Don’t wait for users to report crashes, receive crash reports automatically and act on them. • (More on Crashlytics later)

2g. Publishing on the app store(actually pitching to Apple)• Prepare a “dummy” user account (if needed)

• Prepare 4 sets of screenshots (3.5, 4, 4.7, 5.5)• Ideally on actual devices so you can test at the same time

• Make a demo video to boost your chances

• Upload way before busy periods

• Upload and prayyyyyyyy for 1-2 weeks (or longer…)

3. Stuff from the workplace

• Library package manager (Cocoapods/Carthage)• Reduce repo pollution/size• Keeps libraries up to date

• Existing codebase/libraries in Objective-C• Interoperation between Obj-C and Swift code• Bridging headers

• Use analytics libraries, get stats and user behaviour (Google Analytics/Flurry)

• Debugging library (Crashlytics android example)• Crashlytics signup wait time of a few weeks

The rise of Android

iOS onlyiOS first, Android maybe

iOS first, Android

later

iOS and Android

Development priorities over the years:

4. Working with Android devs• App consistency vs platform consistency

• Eg. iOS Tab Bar vs Android Actionbar

• Aim for similarity in code/UI behaviour

• Limitations on Android vs iOS platform• iOS dev and Android dev takes about the same time

• Android testing slower (due to fragmentation)

• Android publishes faster to Play Store, can be guinea pigs for you (you read the previous point right)

Terms iOS Android

UI UIViewController Activity/Fragment

Threading NSOperation Asynctask

Screen density assets 1x, 2x, 3x xxhdpi, xhdpi, hdpi, mdpi, ldpi

Remote notification Apple push notification Google Cloud messaging

Further reading (DO NOT use in CS3217)

• Use HTML/CSS for UI with native wrapper eg, Phonegap

• Use only C# for both iOS and Android. By Xamarin

• How Dropbox Uses C++ for Cross-Platform iOS and Android Development

• Google’s Java to Objective C transpiler

• Used by Inbox app

Questions time

• Need maintainer for both iOS/Android SoC print apps after I graduate

• yeokm1@gmail.com