What is Xcode Server? How does it work?

Xcode Server is a Continuous Integration service by Apple. Since September 2017, some changes happened on Xcode and macOS Server.
Xcode 9 was released in September 2017 and integrate Xcode Server. Before Xcode 9, Xcode Server was part of macOS Server. macOS Server is a paid app, available on the app store. It is a device and user management tool.
What is the difference between Continuous Integration and Xcode Server?
Continuous Integration(CI)
CI is a development practice where developers continuously/frequently/several times a day merge code in a shared repository.
Xcode Server
Xcode Server is a CI Server which add processes in order to automate building, analyzing, testing and archiving. CI processes are useful to detect errors quickly, easily and early.
How does it work?
After setting up Xcode Server, you give Xcode Server access to your source code repository. You create and set up bots that run on the server. A bot is a process that get triggered by a specific action and build/analyze/test/archive your project. At bot needs a scheme in order to run. A Scheme is the recipe for building your project. It contains the target, source files, test bundles and any other configuration arguments for the build. A single run of the bot is called an integration.
How is a bot triggered?
A bot gets triggered manually, periodically (hourly, daily or weekly) or on commit. It can also gets triggered on an update of Xcode.
What actions can a bot do?
A bot build the project and can:
- Analyze performs static code analysis. It can detect memory leaks, unused code (variables, methods…), accessing uninitialized variables and dereferencing null pointers.
- Test performs test cases that you implemented in your test bundle.
- Archive contains the executable of you app.
Email notification
You can receive an email from an integration. Xcode Server provides 2 built-in email notification trigger types:
- New Issue Email: this email notifies the committer when there are build errors, warnings, static analysis issues or test failures. This email can include server information and logs. You can also optionally notify the committer when issues are resolved.
- Periodic Email Report: this email report is sent to recipients that you specified. Like “New Issue Email”, this email is sent when there are build errors, warnings, static analysis issues or test failures. This email can include server information, logs, commits and issues.