Advanced Testing and Continuous Integration

Similar documents
Continuous Integration with Xcode 6

Continuous Integration and Code Coverage in Xcode

eggon SDK for ios 7 Integration Instructions

Contents. About Testing with Xcode 4. Quick Start 7. Testing Basics 23. Writing Test Classes and Methods 28. At a Glance 5 Prerequisites 6 See Also 6

Going Social with ReplayKit and Game Center

Building, testing and deploying mobile apps with Jenkins & friends

Testing Tools using Visual Studio. Randy Pagels Sr. Developer Technology Specialist Microsoft Corporation

Xcode Project Management Guide. (Legacy)

Test Automation Integration with Test Management QAComplete

Chapter 1. Introduction to ios Development. Objectives: Touch on the history of ios and the devices that support this operating system.

MatrixSSL Getting Started

Integrate ExtraHop with Splunk

Your First App Store Submission

TMA Management Suite. For EAD and TDM products. ABOUT OneAccess. Value-Adding Software Licenses TMA

Introducing Xcode Source Control

Silk Test Testing Mobile Applications

ios Application Development &

Monitoring MySQL database with Verax NMS

Leveraging Rational Team Concert's build capabilities for Continuous Integration

How to Configure Microsoft System Operation Manager to Monitor Active Directory, Group Policy and Exchange Changes Using NetWrix Active Directory

F-SECURE MESSAGING SECURITY GATEWAY

Customize Mobile Apps with MicroStrategy SDK: Custom Security, Plugins, and Extensions

Tutorial: Packaging your server build

Microsoft Windows PowerShell v2 For Administrators

Setting cron job Linux/Unix operating systems using command-line interface

Lab 4.4.8a Configure a Cisco GRE over IPSec Tunnel using SDM

Monitoring Oracle Enterprise Performance Management System Release Deployments from Oracle Enterprise Manager 12c

FortiClient SSL VPN Client User s Guide

Software Development Kit for ios and Android

GWAVA 5. Migration Guide for Netware GWAVA 4 to Linux GWAVA 5

Salesforce Mobile Push Notifications Implementation Guide

Massively! Continuous Integration! A case study for Jenkins at cloud-scale

SoapUI NG Pro and Ready! API Platform Two-Day Training Course Syllabus

This documentation is made available before final release and is subject to change without notice and comes with no warranty express or implied.

Continuous Delivery on AWS. Version 1.0 DO NOT DISTRIBUTE

AG MacOS Standalone Array Client Administration Guide

NNMi120 Network Node Manager i Software 9.x Essentials

WhatsUp Gold v16.3 Installation and Configuration Guide

SQL Server Protection

How To Use Titanium Studio

BackupAgent LabTech Integration Installation and Usage

Using Microsoft Visual Studio API Reference

Creating a DUO MFA Service in AWS

Tizen Compliance Test (TCT) Hojun Jaygarl (Samsung Electronics), Cathy Shen (Intel)

Operational Decision Manager Worklight Integration

Tool for Automated Provisioning System (TAPS) Version 1.2 (1027)

Title: Appium Automation for Mac OS X. Created By: Prithivirajan M. Abstract. Introduction

Setup and Configuration Setup Assistant Migration Assistant System Preferences Configuration Profiles System Information

How To Deploy Lync 2010 Client Using SCCM 2012 R2

Computer Science and Engineering MacOS Cisco VPN Client Installation and Setup Guide

WHITE PAPER. Best Practices for Configuring PATROL for Microsoft Exchange Servers

UP L18 Enhanced MDM and Updated Protection Hands-On Lab

defacto installation guide

IBM Tivoli Workload Scheduler Integration Workbench V8.6.: How to customize your automation environment by creating a custom Job Type plug-in

Enterprise Deployment

Veritas Cluster Server

Project Builder for Java. (Legacy)

Oracle Call Center Applications Setup

GLOBAL CONSULTING SERVICES TOOLS FOR WEBMETHODS Software AG. All rights reserved. For internal use only

Laptop Backup - Administrator Guide (Windows)

VirtualXP Users Guide

To reduce or not to reduce, that is the question

Administering Jive for Outlook

Enterprise Mobile App Management Essentials. Presented by Ryan Hope and John Nielsen

Raytec Milestone Plug-in User Guide Raytec Ltd 2013

Administration Guide. BlackBerry Enterprise Service 12. Version 12.0

OnCommand Performance Manager 1.1

Using Red Hat Enterprise Linux with Georgia Tech's RHN Satellite Server Installing Red Hat Enterprise Linux

