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

16
My iOS dev experiences By: Yeo Kheng Meng (CS3217 alumni) https:// github.com/yeokm1 http://yeokhengmeng.com/ [email protected]

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

Page 1: 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/[email protected]

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

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

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

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

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

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

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

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/

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

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

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

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/

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

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

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

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)

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

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)

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

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

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

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

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

The rise of Android

iOS onlyiOS first, Android maybe

iOS first, Android

later

iOS and Android

Development priorities over the years:

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

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

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

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

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

Questions time

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

[email protected]