These days when one thinks about augmented reality one might think about Pokemon Go, Microsoft Holo Lens, ARKit, and ARCore. Some might wonder why they find a post with the headline 'augmented reality' on a continuous delivery platform blog? The reason for this is that I'm part of a team that creates an augmented reality library called artoolkitX, which is available across all major platforms, like iOS, macOS, Android, Windows, Linux, Unity3D and Web Browser(JS). The following article will go into the details on how we use Bitrise to build artoolkitX for all of these platforms, how we deliver our artefacts and a bit beyond.
Guest post by Thorsten Bux.
Thorsten deeply believes in empowering people and does so by creating products that aim for ease of use, excitement and simplicity. He is a full stack software engineer with over 5 years augmented reality software development experience, paired with several years of experience in creating products in the IoT realm. He has an academic background in software architecture and computer science in media.
Multi platform builds on Bitrise
When I started with the setup of a continuous delivery process for artoolkitX I did an extensive research of continuous delivery (CD) platforms. (Details see here). The critical things for us were the support of all mentioned platforms and the possibility to build private repositories. Because artoolkitX is an Open-source project the potential costs for the usage of the CD platform are critical as well. We decided to go with Bitrise because of the support of the needed platforms, the option to start for free (even for private repositories) and the ease of use of the user interface.
Another plus was the flexibility of the platform to even support Unity3D build long before Unity3D came up with their own cloud build solution.
Delivering software for multiple platforms
What does it mean for us when I say we create software for multiple platforms? Basically, it means that there is one code base in C / C++ and we build the core library for all platforms from that. This leads to all kinds of challenges. Like dependency management, specific build tools and package management to name a few. What is amazing about Bitrise is the fact that the platform is very flexible. For example we can use one single cmake build script and utilise the different Bitrise build stacks to build for macOS, iOS, Linux and Android. Using the available process steps for AWS we can then easily publish our artefacts to AWS.
We use GitHub as our source-code repository and recently we decided to deploy our releases to GitHub and add them to a release-tag. There are already utilities available which make working with the GitHub API fairly simple. I found one that is developed using GO. As Bitrise already has GO support integrated all I had to do was to install the GO-utility and I could switch the upload of the releases from AWS to GitHub.
Build what you need when you need it
Bitrise allows for a variety of different build workflows to be triggered based on certain build trigger configurations. That allows us, for example, to only build the documentation if something was pushed to the gh-pages branch. Or to only run the compile and test workflow if code was pushed to a feature branch as opposed to running a full continuous delivery build whenever a branch is tagged as release. This allows for great automation of build workflows for different purposes.
So far it has been a pleasure to use Bitrise as our continuous delivery backend. As I'm also working with other systems I can say, that on a day to day basis I enjoy working with Bitrise. I've only one wish to ask the Bitrise team and that would be to add Windows support to their system.