SQL Server Protection Whitepaper

Rogue Wave HostAccess 7.40J Installation Guide... 1

ProxyCap Help. Table of contents. Configuring ProxyCap Proxy Labs

WebSphere Business Monitor V7.0 Script adapter lab

How to integrate Verax NMS & APM with Verax Service Desk

Sophos Mobile Control SaaS startup guide. Product version: 6

Code::Blocks Student Manual

Escaping the Works-On-My-Machine badge Continuous Integration with PDE Build and Git

Specops Command. Installation Guide

Citrix Worx App SDK Overview

Course 55004A: Installing and Configuring System Center 2012 Operations Manager

55004A: Installing and Configuring System Center 2012 Operations Manager

Course Description. Course Audience. Course Outline. Course Page - Page 1 of 5

Citrix EdgeSight for Load Testing Installation Guide. Citrix EdgeSight for Load Testing 3.8

Configuring a Custom Load Evaluator Use the XenApp1 virtual machine, logged on as the XenApp\administrator user for this task.

dotmailer for Salesforce Installation Guide Winter 2015 Version

How to Logon with Domain Credentials to a Server in a Workgroup

What s New in Security

Using TestLogServer for Web Security Troubleshooting

Requesting and Using an Admin Apps Virtual Desktop for Advantage

TREK GETTING STARTED GUIDE

Kaspersky Security Center 10 Getting Started

SysPatrol - Server Security Monitor

Using Protection Engine for Cloud Services for URL Filtering, Malware Protection and Proxy Integration Hands-On Lab

This presentation explains how to integrate Microsoft Active Directory to enable LDAP authentication in the IBM InfoSphere Master Data Management

SnapManager 7.1 for Microsoft SharePoint Platform Backup and Restore User s Guide

ExtraHop and AppDynamics Deployment Guide

Exchange Mailbox Protection

Build Automation for Mobile. or How to Deliver Quality Apps Continuously. Angelo Rüggeberg

Transcription:

Developer Tools #WWDC16 Advanced Testing and Continuous Integration Session 409 Zoltan Foley-Fisher Xcode Engineer Eric Dudiak Xcode Engineer 2016 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from Apple.

Agenda

Agenda Testing Concepts

Agenda Testing Concepts Xcode Crash Log Gathering

Agenda Testing Concepts Xcode Crash Log Gathering Xcode Server Advanced Triggers Issue Tracking and Blame Configurable Integration User

Agenda Testing Concepts Xcode Crash Log Gathering Xcode Server Advanced Triggers Issue Tracking and Blame Configurable Integration User xcodebuild

Overview

Overview

XCTest Testing framework

XCTest Testing framework Sources TestClassA.m TestClassB.swift TestClassC.swift

XCTest Testing framework Sources Build Products TestClassA.m Compile UI.xctest TestClassB.swift Unit.xctest TestClassC.swift

Xcode Test harness

Xcode Test harness Author tests

Xcode Test harness Author tests Execute tests

Xcode Test harness Author tests Execute tests Review reports

Xcode Server Continuous Integration

Xcode Server Continuous Integration Schedules bot runs

Xcode Server Continuous Integration Schedules bot runs Generates reports

Xcode Server Continuous Integration Schedules bot runs Generates reports Sends notifications

xcodebuild Command line tool

xcodebuild Command line tool Used by Xcode Server

xcodebuild Command line tool Used by Xcode Server Build and execute tests

xcodebuild Command line tool Used by Xcode Server Build and execute tests For custom CI systems

Previous Years Sessions Testing with Xcode 6 WWDC 2014 Continuous Integration with Xcode 6 WWDC 2014 UI Testing in Xcode WWDC 2015 CI and Code Coverage in Xcode WWDC 2015

Testing Concepts

How Testing Works Behind the scenes MyTests.xctest MyApp.app

Testing Timeline Fundamental concepts Compilation Hosting Observation

Test Hosting How testing starts Unit Tests UI Tests

Test Hosting How testing starts Unit Tests UI Tests MyApp.app

Test Hosting How testing starts Unit Tests UI Tests MyApp.app

Test Hosting How testing starts Unit Tests UI Tests MyApp.app Host Application

Test Hosting How testing starts Unit Tests UI Tests MyApp.app UI Test Runner MyApp.app Host Application

Test Hosting How testing starts Unit Tests UI Tests MyApp.app UI Test Runner MyApp.app Host Application

