adventures in wonderland - a plone developer's year in ios

37
Matt Hamilton [email protected] A Plone Developer's Year in iOS Adventures in Wonderland

Upload: matt-hamilton

Post on 16-Apr-2017

2.438 views

Category:

Technology


1 download

TRANSCRIPT

Matt Hamilton [email protected]

A Plone Developer's Year in iOS

Adventures in Wonderland

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

“Curiouser and curiouser”

— cried Alice

Homekit

HealthKit

CoreData

EventKit

CloudKit

PassKit

PushKit

Foundation

CoreMotion

CoreAudio

CoreText

Xcode

App Development

Process

Certificates Keys Provisioning Profiles Bundle IDs App IDs Schemes Configurations …oh my!

iOS Build Process• Long

• Arcane

• Requires variations

• Requires certificates / keys

http://appreviewtimes.com/ios/annual-trend-graph

Many weeks latency

Our automated build system

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

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

Per-branch app deployment

Things I’ve learnt

iOS 8 → 9

Swift 1.2 → 2.0

Incompatibilities :(

Xcode 6.4 → 7

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/

• Imposter syndrome is real

• Friendly communities rock

• Lack of virtualisation sucks

• Good documentation is great

• I still don’t understand Ruby

Thanks

Matt Hamilton [email protected]

https://quernus.co.uk

@hammertoe