Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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


Published on

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.

Published in: Software

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

  1. 1. My iOS dev experiences By: Yeo Kheng Meng (CS3217 alumni)
  2. 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. 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. 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. 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: nce/Conceptual/MobileHIG/
  6. 6. 2a. App intro eokm1.nussocprintandroid • Sends documents for printing to our SoC Unix printers ( psts, pstsb… psc011…)
  7. 7. 2b. How it works? SoC Sunfire serverNUS SOC Print App-to-app transfer SSH aspects-and-learning-points/
  8. 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. 9. 2d. Swift issues today • No auto-refactor • Swift still in flux • • 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. 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. 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. 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. 13. The rise of Android iOS only iOS first, Android maybe iOS first, Android later iOS and Android Development priorities over the years:
  14. 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. 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. 16. Questions time • Need maintainer for both iOS/Android SoC print apps after I graduate •