Test Hosting How testing starts Unit Tests UI Tests MyApp.app UI Test Runner MyApp.app Host Application Target Application

Test Hosting Comparison Unit Tests UI Tests Direct access to host app data and APIs Uses Accessibility to access target app All tests run in single app launch Tests launch app for every test case

Test Hosting Comparison Unit Tests UI Tests Direct access to host app data and APIs Uses Accessibility to access target app All tests run in single app launch Tests launch app for every test case

Testing Timeline Fundamental concepts Compilation Hosting

Testing Timeline Fundamental concepts Compilation Hosting Observation

Test Observation Test case structure

Test Observation Test case structure Test Case 1 Test Case 2

Test Observation Test case structure Test Suite A

Test Observation Test case structure Test Suite A Test Suite B

Test Observation Test case structure Test Bundle Test Suite A Test Suite B

Test Observation Test case structure Setup or tear down work Test Bundle Test Suite A Test Suite B

Test Observation Test case structure Setup or tear down work Custom logging Test Bundle Test Suite A Test Suite B

Test Observation XCTestObservation Protocol optional public func testbundlewillstart(_ testbundle: AnyObject!) BUNDLE WILL START Test Bundle Test Suite A Test Suite B

Test Observation XCTestObservation Protocol optional public func testsuitewillstart(_ testsuite: AnyObject!) SUITE WILL START Test Bundle Test Suite A Test Suite B

Test Observation XCTestObservation Protocol optional public func testcasewillstart(_ testcase: AnyObject!) CASE WILL START Test Bundle Test Suite A Test Suite B

Test Observation XCTestObservation Protocol optional public func testcasedidfinish(_ testcase: AnyObject!) CASE DID FINISH Test Bundle Test Suite A Test Suite B

Test Observation XCTestObservation Protocol optional public func testcase(_ testcase: AnyObject!, didfailwithdescription description: AnyObject!, infile filepath: AnyObject!, atline linenumber: AnyObject!) CASE DID FAIL Test Bundle Test Suite A Test Suite B

Test Observation XCTestObservation Protocol optional public func testsuitedidfinish(_ testsuite: AnyObject!) SUITE DID FINISH Test Bundle Test Suite A Test Suite B

Test Observation XCTestObservation Protocol optional public func testbundledidfinish(_ testbundle: AnyObject!) BUNDLE DID FINISH Test Bundle Test Suite A Test Suite B

// Test Observation // Example LoggingObserver class LoggingObserver: NSObject, XCTestObservation { }

// Test Observation // Example LoggingObserver class LoggingObserver: NSObject, XCTestObservation { override init() { super.init() let sharedcenter = XCTestObservationCenter.shared() sharedcenter.addtestobserver(self) } }

// Test Observation // Example LoggingObserver class LoggingObserver: NSObject, XCTestObservation { override init() { super.init() let sharedcenter = XCTestObservationCenter.shared() sharedcenter.addtestobserver(self) } internal func testbundlewillstart(_ testbundle: Bundle) { print("lights down, show is about to start") } }

// Test Observation // Example LoggingObserver class LoggingObserver: NSObject, XCTestObservation { override init() { super.init() let sharedcenter = XCTestObservationCenter.shared() sharedcenter.addtestobserver(self) } internal func testbundlewillstart(_ testbundle: Bundle) { print("lights down, show is about to start") } internal func testcase(_ testcase: AnyObject!, didfailwithdescription description: AnyObject!, infile filepath: AnyObject!, atline linenumber: AnyObject!) print("that sounds off key ") } }

// Test Observation // Example LoggingObserver class LoggingObserver: NSObject, XCTestObservation { override init() { super.init() let sharedcenter = XCTestObservationCenter.shared() sharedcenter.addtestobserver(self) } internal func testbundlewillstart(_ testbundle: Bundle) { print("lights down, show is about to start") } internal func testcase(_ testcase: AnyObject!, didfailwithdescription description: AnyObject!, infile filepath: AnyObject!, atline linenumber: AnyObject!) print("that sounds off key ") } } internal func testbundledidfinish(_ testbundle: Bundle) { print("lights up, don t forget your coat!") }

Test Observation Use NSPrincipalClass

Test Observation Use NSPrincipalClass Test Bundle Info.plist

Test Observation Use NSPrincipalClass Test Bundle Info.plist Test specific instantiation

Testing Concepts Summary Compilation Hosting Observation

Crash Log Gathering

Crash Log Gathering Crashes during testing

Crash Log Gathering Crashes during testing

Crash Log Gathering Crashes during testing Test host or target application may crash

