Skip to content
This repository has been archived by the owner on Feb 14, 2024. It is now read-only.

Buddybuild

Daniel Bauke edited this page Feb 14, 2024 · 2 revisions

Introduction

Buddybuild is a versatile tool to build, test ad distribute mobile apps – with all goods and bads of this approach.

On the pros side are: crash collection, distribution, and on cons: build focused on apps and conventions over customization. See short comparison with Travis CI. All other significant features are described here.

Our setup

Most of the setup is done through web UI, however couple of tasks are set in custom script

CocoaPods and Carthage

Both dependency managers are supported in Buddybuild automatically.

Whenever Cartfile, Cartfile.private, or Podfile are detected by Buddybuild - they trigger related build commands: carthage and pod. There's no much control over it (for example passing extra arguments, like carthage --no-use-binaries), unless you use custom build script.

Fortunately, the project doesn't need them, because:

  • For Carthage – all the binaries are checked in to the repository
  • For CocoaPods – pods are used only to support [[pod try|CocoaPods-publication#support-for-pod-try]]

So, the easiest is to just skip both, by deleting these files triggering automated commands in buddybuild_postclone.sh:

#!/usr/bin/env bash

rm -rf Sources/ZalandoCommerceDemoApp/Podfile
rm -rf Cartfile.private

Automated build from tags

All releases of the project frameworks get links to demo app.

It's possible, because Buddybuild can automatically build tagged releases and then it updates the release notes with a url to the app.

Additionally, each build from tag fires pod validation operation in buddybuild_postbuild.sh

Automated podspec validation

The project uses it to verify podspec on builds from tags. Pod verification could be time-consuming, that is why it's run only for tags in buddybuild_postbuild.sh.

Scheduled master build

Scheduled deployments are used to build app form master branch on each working day.

Custom build scripts

See more in Buddybuild custom build scripts

buddybuild_postclone.sh

Runs after cloning repository.

See source: buddybuild_postclone.sh

buddybuild_prebuild.sh

Runs after installing dependencies

Not used.

buddybuild_postbuild.sh

Runs after successful build.

Usually used for uploading build artifacts somewhere.

Used for automated podspec validation, and it's planned for Testdroid tests, when they're available.

See source: buddybuild_postbuild.sh

Buddybuild SDK

Buddybuild SDK is integrated only into Demo app, which allows to gather: feedback screenshots and crash reports, and additionally notify about new version available.

Other notable features

  • Multiple simulators - allows to run tests on different iOS and device simulators
  • Custom build setups for different branches - allows to override the default configuration on a per-branch basis: schema, pushes, Xcode version, tests requirement and more.
  • Uploading distribution certificate - needed for code signing for devices. Just running terminal command extracts all the required certificates.
  • Auto-versioning - automatically increase app version following different patterns, which allows seamless app update among testers.

Known limitations

Scripts

It's not possible to prepare environment before clone, like for example install dependencies for git, eg. Git LFS, or run a script after build regardless its result.

Free plan tier

In some situations a job could wait in a queue for several hours, and full build and test on 4 simulators takes ~1 hour.

References

Buddybuild documentation