Posts

Performance and Scalability in virtualized iOS build and test infrastructure

Growth is good, and when development teams grow, often, they find themselves having to choose between performance and scalability factors related to their development process. Most often, iOS application development project start by consuming hosted service offerings for their build and test processes. Then, as growth happens, team size increases, the velocity of code commits increase significantly, the number of projects increase, and soon performance issues like long queue wait times and longer build and test times start to creep up.

In most scenarios, one can throw more resources at this problem to address the issue. However, in the macOS world, that’s not the case. While scalable and high-performing platforms like AWS, Google Cloud, Azure which are powered by virtualization exist for Linux and Windows, nothing similar exists for macOS. All existing approaches to virtualization of macOS suffer from a tradeoff between scalability and performance.

Veertu Anka hypervisor eliminates the need for the user to make this tradeoff. Anka Build, powered by Anka hypervisor, enables growing iOS development teams to very easily, setup and configure a scalable and high performing AWS like private cloud for iOS build and test.

There is a lot of skepticism around the performance of iOS simulator test jobs on virtualized infrastructure, especially as the test portfolio expands. Anka Build addresses this for its users with a combination of three variables. – The performance of Anka VM, Time to provision an on-demand VM and VMs in Anka registry with pre-boot iOS simulator.

Anka VMs run on top of Anka Hypervisor, which is a new lightweight virtualization technology that leverages the macOS Hypervisor.framework to run macOS VMs in the most resource efficient manner. Instead of directly requesting and managing macOS resources like CPU or memory for the VMs, Anka Hypervisor, through the macOS Hypervisor.framework, lets the operating system manage the VM resource needs in the same way it runs other applications. As a result, Anka VMs perform much faster and are more responsive. Anka VMs are also packaged with a para-virtual block and network drivers, to enable faster execution of build and test jobs.

Time to provision or the time it takes to have an environment ready for the iOS build and test job is a significant factor that impacts overall performance. Anka Build addresses this with ‘Instant Start’ feature. ‘Instant Start’ offers on-demand provisioned instances instantaneously (1-2 sec) to execute the iOS Ci jobs.

iOS simulator UI test job performance on dedicated or virtualized hardware is impacted by, the long boot time of iOS Simulator. With Anka Build, DevOps can address this problem by pre-booting the simulator in the VM for each device type and pushing the VM to Anka registry. Then, CI UI test jobs, through Anka controller can on-demand provision instances from these VMs and use the pre-booted iOS simulator at full throttle. Each test is run in a clean, sterilized environment with pre-booted simulator of a particular device type.

In our internal tests, we have recorded that iOS simulator UI tests performed with Anka Build and pre-booted simulator VMs take less time than when running on dedicated hardware.

                     

iOS simulator test in Anka VM



        

iOS simulator test on dedicated hardware

Building a private iOS Device Cloud

Now that you have Anka Build up and running for your iOS CI infrastructure, your developers are more productive and your environment is easier to manage. But how do you test your iOS app releases on multiple iOS devices to make sure they are rendering properly?

Anka Build enables you to execute tests on real devices, in the same way as your simulator-based test workflow. Cable your physical devices to your Anka Build macOS private cloud nodes, then connect them at run time to on-demand macOS VMs and run your tests. Using Anka, you can manage a single device or a group of similar devices through a simple command line interface.

What are the benefits of this approach?
  1. One single scalable iOS infrastructure for build, simulator based tests and real device tests.
  2. Eliminates the need to separately manage mac hardware connected to real devices for CI.
  3. Management of real devices through a simple, command line interface.


Check out the following example of making a real device available on-demand for testing:

Step 1 – Create a VM to be used for real device testing

Step 2 –  Let’s say you need to run multiple tests on multiple ipad models. Create a USB-group called ipadgrp:

`anka usb-group create ipadgrp`

Step 3 – Add all of your ipad models to this group:

`anka usb-group add-device <device identifier1> ipadgrp`

`anka usb-group add-device <device identifier 2> ipadgrp`

Step 4 – Attach this usb-group to the previously created VM:

`anka modify VM add sub-group ipadgrp`

Step 5 – Configure your specific CI job to use this VM for real device testing.

Step 6 – Use Anka Controller to spin up on-demand instances of this VM. Each VM instance at run time will claim an available ipad device from the `ipadgrp` and make it available for testing.

Additional documentation on this feature is available at using real devices with Anka Build.

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.

Introducing Anka

Today, Veertu Labs is thrilled to pull back the curtain on three Anka toolsets, our latest endeavors geared towards making macOS and iOS development infrastructure management simple and streamlined. Anka technology is a suite of three products that are built to bring the experience of working with containers to the complex macOS/iOS development process. We are inviting all macOS/iOS developers and as well as DevOps engineers to give Anka a try by joining our trial program (www.veertu.com). We’ll provide launch dates and general availability of these solutions soon as well. 

It’s no secret that container-based app development and deployment has significantly changed the landscape of developer operations. Why a container approach? Because containers are built to be extremely lightweight, easy to interact with and extremely portable. While macOS cannot yet be run inside a container,  (different than running Linux and windows containers on macOS), we have taken the concepts of container-based devops to iOS/macOS development with Anka. 

Anka’s core hypervisor technology enables creation and execution of extremely lightweight and responsive macOS VMs on Apple hardware. The performance of build and test operations is extremely critical in using virtual environments successfully. As such we developed proprietary paravirtual network and block drivers in our hypervisor for macOS VMs. Then, we built a container ecosystem around Anka, so developers and systems engineers can effectively work with it for iOS and macOS development. 

A Container Ecosystem

We built the container ecosystem with three components: Anka Build, Anka DevOps, and Anka Device. Anka Build enables systems engineers and developers to build an on-premise macOS private cloud on Apple hardware. Anka Build consists of Anka’s native virtualization technology, as well as the Anka Registry and Controller services for storing and managing the on-premise macOS private cloud.  Anka Build enables familiar workflows used with many large cloud providers by allowing you to create version-tagged macOS VMs and store them in the Anka Registry. With Anka Controller’s REST API, you can use stored VMs in Anka Registry to spin up fresh, isolated copies for development, build, or test.  

Anka DevOps is a combination of Anka Registry and the Anka client. Anka Registry stores your macOS virtual machines with proper versioning and optional tagging. Anka client is a lightweight program that runs on your developer machines, that can pull relevant build VMs and make them available for local, but managed development. 

Anka Device extends Anka Build and Anka DevOps to allow iOS on-device testing within the macOS private cloud. Plug in any iOS device to Apple hardware running the Anka Build or Anka DevOps toolset to make real iOS devices available for your iOS CI system or to individual developers on-demand; Anka Device allows for the setup and management of the devices centrally in a private device cloud. 

Anka Build, Anka Devops and Anka Device are the building blocks we think will completely transform infrastructure management for macOS or iOS development.

The pace of growth of iOS app development is astounding and at the same time, the complexity and capabilities of these apps, both B2C and B2B are also increasing significantly. The iOS development methodologies have to stay ahead of the curve to make life easy for developers and publishers.