iOS Development experience (with Swift) guest lecture for NUS CS3217
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.
About me
• Year4 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 mainareas
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 nota 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 appvs 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/
2b. How itworks?
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 withSwift 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 issuestoday
• 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 onthe 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 fromthe 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 ofAndroid
iOS only
iOS first,
Android
maybe
iOS first,
Android
later
iOS and
Android
Development priorities over the years:
14.
4. Working withAndroid 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 NOTuse 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
• Needmaintainer for both iOS/Android SoC print apps after I graduate
• yeokm1@gmail.com