Extension library to run XCUITest on Visual Studio App Center
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


Visual Studio App Center XCUITest Extensions

Carthage compatible

AppCenterXCUITestExtensions is an iOS Framework for taking screenshots and labeling test steps when running XCUITest test in Visual Studio App Center or Xamarin Test Cloud. At the conclusion of each test method, a label and screenshot are automatically generated for the test report. You can create additional labels and screenshots to track your app's progress during a test method.


This framework has been deprecated.

This framework is no longer required for running XCUITests in Visual Studio App Center.

We will not be updating this repository to be compatible newer versions of Xcode 10. We expect this framework to work until at least Xcode 10.3.

Users need to migrate their tests to use Apple's XCTContext runActivityNamed:block API.

- (void)testFavoriteSongs {
  [XCTContext runActivityNamed:@"Then I touch the Library tab" block:^(id<XCTActivity>
                                                                      _Nonnull activity) {
    // Gestures always generate a screenshot which will appear in your test report.
    [self.app.buttons[@"Library"] tap];

  [XCTContext runActivityNamed:@"Then I see a list of my favorite songs" block:^(id<XCTActivity>
                                                                                 _Nonnull activity) {
    // Queries do not generate screenshots.
    // Take a screenshot before assertions to make your test report more readable.
    XCUIScreenshot *screenshot = [[XCUIScreen mainScreen] screenshot];
    XCTAttachment *attachment = [XCTAttachment attachmentWithScreenshot:screenshot];
    [attachment setLifetime:XCTAttachmentLifetimeKeepAlways];
    [activity addAttachment:attachment];
    XCTAssertNotNil(self.app.tables[@"favorite Songs"]);

To make test source code readable, we recommend this method to take screenshots:

- (void) addScreenshot:(id<XCTActivity>  _Nonnull ) activity {
  XCUIScreenshot *screenshot = [[XCUIScreen mainScreen] screenshot];
  XCTAttachment *attachment;
  attachment = [XCTAttachment attachmentWithScreenshot:screenshot];
  [attachment setLifetime:XCTAttachmentLifetimeKeepAlways];
  [activity addAttachment:attachment];

We recommend inserting screenshots during your tests to make the test report easier to interrept.


Please refer to the official App Center documentation site for installation and usage for both Visual Studio App Center and Xamarin Test Cloud.

This repository contains four demonstration apps:

  • Flowers: demonstrates the API.
  • Dido: demonstrates how to the link the framework using Carthage.
  • BeetIt: demonstrates how to link the framework using CocoaPods.
  • StickShift: demonstrates how to manually link the framework.

For a concrete example of submitting an app to App Center see bin/make/appcenter.sh


This project welcomes contributions and suggestions. Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. For details, visit https://cla.microsoft.com.

When you submit a pull request, a CLA-bot will automatically determine whether you need to provide a CLA and decorate the PR appropriately (e.g., label, comment). Simply follow the instructions provided by the bot. You will only need to do this once across all repos using our CLA.

This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact opencode@microsoft.com with any additional questions or comments.

Known Issues

Swift + bitcode

If you are building Swift XCUITests, you may encounter a build error related to bitcode. As a workaround, you can disable bitcode in your XCUITest target. To do this, go to Build Settings, search for ENABLE_BITCODE and set the value to NO for the test target. You should not need to change the setting for the App target.

screen shot 2017-04-06 at 12 43 24 pm