iOS Bootcamp: learning to create awesome apps on iOS using Swift (Lecture 05)
iOS Development experience (with Swift) guest lecture for NUS CS3217
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/[email protected]
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