The guest lecture I gave to students in NUS Computing CS3217 on iOS Development. It is primarily about developmental issues using Swift as well as differences between an app developed in a school environment vs a production app in companies.
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
iOS Development experience (with Swift) guest lecture for NUS CS3217
1. My iOS dev experiences
By: Yeo Kheng Meng (CS3217 alumni)
https://github.com/yeokm1
http://yeokhengmeng.com/
yeokm1@gmail.com
2. 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
3. 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
4. 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
5. 1. CS3217 app vs Production app
Type 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: 5G
iPad: 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/UserExperie
nce/Conceptual/MobileHIG/
7. 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/
8. 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
9. 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)
10. 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)
11. 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…)
12. 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
13. The rise of Android
iOS only
iOS first,
Android
maybe
iOS first,
Android
later
iOS and
Android
Development priorities over the years:
14. 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
15. 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
16. Questions time
• Need maintainer for both iOS/Android SoC print apps after I graduate
• yeokm1@gmail.com