Skip to content

iOS App

Basics

Repository: github.com/stepuplabs/settle-up-ios

Usual Operation

Git branches

  • main: Here should live code that feels finished and is tested by at least developer. Whatever is here is considered release candidate
  • develop: Code in various states of progress. Code always should build and at least seemingly work
  • feature/*: Longer-running work on larger features or refactorings goes here. Each branch is dedicated to (preferably) one specific feature. Code may not build and app may not work as the code may be work in progress
  • relfix/*: Small, localized fixes of issues occuring in currently released application

Usual git flow: Fixes, improvements, or small features

  • Do the work in develop, test your work. Once it is finished and works on your simulator/device, merge to main
  • App build from main should be checked by QA, then released

Usual git flow: Large features, refactorings

  • Create feature/* branch and do whatever is needed there
  • When feature is done, merge it to develop and make sure the app builds and works on your simulator/device
  • Once app health is validated by developer, merge develop to main
  • App build from main should be checked by QA, then released

Fuckup Resolution Center

When things go wrong and carnero is nowhere to be found:

Prepare fixed version

  • Clone the repository
  • Check which version is currently released and find appropriate tag
  • It should be in main branch and named exactly as the released version. For example 3.20.1
  • Checkout the tag as a new branch that starts with relfix/
  • If current released version is 3.20.1, create branch relfix/3.20.2
  • If there is no such tag, create relfix branch directly from HEAD of main
  • Fix the problem
  • Test if the problem is fixed in simulator or on your device
  • Test all tangentially related features. The code tends to break on weird places when fixing things
  • Commit & push the change
  • Xcode Cloud will automatically build the relfix branch and upload it to TestFlight
  • It automatically publishes the build to public testers. Success notification will arrive once that is done and approved by Apple. It may take significant time, but usually is completed within ten minutes from upload
  • Test the TestFlight version once more
  • Prepare new version to be released
  • Go to App Store Connect
  • In left upper corner, there is "iOS App" and plus button. Tap it and create new version. That should be 3.20.2 for example above
  • On the right, little down, fill "What's New in This Version" for every available localization. Switch localization in right upper corner (by default "English (U.S.)")
  • Scroll down and add "Build". Use the build Xcode Cloud just made. The version of the app and the build should match
  • Scroll down and under "App Store Version Release" select option "Automatically release this version"
    • Once Apple approves this build, it will automatically start to roll out
  • Under "Phased Release for App Store Automatic Updates" select "Release update over 7-day period using phased release"
  • Make sure the "Reset iOS App Store Summary Rating" is set to "Keep existing rating"
  • Now click "Save" in upper right corner and then "Add for Review"
    • It will take second or two and you should see panel on the right side with the new version. Click through it (next, next, next...)
  • And now wait for Apple to do the review
  • When app is approved by Apple, it will automatically start phased rollout to users. Rollout takes one week to complete and, when necessary, it can be forced to all users before completion
  • When release starts to roll out, watch closely Firebase Crashlytics for new potential problems

The problem was not fixed

  • Repeat the process within the relfix/ branch until it is fixed
  • With each new attempt, replace build in App Store Connect with new one. Send it for review again.

The problem was fixed

  • If problem was sucessfully solved and no new emerged, merge the relfix/ branch to main and main to develop
  • Tag the merge to main with the version
  • In this example, the tag will be 3.20.2
  • You can now delete the relfix branch