Post on 16-Jul-2015
My iOS dev experiences
By: Yeo Kheng Meng (CS3217 alumni)https://github.com/yeokm1http://yeokhengmeng.com/yeokm1@gmail.com
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
• yeokm1@gmail.com