Crash Log Gathering Crashes during testing Test host or target application may crash Xcode completes test suite

Crash Log Gathering Crashes during testing Test host or target application may crash Xcode completes test suite But how to resolve the crash?

Crash Log Gathering NEW Improved test reports

Crash Log Gathering NEW Improved test reports

Crash Log Gathering NEW Improved test reports For Unit and UI tests

Crash Log Gathering NEW Improved test reports For Unit and UI tests Local and Xcode Server crash logs

Crash Log Gathering NEW Improved test reports For Unit and UI tests Local and Xcode Server crash logs Logs included in test report

Crash Log Gathering NEW Improved test reports For Unit and UI tests Local and Xcode Server crash logs Logs included in test report View crashes in Xcode s Debug Navigator

Demo Crash Log Gathering

Crash Log Gathering Improved test reports

Crash Log Gathering Improved test reports Crash logs gathered in test reports

Crash Log Gathering Improved test reports Crash logs gathered in test reports View crashes in Xcode s Debug Navigator

Xcode Server Continuous Integration in Xcode Eric Dudiak Xcode Engineer

Xcode Server Overview

Xcode Server Overview Custom environment variables

Xcode Server Overview Custom environment variables Advanced trigger editing

Xcode Server Overview Custom environment variables Advanced trigger editing Issue tracking and blame

Xcode Server Overview Custom environment variables Advanced trigger editing Issue tracking and blame Upgrade integrations

Xcode Server Overview Custom environment variables Advanced trigger editing Issue tracking and blame Upgrade integrations Configurable integration user

Custom Environment Variables New in Xcode 7.3

Advanced Triggers NEW Integration scripts

Advanced Triggers NEW Email notifications

Advanced Triggers NEW Email notifications

Advanced Triggers NEW Email notifications

Advanced Triggers NEW Email notifications

Advanced Triggers NEW Email notifications

Advanced Triggers NEW Email notifications

Issue Tracking and Blame We all have issues

Issue Tracking and Blame We all have issues Nobody is perfect

Issue Tracking and Blame We all have issues Nobody is perfect Tests will fail

Issue Tracking and Blame We all have issues Nobody is perfect Tests will fail Errors will come up

Issue Tracking and Blame We all have issues Nobody is perfect Tests will fail Errors will come up Xcode will blame you

Issue Tracking and Blame We all have issues Nobody is perfect Tests will fail Errors will come up Xcode will blame you Even if you are perfect

Issue Tracking and Blame We all have issues Nobody is perfect Tests will fail Errors will come up Xcode will blame you Even if you are perfect SDKs change

Issue Tracking and Blame We all have issues Nobody is perfect Tests will fail Errors will come up Xcode will blame you Even if you are perfect SDKs change Language improvements

Issue Tracking and Blame We all have issues Nobody is perfect Tests will fail Errors will come up Xcode will blame you Even if you are perfect SDKs change Language improvements Smarter tools

Issue Tracking and Blame NEW Identifying issue owners

Issue Tracking and Blame NEW Identifying issue owners Lets you know when it s time to act

Issue Tracking and Blame NEW Identifying issue owners Lets you know when it s time to act You broke it

Issue Tracking and Blame NEW Identifying issue owners Lets you know when it s time to act You broke it You introduced an issue

Issue Tracking and Blame NEW Identifying issue owners Lets you know when it s time to act You broke it You introduced an issue Issue is on or near line you modified

Issue Tracking and Blame NEW Identifying issue owners Lets you know when it s time to act You broke it You introduced an issue Issue is on or near line you modified You are the only committer

Issue Tracking and Blame NEW Identifying issue owners Lets you know when it s time to act You broke it You introduced an issue Issue is on or near line you modified You are the only committer You can help fix it

Issue Tracking and Blame NEW Identifying issue owners Lets you know when it s time to act You broke it You introduced an issue Issue is on or near line you modified You are the only committer You can help fix it You probably know how to fix an issue

Issue Tracking and Blame NEW Identifying issue owners Lets you know when it s time to act You broke it You introduced an issue Issue is on or near line you modified You are the only committer You can help fix it You probably know how to fix an issue You seem to know about the area involved

Issue Tracking and Blame NEW Identifying issue owners Lets you know when it s time to act You broke it You introduced an issue Issue is on or near line you modified You are the only committer You can help fix it You probably know how to fix an issue You seem to know about the area involved Fuzzy matching

Issue Tracking and Blame NEW Bot configuration changes

