Building on-premise iOS/macOS build and test infrastructure in four steps

Anka Build controller is the management engine for your macOS private cloud. It presents a single entry point, through its REST APIs, for external systems to provision macOS VMs on a cluster of mac hardware (Anka Build nodes) from a specific version of a VM template pulled from Anka registry, for each run.

It eliminates the need to implement custom modules to address issues like reverting a VM to the snapshot, automated assignment of IPs, multiple request management through queuing, cleanup and other management tasks.

Pulling a VM template from the Anka registry for on-demand provisioning also eliminates the need to bootstrap the VM at runtime and enables instantaneous execution of tests. You might still need to do some incremental bootstrapping to pull latest build etc, but the initiation time is significantly reduced.





Watch Anka Build in action in this brief video – Demo Video

Let’s take a look at how you will set it up.

Step 1 – Deploy Anka Registry in a docker container. Installing Registry section in https://ankadoc.bitbucket.io/getting-started/

Step 2 – Deploy Anka controller in a docker container and configure it. Installing Controller section in https://ankadoc.bitbucket.io/getting-started/

Step 3 – Deploy Anka Build application package on all the mac machines where you want to run your VMs. Then, join them to the controller build cluster. These machines are now Anka build nodes. https://ankadoc.bitbucket.io/using-controller/

Step 4 – Create the Anka VM templates that will serve as your iOS or macOS build or test environments. Load all your dependencies in this VMs. Then, push it to Anka registry. If your dependencies change, you can pull this VM from the registry, update it and then push it back with a different version/tag. https://ankadoc.bitbucket.io/using-registry/

Your private macOS cloud infrastructure is now ready.

Use the Anka Controller REST APIs to provision environments or if you use Jenkins, deploy the Jenkins plugin.

REST APIs – https://ankadoc.bitbucket.io/using-controller/#controller-rest-apis

Jenkins Plugin – https://ankadoc.bitbucket.io/using-jenkins/

Developing iOS applications in consistent local environments

Is iOS developer productivity suffering in your organization? Let’s take a scenario of a company with more than one iOS developer working on different iOS projects. In such a setting developers tend to have issues running builds on CI, only to have it pass in their local environment. These types of failures during integrated build and test significantly impact developer productivity. When you dig into these issues, it’s very often because of incorrect global dependency linking, different library versions, incorrect or missing environment variables, or simply that their system is not set up with consistency.

While in theory, it’s possible to sanitize and standardize a developer’s machine, in practice, it’s almost impossible. Developers will always download new libraries and update versions of other tools to accelerate development, sometimes creating conflict with your build tools. Similarly, when iOS developers pull the latest source for development and build it on their systems, they face local build and test failures due to incompatibilities in the configuration of their dev environment. This problem is even bigger when iOS developers are simultaneously working on multiple projects.

Anka Run technology is built to address this issue. It brings the container-based development workflow to the iOS and macOS development world. Until now, it was not possible to package an iOS development environment in a container-like entity and distribute it to your team. Anka Run enables you to do this.

There are two modules in Anka Run. Anka Run for macOS and Anka Registry. Anka Run for macOS is a very lightweight engine with a footprint of 15MB, to create and run macOS VMs. Anka Registry is a repository where these iOS or macOS dev environment VMs are managed and can be pulled to each developer machine, creating a consistent developer experience everyone can use.

First, Anka Run is deployed on all iOS developer machines, and Anka Registry is set up in a docker container. After initial installation is complete, devOps engineers and/or developers can create fully self-contained iOS development environments with all dependencies in an “Anka VM”. This Anka VM is then versioned and pushed to Anka registry.

Next, developers continue to work in their native Xcode IDE or another environment. They pull the respective Anka VM corresponding to multiple projects and configurations on their machine and use them to execute local build and unit tests. With the ‘anka run’ command developers work from their local command line interface to execute builds and tests inside the Anka VMs.

The end result is that iOS developers are always building and testing against a common set of dependencies and linkages, without the need to set these on their machines. Simply put, Anka enables an agile and developer-centric approach.

Watch this video to see all Anka Run components in action.

Setup macOS 10.13 beta High Sierra environment in an isolated VM

