Skip to content

Runbook

Zachary Orr edited this page Jan 2, 2021 · 18 revisions

Updating Dependencies

Cocoapods

To update all dependencies

$ bundle exec pod update

To update a single dependency

$ bundle exec pod update {pod_name}

Ruby Gems

To update all dependencies

$ bundle update

To update a single dependency

$ bundle update {gem_name}

Updating OS Versions

In order to update the required OS version, change the Xcode deployment target for the project and all targets in Xcode, the Podfile platform :ios version, and all of the *.podspec ios.deployment_target versions. These versions should all match.

The required OS version is generally kept as close to the most recent major release as possible. Supporting old OS versions comes with overhead around gating newer-OS-specific code, testing across multiple versions, etc. In order to keep the overhead of working on and maintaining this open source project as low as possible, The Blue Alliance for iOS generally only supports most recent major OS version.

Xcode

Podfile

platform :ios, '{new_version}'
...

*.podspec

Pod::Spec.new do |s|
  ...
  s.ios.deployment_target = '{new_version}'
  ...
end

Generate Distribution Certificate

Distribution certificates are only valid for a year at a time and must be re-generated. You must delete the old, expired certificate before generating a new certificate. Note: You must have access to the Apple Developer account and the certificates repo in order to generate new certs.

$ git clone [email protected]:ZachOrr/tba-ios-certificates.git
$ cd tba-ios-certificates
$ bundle install
$ bundle exec fastlane match nuke distribution
$ bundle exec fastlane match

Machines or users looking to pull new distribution certs can do so via match from TBA for iOS. This is only necessary if you're going to ship an update to the App Store from your local machine, which isn't advised. CI handles this for us automatically.

$ cd the-blue-alliance-ios
$ bundle exec fastlane match

Generate APNs Authentication Key

We do not use APNs certificates, as they are only valid for a year at a time and need to be regenerated. Instead we use a long-lived APNs authentication key which does not expire. Under normal circumstances, this key should not have to be regenerated or reconfigured.

If an APNs key needs to be reconfigured, follow the steps in Firebase's Configuring APNs with FCM guide.

Symbolicate Crash Logs

All dSYM files are automatically downloaded from App Store Connect and uploaded to Firebase daily via CI. However, if something goes wrong, symbol files can be uploaded to Firebase manually. The source of truth for this is Firebase's documentation, but this attempts to provide abbreviated steps.

Find dSYM Bundle

Download the dSYM symbols via App Store Connect by going to Apps -> The Blue Alliance -> Activity -> Select the version/build number -> Click Download dSYM.

Upload dSYM Bundle

You can upload dSYM files by going to the Firebase project, clicking the Crashlytics tab in the sidebar, selecting The Blue Alliance for iOS project, clicking the dSYMs tab, and uploading dSYM zip files.

The web interface can be buggy sometimes and fail. Uploading via the command line is a more reliable way of uploading dSYM files. The details of this will be better kept up-to-date by Firebase, but for now, here's what you run in the project's root

$ Pods/FirebaseCrashlytics/upload-symbols -gsp the-blue-alliance-ios/GoogleService-Info.plist -p ios {path_to_dsym.zip}