Issue Tracking and Blame NEW Bot configuration changes Tracks changes to your bot configuration

Issue Tracking and Blame NEW Bot configuration changes Tracks changes to your bot configuration Attributes issues to changes where possible

Issue Tracking and Blame NEW Bot configuration changes Tracks changes to your bot configuration Attributes issues to changes where possible Included in email reports

Upgrade Integrations NEW When it s not your fault

Upgrade Integrations NEW When it s not your fault Re-integrates your project

Upgrade Integrations NEW When it s not your fault Re-integrates your project Same revision as the last integration

Upgrade Integrations NEW When it s not your fault Re-integrates your project Same revision as the last integration Any new issues are due to the upgrade

Upgrade Integrations NEW When it s not your fault Re-integrates your project Same revision as the last integration Any new issues are due to the upgrade Prevents blaming you for broken builds

Configurable Integration User

Configurable Integration User Improved visibility into your integrations

Configurable Integration User Improved visibility into your integrations Allows customization

Configurable Integration User Improved visibility into your integrations Allows customization You own and manage how your integrations run

Configurable Integration User Improved visibility into your integrations Allows customization You own and manage how your integrations run Can be any user on the system

Configurable Integration User Improved visibility into your integrations Allows customization You own and manage how your integrations run Can be any user on the system Runs as a menu extra

Custom Integration User Improved visibility into your integrations Allows customization You own and manage how your integrations run Can be any user on the system Runs as a menu extra

Custom Integration User Improved visibility into your integrations Allows customization You own and manage how your integrations run Can be any user on the system Runs as a menu extra

Custom Integration User Improved visibility into your integrations Allows customization You own and manage how your integrations run Can be any user on the system Runs as a menu extra

Custom Integration User Improved visibility into your integrations Allows customization You own and manage how your integrations run Can be any user on the system Runs as a menu extra

Custom Integration User Improved visibility into your integrations Allows customization You own and manage how your integrations run Can be any user on the system Runs as a menu extra

Custom Integration User Improved visibility into your integrations Allows customization You own and manage how your integrations run Can be any user on the system Runs as a menu extra

Custom Integration User Improved visibility into your integrations Allows customization You own and manage how your integrations run Can be any user on the system Runs as a menu extra

Custom Integration User Improved visibility into your integrations Allows customization You own and manage how your integrations run Can be any user on the system Runs as a menu extra

Custom Integration User Improved visibility into your integrations Allows customization You own and manage how your integrations run Can be any user on the system Runs as a menu extra

Demo Xcode Server

Configurable Integration User

Configurable Integration User Improved visibility

Configurable Integration User Improved visibility Customized simulators

Configurable Integration User Improved visibility Customized simulators Normal macos user

Configurable Integration User Improved visibility Customized simulators Normal macos user Runs as a menu extra

Configurable Integration User Best practices

Configurable Integration User Best practices Dedicate a new user

Configurable Integration User Best practices Dedicate a new user Avoid using administrator accounts

Configurable Integration User Best practices Dedicate a new user Avoid using administrator accounts Stay logged in with Fast User Switching

Configurable Integration User Best practices Dedicate a new user Avoid using administrator accounts Stay logged in with Fast User Switching Disable screen lock

Configurable Integration User Best practices Dedicate a new user Avoid using administrator accounts Stay logged in with Fast User Switching Disable screen lock Customize for your needs

Configurable Integration User Best practices Dedicate a new user Avoid using administrator accounts Stay logged in with Fast User Switching Disable screen lock Customize for your needs Simulators

Configurable Integration User Best practices Dedicate a new user Avoid using administrator accounts Stay logged in with Fast User Switching Disable screen lock Customize for your needs Simulators Networking (VPN and proxies)

Configurable Integration User Best practices Dedicate a new user Avoid using administrator accounts Stay logged in with Fast User Switching Disable screen lock Customize for your needs Simulators Networking (VPN and proxies) User data and settings

Configurable Integration User Best practices Dedicate a new user Avoid using administrator accounts Stay logged in with Fast User Switching Disable screen lock Customize for your needs Simulators Networking (VPN and proxies) User data and settings Advanced provisioning

xcodebuild Building block for Continuous Integration Systems

xcodebuild Test action xcodebuild test -workspace <path> -scheme <name> -destination <specifier>

xcodebuild Test action xcodebuild test -workspace <path> -scheme <name> -destination <specifier> Builds sources

xcodebuild Test action xcodebuild test -workspace <path> -scheme <name> -destination <specifier> Builds sources Installs app on destination if needed

