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.

Adventures in Wonderland - A Plone Developer's Year in iOS

2,828 views

Published on

The slides from my talk at Plone Conference 2015 in Bucharest.

After 15 years of working purely in Python, I was thrown head-first into the world of iOS development. Taking over the management of a mobile app being developed for a Python web application, I've had to deal with managing iOS developers, understanding the iOS ecosystem, and working out Apple's byzantine procedures and processes.

Published in: Technology
  • Be the first to comment

Adventures in Wonderland - A Plone Developer's Year in iOS

  1. 1. Matt Hamilton matt@quernus.co.uk A Plone Developer's Year in iOS Adventures in Wonderland
  2. 2. enquos is the first system to combine the tracking of nutrition, fitness & health data so that insights can be made between day to day actions and health outcomes. It is completely integrated, consolidating the functions of multiple applications and tracking devices into one secure platform while providing tools for making smart choices. enquos
  3. 3. “Curiouser and curiouser” — cried Alice
  4. 4. Homekit HealthKit CoreData EventKit CloudKit PassKit PushKit Foundation CoreMotion CoreAudio CoreText
  5. 5. Xcode
  6. 6. App Development Process
  7. 7. Certificates Keys Provisioning Profiles Bundle IDs App IDs Schemes Configurations …oh my!
  8. 8. iOS Build Process • Long • Arcane • Requires variations • Requires certificates / keys
  9. 9. http://appreviewtimes.com/ios/annual-trend-graph
  10. 10. Many weeks latency
  11. 11. Our automated build system
  12. 12. Fastlane • Automates builds • Allows multiple ‘lanes’ to be built • Repeatable, scriptable builds • An ‘API’ for iTunes Connect • Takes the hassle out of the build and deployment process
  13. 13. def do_build(scheme, configuration) increment_build_number( build_number: ENV['BUILD_ID'] ) profile = 'build/nutrition.mobileprovision' if configuration == 'Release' app_identifier = 'com.enquos.nutrition' display_name = 'enquos nutrition' set_istest_false sigh( app_identifier: app_identifier, filename: profile, ) else app_identifier = 'com.enquos.Nutrition.alpha.' + GIT_BRANCH_ID display_name = 'enquos nutrition ' + GIT_BRANCH sigh( app_identifier: '*', adhoc: '1', filename: profile, ) end update_info_plist( app_identifier: app_identifier, display_name: display_name, plist_path: 'Nutrition/Info.plist', xcodeproj: 'Nutrition/Nutrition.xcodeproj', ) update_project_provisioning( xcodeproj: "Nutrition/Nutrition.xcodeproj", build_configuration_filter: ".*Nutrition.*", profile: profile, ) ipa( scheme: scheme, configuration: configuration, embed: profile, xcargs: '-derivedDataPath ./build', ) end
  14. 14. Per-branch app deployment
  15. 15. Things I’ve learnt
  16. 16. iOS 8 → 9 Swift 1.2 → 2.0 Incompatibilities :( Xcode 6.4 → 7
  17. 17. import Foundation extension String { public func toIso8601Date() -> NSDate? { let formatter = NSDateFormatter() formatter.timeZone = NSTimeZone(forSecondsFromGMT: 0) formatter.dateFormat = "yyyy-MM-dd" return formatter.dateFromString(self) } } https://www.netsight.co.uk/ 2015/09/03/an-introduction- to-swift-from-a-python- perspective/
  18. 18. • Imposter syndrome is real • Friendly communities rock • Lack of virtualisation sucks • Good documentation is great • I still don’t understand Ruby
  19. 19. Thanks Matt Hamilton matt@quernus.co.uk https://quernus.co.uk @hammertoe

×