Beginning right this moment, you possibly can construct purposes on macOS with AWS CodeBuild. Now you can construct artifacts on managed Apple M2 machines that run on macOS 14 Sonoma. AWS CodeBuild is a totally managed steady integration service that compiles supply code, runs exams, and produces ready-to-deploy software program packages.
Constructing, testing, signing, and distributing purposes for Apple programs (iOS, iPadOS, watchOS, tvOS, and macOS) requires using Xcode, which runs completely on macOS. Once you construct for Apple programs within the AWS Cloud, it is extremely doubtless you configured your steady integration and steady deployment (CI/CD) pipeline to run on Amazon Elastic Cloud Compute (Amazon EC2) Mac cases.
Since we launched Amazon EC2 Mac in 2020, I’ve spent a big period of time with our clients in numerous industries and geographies, serving to them configure and optimize their pipelines on macOS. Within the easiest kind, a buyer’s pipeline would possibly seem like the next diagram.
The pipeline begins when there’s a new commit or pull request on the supply code repository. The repository agent put in on the machine triggers numerous scripts to configure the atmosphere, construct and check the applying, and finally deploy it to App Retailer Join.
Amazon EC2 Mac drastically simplifies the administration and automation of macOS machines. As I like to explain it, an EC2 Mac occasion has all of the issues I like from Amazon EC2 (Amazon Elastic Block Retailer (Amazon EBS) volumes, snapshots, digital non-public clouds (VPCs), safety teams, and extra) utilized to Mac minis working macOS within the cloud.
Nevertheless, clients are left with two challenges. The primary is to arrange the Amazon Machine Picture (AMI) with all of the required instruments for the construct. A minimal construct atmosphere requires Xcode, however it is extremely widespread to put in Fastlane (and Ruby), in addition to different construct or improvement instruments and libraries. Most organizations require a number of construct environments for a number of combos of macOS and Xcode variations.
The second problem is to scale your construct fleet in keeping with the quantity and period of builds. Massive organizations sometimes have a whole bunch or 1000’s of builds per day, requiring dozens of construct machines. Scaling out and in of that fleet helps to save lots of on prices. EC2 Mac cases are reserved on your devoted use. One occasion is allotted to at least one devoted host. Scaling a fleet of devoted hosts requires a selected configuration.
To deal with these challenges and simplify the configuration and administration of your macOS construct machines, right this moment we introduce CodeBuild for macOS.
CodeBuild for macOS is predicated on the just lately launched reserved capability fleet, which incorporates cases powered by Amazon EC2 which are maintained by CodeBuild. With reserved capability fleets, you configure a set of devoted cases on your construct atmosphere. These machines stay idle, able to course of builds or exams instantly, which reduces construct durations. With reserved capability fleets, your machines are at all times working and can proceed to incur prices so long as they’re provisioned.
CodeBuild supplies a typical disk picture (AMI) to run your builds. It incorporates preinstalled variations of Xcode, Fastlane, Ruby, Python, Node.js, and different fashionable instruments for a improvement and construct atmosphere. The complete listing of instruments put in is obtainable within the documentation. Over time, we are going to present further disk photographs with up to date variations of those instruments. You too can convey your personal customized disk picture in the event you need.
As well as, CodeBuild makes it simple to configure auto scaling. You inform us how a lot capability you need, and we handle every part from there.
Let’s see CodeBuild for macOS in motion
To indicate you the way it works, I create a CI/CD pipeline for my pet mission: getting began with AWS Amplify on iOS. This tutorial and its accompanying supply code clarify how one can create a easy iOS app with a cloud-based backend. The app makes use of a GraphQL API (AWS AppSync), a NoSQL database (Amazon DynamoDB), a file-based storage (Amazon Easy Storage Service (Amazon S3)), and consumer authentication (Amazon Cognito). AWS Amplify for Swift is the piece that glues all these companies collectively.
The tutorial and the supply code of the app can be found in a Git repository. It consists of scripts to automate the construct, check, and deployment of the app.
Configuring a brand new CI/CD pipeline with CodeBuild for macOS entails the next high-level steps:
- Create the construct mission.
- Create the devoted fleet of machines.
- Configure a number of construct triggers.
- Add a pipeline definition file (
buildspec.yaml
) to the mission.
To get began, I open the AWS Administration Console, choose CodeBuild, and choose Create mission.
I enter a Venture title and configure the connection to the Supply code repository. I take advantage of GitHub on this instance. CodeBuild additionally helps GitLab and BitBucket. The documentation has an up-to-date listing of supported supply code repositories.
For the Provisioning mannequin, I choose Reserved capability. That is the one mannequin the place Amazon EC2 Mac cases can be found. I don’t have a fleet outlined but, so I determine to create one on the fly whereas creating the construct mission. I choose Create fleet.
On the Compute fleet configuration web page, I enter a Compute fleet title and choose macOS as Working system. Below Compute, I choose the quantity of reminiscence and the amount of vCPUs wanted for my construct mission, and the variety of cases I would like below Capability.
For this instance, I’m pleased to make use of the Managed picture. It consists of Xcode 15.4 and the simulator runtime for iOS 17.5, amongst different packages. You possibly can learn the listing of packages preinstalled on this picture within the documentation.
When completed, I choose Create fleet to return to the CodeBuild mission creation web page.
As a subsequent step, I inform CodeBuild to create a brand new service function to outline the permissions I would like for my construct atmosphere. Within the context of this mission, I have to embrace permissions to drag an Amplify configuration and entry AWS Secrets and techniques Supervisor. I’m not sharing step-by-step directions to take action, however the pattern mission code incorporates the listing of the permissions I added.
I can select between offering my set of construct instructions within the mission definition or in a buildspec.yaml
file included in my mission. I choose the latter.
That is non-compulsory, however I wish to add the construct artifact to an S3 bucket the place I can archive every construct. Within the Artifact 1 – Major part, I subsequently choose Amazon S3 as Sort, and I enter a Bucket title and artifact Title. The file title to add is specified within the buildspec.yaml
file.
Down on the web page, I configure the mission set off so as to add a GitHub WebHook. This can configure CodeBuild to begin the construct each time a commit or pull request is distributed to my mission on GitHub.
Lastly, I choose the orange Create mission button on the backside of the web page to create this mission.
Testing my builds
My mission already consists of construct scripts to arrange the construct, construct the mission, run the exams, and deploy it to Apple’s TestFlight.
I add a buildspec.yaml
file on the root of my mission to orchestrate these present scripts.
model: 0.2
phases:
set up:
instructions:
- code/ci_actions/00_install_rosetta.sh
pre_build:
instructions:
- code/ci_actions/01_keychain.sh
- code/ci_actions/02_amplify.sh
construct:
instructions:
- code/ci_actions/03_build.sh
- code/ci_actions/04_local_tests.sh
post_build:
instructions:
- code/ci_actions/06_deploy_testflight.sh
- code/ci_actions/07_cleanup.sh
artifacts:
title: $(date +%Y-%m-%d)-getting-started.ipa
recordsdata:
- 'getting began.ipa'
base-directory: 'code/build-release'
I add this file to my Git repository and push it to GitHub with the next command: git commit -am "add buildpsec" buildpec.yaml
On the console, I can observe that the construct has began.
After I choose the construct, I can see the log recordsdata or choose Part particulars to obtain a high-level standing of every part of the construct.
When the construct is profitable, I can see the iOS software IPA file uploaded to my S3 bucket.
The final construct script that CodeBuild executes uploads the binary to App Retailer Join. I can observe new builds within the TestFlight part of the App Retailer Join.
Issues to know
It takes 8-10 minutes to arrange an Amazon EC2 Mac occasion and to just accept the very first construct. This isn’t particular to CodeBuild. The builds you submit throughout the machine preparation time are queued and shall be run so as as quickly because the machine is obtainable.
CodeBuild for macOS works with reserved fleets. Opposite to on-demand fleets, the place you pay per minute of construct, reserved fleets are charged for the time the construct machines are reserved on your unique utilization, even when no builds are working. The capability reservation follows the Amazon EC2 Mac 24-hour minimal allocation interval, as required by the Software program License Settlement for macOS (article 3.A.ii).
A fleet of machines will be shared throughout CodeBuild initiatives in your AWS account. The machines within the fleet are reserved on your unique use. Solely CodeBuild can entry the machines.
CodeBuild cleans the working listing between builds, however the machines are reused for different builds. It means that you can use the CodeBuild native cache mechanism to shortly restore chosen recordsdata after a construct. In the event you construct totally different initiatives on the identical fleet, make sure to reset any world state, such because the macOS keychain, and construct artifacts, equivalent to the SwiftPM and Xcode bundle caches, earlier than beginning a brand new construct.
Once you work with customized construct photographs, make certain they’re constructed for a 64-bit Mac-Arm structure. You additionally should set up and begin the AWS Methods Supervisor Agent (SSM Agent). CodeBuild makes use of the SSM Agent to put in its personal agent and to handle the machine. Lastly, make sure that the AMI is obtainable to the CodeBuild group ARN.
CodeBuild for macOS is obtainable within the following AWS Areas: US East (Ohio, N. Virginia), US West (Oregon), Asia Pacific (Sydney), and Europe (Frankfurt). These are the identical Areas that provide Amazon EC2 Mac M2 cases.
Get began right this moment and create your first CodeBuild mission on macOS.