xcodebuild Test action xcodebuild test -workspace <path> -scheme <name> -destination <specifier> Builds sources Installs app on destination if needed Runs tests

xcodebuild Test action xcodebuild test -workspace <path> -scheme <name> -destination <specifier> Builds sources Installs app on destination if needed Runs tests Reports results in console

Test Options NEW Customizing tests xcodebuild test -workspace <path> -scheme <name> -destination <specifier> -only-testing:testbundlea/testsuitea/testcasea -only-testing:testbundleb/testsuiteb -only-testing:testbundlec

Test Options NEW Customizing tests xcodebuild test -workspace <path> -scheme <name> -destination <specifier> -only-testing:testbundlea/testsuitea/testcasea -only-testing:testbundleb/testsuiteb -only-testing:testbundlec xcodebuild test -scheme <name> -skip-testing:testbundled/testsuited/testcased

Additional Test Actions NEW Separating building from testing Test

Additional Test Actions NEW Separating building from testing Build for Testing Test without Building

Building for Testing NEW Only building xcodebuild build-for-testing -workspace <path> -scheme <name> -destination <specifier>

Building for Testing NEW Only building xcodebuild build-for-testing -workspace <path> -scheme <name> -destination <specifier> Builds sources for testing

Building for Testing NEW Only building xcodebuild build-for-testing -workspace <path> -scheme <name> -destination <specifier> Builds sources for testing Outputs products in Derived Data

Building for Testing NEW Only building xcodebuild build-for-testing -workspace <path> -scheme <name> -destination <specifier> Builds sources for testing Outputs products in Derived Data Generates an xctestrun file

Test Without Building NEW Only testing xcodebuild test-without-building -workspace <path> -scheme <name> -destination <specifier>

Test Without Building NEW Only testing xcodebuild test-without-building -workspace <path> -scheme <name> -destination <specifier> Finds binary products in Derived Data

Test Without Building NEW Only testing xcodebuild test-without-building -workspace <path> -scheme <name> -destination <specifier> Finds binary products in Derived Data Installs if necessary

Test Without Building NEW Only testing xcodebuild test-without-building -workspace <path> -scheme <name> -destination <specifier> Finds binary products in Derived Data Installs if necessary Runs tests and report results as before

Test Without Building NEW Only testing xcodebuild test-without-building -xctestrun <path> -destination <specifier>

Test Without Building NEW Only testing xcodebuild test-without-building -xctestrun <path> -destination <specifier> Ingests the xctestrun file

Test Without Building NEW Only testing xcodebuild test-without-building -xctestrun <path> -destination <specifier> Ingests the xctestrun file Finds binary products relative to xctestrun file

Test Without Building NEW Only testing xcodebuild test-without-building -xctestrun <path> -destination <specifier> Ingests the xctestrun file Finds binary products relative to xctestrun file Runs tests, reports results as before

xcodebuild Distributed testing Test Machine #1 Build Machine Test Machine #2

xcodebuild Distributed testing Test Machine #1 Build Machine Test Machine #2

xcodebuild Distributed testing Test Machine #1 xcodebuild build-for-testing Build Machine Test Machine #2

xcodebuild Distributed testing Test Machine #1 xcodebuild build-for-testing Build Machine Test Machine #2

xcodebuild Distributed testing xcodebuild test-without-building Test Machine #1 xcodebuild build-for-testing Build Machine Test Machine #2

xcodebuild Distributed testing xcodebuild test-without-building Test Machine #1 xcodebuild build-for-testing xcodebuild test-without-building Build Machine Test Machine #2

xctestrun NEW Test manifest

xctestrun NEW Test manifest

xctestrun NEW Test manifest Tests to run or skip

xctestrun NEW Test manifest Tests to run or skip Environment variables

xctestrun NEW Test manifest Tests to run or skip Environment variables Command-line arguments

xctestrun NEW Test manifest Tests to run or skip Environment variables Command-line arguments Documentation in man pages

xctestrun NEW Test manifest Tests to run or skip Environment variables Command-line arguments Documentation in man pages man xcodebuild.xctestrun

Summary

Summary Testing Concepts Xcode Crash Log Gathering Xcode Server Advanced Triggers Issue Tracking and Blame Configurable Integration User xcodebuild

More Information https://developer.apple.com/wwdc16/409

Labs Xcode Open Hours Xcode Open Hours Developer Tools Lab C Developer Tools Lab B Thursday 9:00AM Friday 9:00AM