This week Apple announced developer beta availability of the new macOS version 10.13, High Sierra and, we started investigating support for this in Anka. We are excited to share that now you can create isolated dev/test environment with this version in an Anka VM.

Our developers have discovered that this macOS beta version prevents auto install/load of third party signed drivers. These drivers need to be explicitly enabled by the users. Hence, just using Anka auto install method to create VM is not enough. After creating the VM, you will need to do additional setup to enable Anka PV drivers.

Following are the setup steps

Step 1 – Download and install Anka Beta from www.veertu.com

Step 2 – Download ‘Install macOS 10.13 Beta.app’ from your developer account.

Step 3 – Use Anka auto install method to create High Sierra VM. Type following in command line.
anka create-disk --size 40G --app ~/Desktop/Install\ macOS\ 10.13\ Beta.app/


Step 4 – After successful execution of step 4, execute ‘anka create’.
disk created successfully at: diskid.ank
 
anka create --image-id diskid --ram-size 2G --cpu-count 2 hisierra


Step 5 – Type ‘anka view hisierra’ and complete the remaining macOS setup steps.



Step 6 – Go to system preferences and then go to Security and Privacy and allow extension by Veertu Inc.



Step 7 – Stop and start the VM.

Step 8 – Run the following from a terminal inside the VM.
cd /Library/Filesystems/osxfuse.fs/Contents/Extensions
 
sudo ln -ls 10.9 10.13
Step 9 – Stop and start the VM.

Step 10 – Go to the VM window
anka view hisierra
Step 11 – Go to system preferences and then go to Security and Privacy and allow osxfuse extension by ‘Benjamin Fleischer’. We use third party osxfuse for shared FS feature.



Step 12 – Stop and restart the VM.

Step 13 – Verify the setup. From your mac/host, execute the following command.
anka run hisierra ls -l
If it displays the contents of your current mac folder, then your VM is fully configured with all Anka PV drivers, guest add-ons and ready to use.

Anka Public Beta

As the WWDC conference gets underway with exciting new updates for macOS, iOS developers, we are thrilled to announce the availability of the beta version of Anka. For the past few months, we have been working with private beta users of Anka and are extremely grateful for all the feedback we received, which helped us shape Anka.

Anka is now available as ‘Anka Run’ and ‘Anka Build’ beta products. Anka Run can be used by iOS and macOS developers to create and consume reproducible development environments on their dev machines. Anka Run will enable developers working on the same project, to build and test their code changes against the same set of external libraries, configuration, toolchain and environment variables. This will significantly increase developer productivity. Check out technology page for additional technical details.

Anka Build can be used by infrastructure admins to very quickly build a private cloud on Apple hardware and provision on-demand instances of their environments from preconfigured VM templates. Anka Build is an all-in-one solution to virtualize macOS, manage macOS VM templates and provision them on-demand for CI jobs. It removes the setup complexities associated with existing approaches while providing a fast-performing and responsive macOS private cloud. Check out technology page for additional details. Anka Run and Anka Build, when used together can significantly accelerate the velocity of macOS and iOS development.

How to Get Started with Anka

UPDATE – High Sierra macOS 10.13 beta is out and Anka supports it. Download developer beta version ‘.app’ and work with it inside an Anka VM. Here are the setup instructions.

There are multiple ways to get started with Anka. Start with first downloading and installing Anka Run beta. Download and install the Anka Run application package on a few developer machines. Setup Anka registry in a docker container using the dockerfile included in the Anka-registry package. Then, create macOS Anka VM on one of the mac machines running Anka Run application and configure that VM with your project dependencies. Push that VM to Anka registry. Then, ask your developers to pull it on their machines(running Anka Run) and use them for local build and tests.

Then, move on to configuring a private macOS cloud for your CI. Download and install the Anka Build application package on your macOS CI machines. Setup Anka Controller in a docker container using the dockerfile included in the Anka-controller package. Register Anka Build nodes to Anka Controller cloud, configure the controller to talk to the previously installed Anka registry and you have a private macOS build and test cloud!

Additionally, if you use Jenkins for your CI, then install the Anka Jenkins plugin on your Jenkins master server to run your jobs on Anka cloud. Send us your feedback and questions at ankabeta@veertu.com, share insights on your setup with others at @veertu_labs, and help us spread the word.