Xcode Hardware Performance
These are the results from running Xcode on a non-trivial open source project using various Macs. The goal is to give developers a relative idea of how each computer model compares to one another. Read the specifics and contributing sections for more info.
Xcode 12
Computer Model | CPU | RAM | Fresh Build Time | Incremental Build Time | Xcode Version | Date & Commit Hash | |
---|---|---|---|---|---|---|---|
MacBook Pro 13" (Late 2020) | Apple M1 | 16 GB | 0:21 | 0:04 | 12.3 | 2020-12-27 (commit) | |
MacBook Pro 15" (Mid 2018) | i7-8850H (2,6 GHz) | 16 GB | 0:54 | 0:09 | 12.3 | 2020-12-27 (commit) | |
MacBook Pro 13" (Early 2015) | i5-5257U (2.7 GHz) | 16 GB | 1:48 | 0:17 | 12.2 | 2020-11-20 (commit) | |
MacBook Pro 13" (Early 2015) | i5-5257U (2.7 GHz) | 16 GB | 1:32 | 0:15 | 12.2 | 2020-11-20 (commit) | |
Mac Mini (Late 2020) | Apple M1 | 16 GB | 0:19 | 0:04 | 12.2 | 2020-11-20 (commit) | |
Mac Mini (2018) | i7-8700B (3.2GHz) | 32 GB | 0:40 | 0:08 | 12.2 | 2020-11-25 (commit) | |
MacBook Pro (Late 2020) | Apple M1 | 16 GB | 0:35 | 0:04 | 12.2 | 2020-11-28 (commit) | |
MacBook Pro 16", Retina, 2019 |
i9-9880H (2.3 GHz) | 32 GB | 0:31 | 0:07 | 12.2 | 2020-11-26 (commit) | |
MacBook Pro 15" (Mid 2015) | i7-4770HQ (2.2 GHz) | 16 GB | 0:55 | 0:15 | 12.2 | 2020-11-26 (commit) | |
iMac Pro 27" (Late 2017) | 3.2 GHz 8-Core Intel Xeon W | 32 GB | 0:33 | 0:07 | 12.2 | 2020-12-07 (commit) | |
MacBook Air (Late 2020) | Apple M1 | 16 GB | 0:33 | 0:06 | 12.2 | 2020-12-07 (commit) | |
MacBook Air (Late 2018) | I5-8210Y (1.6 GHz) | 8 GB | 2:15 | 0:20 | 12.2 | 2020-12-07 (commit) | |
MacBook Air (Late 2020) | Apple M1 | 8 GB | 0:20 | 0:08 | 12.4 | 2021-3-13 (commit) | |
Custom PC | AMD Ryzen 5 3600 3.6 GHz | 16 GB | 0.34 | 0.08 | 12.4 | 2021-3-21 |
Xcode 11
Computer Model | CPU | RAM | Fresh Build Time | Incremental Build Time | Xcode Version | Date & Commit Hash | New Build System? | |
---|---|---|---|---|---|---|---|---|
iMac 27" 512GB SSD, 2020 |
3.8 GHz i7 | 64 GB | 0:26 | 0:07 | 11.7 | 2020-09-14 (commit) | ||
iMac 27" 512GB SSD, 2020 |
3.8 GHz i7 | 8 GB | 0:33 | 0:05 | 11.7 | 2020-09-14 (commit) | ||
iMac 27" 512GB SSD, 2020 |
3.8 GHz i7 | 72 GB | 0:29 | 0:07 | 11.7 | 2020-09-14 (commit) | ||
Custom PC | Intel i9 9940X 4.6GHz(all cores) | 64 GB | 0:27 | 0:08 | 11.4.1 | 2020-05-15 | ||
Custom PC | AMD Ryzen 9 3950X 4.3GHz(all cores) | 32 GB | 0:21 | 0:03 | 11.4 | 2020-04-16 (commit) | ||
Custom PC | Intel i7-10700k 5.0GHz(all cores) | 32 GB | 0:24 | 0:07 | 11.6 | 2020-07-25 | ||
iMac 27" 512GB SSD, 2019 |
3.6 GHz i9 | 40 GB | 0:26 | 0:5 | 11.3.1 | 2020-01-22 (commit) | ||
Custom PC QEMU | AMD Ryzen 9 3900X (20 cores qemu) | 48 GB | 0:27 | 0:07 | 11.6.0 | 2020-07-25 (commit) | ||
iMac Pro 10 Core, 2017 |
3.0 GHz Xeon W | 64 GB | 0:28 | 0:08 | 11.4.1 | 2020-04-23 (commit) | ||
MacBook Pro 16", Retina, 2019, 500 GB SSD |
i9-9980HK 2.4 GHz | 64 GB | 0:32 | 0:10 | 11.4 | 2020-04-02 | (commit) | |
Custom PC | i7-9700K 3.6 GHz (Stock) | 32 GB | 0:35 | 0:06 | 11.2.1 | 2019-11-26 (commit) | ||
Custom PC | i9-9900K 3.6 GHz (Stock) | 64 GB | 0:35 | 0:06 | 11.3.1 | 2020-02-29 (commit) | ? | |
Mac Mini, Late 2018, 512GB SSD |
3.2 GHz i7 | 32 GB | 0:37 | 0:11 | 11.3.1 | 2020-01-15 (commit) | ||
Mac Mini, Late 2018, 512GB SSD |
3.2 GHz i7 | 32 GB | 0:37 | 0:11 | 11.3.1 | 2020-01-15 (commit) | ||
MacBook Pro 16", Retina, 2019, 1 TB SSD |
i9-9880H 2.3 GHz | 32 GB | 0:39 | 0:09 | 11.2.1 (11B500) | 2019-11-26 (commit) | ||
Mac Pro, 1 TB SSD, Late 2019 |
3.2 GHz 16-Core Xeon | 32 GB | 0:40 | 0:06 | 11.3 | 2020-01-10 | ? | |
MacBook Pro 16", Retina, 2019, 1 TB SSD |
i9 2.4 GHz | 32 GB | 0:40 | 0:07 | 11.3 | 2020-01-10 | ? | |
MacBook Pro 15", Retina, Mid 2015, 512GB SSD |
2.5 GHz i7-4870HQ | 16 GB | 0:45 | 0:07 | 11.3.1 | 2020-01-23 (commit) | ||
MacBook Pro 15", Retina, 2018, 1TB SSD |
2,6 GHz 6-Core i7 | 32 GB | 0:44 | 0:09 | 11.4 | 2020-05-12 (pull) | ||
Mac Pro, 2013, 512GB Flash storage | 3.3 GHz Xeon E5-2667v2 | 64 GB | 0:54 | 0:08 | 11.3.1 | 2020-02-29 (commit) | ? | |
iMac 5K 27", Late 2014, 1 TB SSD |
4.0 GHz i7-4790K | 32 GB | 0:57 | 0:22 | 11.3.1 | 2020-02-07 (commit) | ||
MacBook Pro 15", Retina, 2016, 512GB SSD |
2.7 GHz i7-6820HQ | 16 GB | 0:59 | 0:08 | 11.3.1 | 2020-01-18 (commit) | ||
MacBook Pro 15", Retina, 2012, 751GB SSD |
2.7 GHz i7-3820QM | 16 GB | 1:02 | 0:16 | 11.3.1 | 2020-02-28 (commit) | ||
Mac Mini, Late 2012, 250GB SSD (Samsung 850 EVO) |
2.3 GHz i7 | 16 GB | 1:06 | 0:17 | 11.3.1 | 2020-01-15 (commit) | ||
MacBook Pro 15", Retina, 2019, 512GB SSD |
2.3 GHz i9 | 16 GB | 1:10 | 0:05 | 11.3.1 | 2020-02-16 (commit) | ||
iMac 27" 512GB SSD, Late 2013 |
3.2 GHz i5 | 16 GB | 1:13 | 0:21 | 11.3 | 2019-11-06 (commit) | ||
MacBook Pro 13", Retina, Mid 2014, 256GB SSD |
2.6 GHz i5-4278U | 8Gb | 1:43 | 0:27 | 11.2 | 2019-11-06 (commit) | ||
MacBook Pro 15", Mid 2009, 240GB SSD |
2,66 GHz Intel Core 2 Duo | 8 GB | 2:38 | 0:26 | 11.4 | 2020-02-29 (commit) | ? | |
Custom PC | AMD Ryzen 7 1700X @ 3.75GHz | 16 GB | 0:41 | 0:06 | 11.5 | 2020-06-23 (commit] |
Xcode 10
Computer Model | CPU | RAM | Fresh Build Time | Incremental Build Time | Xcode Version | Date & Commit Hash | New Build System? | |
---|---|---|---|---|---|---|---|---|
Custom PC | i9-9900K 3.6 GHz (Stock) | 32 GB | 0:17 | 0:05 | 10.1 | 2019-05-23 | ||
Mac Mini, Late 2018, 256GB SSD |
3.2 GHz i7-8700B | 32 GB | 0:25 | 0:02 | 10.2.1 | 2019-07-02 (commit) | ||
Custom PC | i9-9900K 4.8 GHz | 32 GB | 0:25 | 0:07 | 10.1 | 2018-11-04 | ||
MacBook Pro Retina, 15", Mid 2018 |
2,6 GHz i7-8850H | 16 GB | 0:28 | 0:09 | 10.1 | 2019-01-12 (commit) | ||
iMac 5K 27", Early 2019, 512GB SSD |
3.6 GHz i9-9900K | 16 GB | 0:29 | 0:05 | 10.2.1 | 2019-06-06 (commit) | ||
Custom PC | 4.0 GHz i7-8086K | 32 GB | 0:31 | 0:11 | 10.1 | 2019-01-10 (commit) | ||
MacBook Pro Retina, 15", Mid 2019 |
2.3 GHz i9-9880H | 16 GB | 0:32 | 0:05 | 10.3 | 2019-09-03 (commit) | ||
Mac Mini, Late 2018, 512GB SSD |
3.2 GHz i7-8700B | 16 GB | 0:32 | 0:07 | 10.1 | 2018-11-15 (commit) | ||
Mac Mini, Late 2018, 512GB SSD |
3.2 GHz i7 | 32 GB | 0:33 | 0:12 | 10.2.1 | 2020-01-15 (commit) | ||
MacBook Pro Retina, 15", Mid 2018 |
2.2 GHz i7-8750H | 16 GB | 0:35 | 0:08 | 10.1 | 2018-11-16 (commit) | ||
MacBook Pro Retina, 15", Mid 2015 |
2.8 GHz i7-4980HQ | 16 GB | 0:36 | 0:038 | 10.0 | 2018-09-24 (commit) | ||
iMac 5K 27", Early 2019, 256GB SSD |
3.0 GHz i5-8500 | 40 GB | 0:38 | 0:08 | 10.3 | 2019-08-07 | ||
iMac 5K 27", Late 2014, 1 TB SSD |
4.0 GHz i7-4790K | 32 GB | 0:40 | 0:13 | 10.1 | 2019-03-08 (commit) | ||
Mac Pro Flash Storage, Late 2013 |
2.7 GHz 12-Core Xeon E5 | 64 GB | 0:40 | 0:08 | 10.1 | 2018-12-15 (commit) | ||
MacBook Pro Retina, 15", Mid 2012 |
2.6 GHz i7-3720QM | 16 GB | 0:40 | 0:042 | 10.0 | 2018-09-13 (commit) | ||
Mac Mini, Late 2018, 256GB SSD |
3.0 GHz i5-8500B | 8 GB | 0:42 | 0:08 | 10.1 | 2018-11-15 (commit) | ||
MacBook Pro Touch Bar, 15", Mid 2018 |
2.9 GHz i9-8950HK | 32 GB | 0:43 | 0:06 | 10.2 | 2019-05-27 (commit) | ||
MacBook Pro Retina, 15", Mid 2015 |
2.5 GHz i7-4870HQ | 16 GB | 0:46 | 0:10 | 10.1 | 2019-03-03 (commit) | ||
MacBook Pro Retina, 13", 2018, Four Thunderbolt 3 Ports |
2.7 GHz i7-8559U | 16 GB | 0:49 | 0:09 | 10.2.1 | 2019-08-01 (commit) | ||
MacBook Pro Retina, 15", Mid 2014 |
2.8 GHz i7-4980HQ | 16 GB | 0:49 | 0:09 | 10.1 | 2018-11-16 (commit) | ||
Mac Mini, Late 2012, 250GB SSD (Samsung 850 EVO) |
2.3 GHz i7 | 16 GB | 1:03 | 0:21 | 10.2.1 | 2020-01-15 (commit) | ||
Mac Mini, Late 2012 |
2.3 GHz i7-3615QM | 8 GB | 1:05 | 0:14 | 10.1 | 2018-11-15 (commit) | ||
MacBook Pro Retina, 13", Early 2015 |
2.7 GHz i5-5257U | 8 GB | 1:26 | 0:12 | 10.1 | 2019-02-15 (commit) | ||
MacBook Air 13", Mid 2017 |
1.8 GHz i5-5350U | 8 GB | 1:47 | 0:15 | 10.0 | 2018-10-01 (commit) | ||
MacBook Pro Non-Retina, 13", Mid 2012, 180 GB SSD |
2.5 GHz i5-3210M | 16 GB | 2:35 | 0:17 | 10.1 | 2018-11-16 (commit) |
Xcode 9
Computer Model | CPU | RAM | Fresh Build Time | Incremental Build Time | Xcode Version | Date & Commit Hash | New Build System? | |
---|---|---|---|---|---|---|---|---|
MacBook Pro 13", Mid-2017, 256GB SSD |
2.3 GHz i5 (I5-7360U) | 8 GB | 01:12 | 0:12 | 9.2 | 2018-06-29 | ||
MacBook Pro 13", Mid-2017, 256GB SSD |
2.3 GHz i5 (I5-7360U) | 8 GB | 01:42 | 0:12 | 9.2 | 2018-06-29 | ||
Mac Mini, Mid-2011, 128GB SSD |
2.3 GHz i5 (I5-2415M) | 8 GB | 02:04 | 0:20 | 9.2 | 2018-07-04 | ||
Mac Mini, Mid-2011, 128GB SSD |
2.3 GHz i5 (I5-2415M) | 8 GB | 03:12 | 0:20 | 9.2 | 2018-07-04 | ||
Custom PC Early 2018 |
i7-8700K 4.70+ GHz | 32 GB | 0:19 | 0:07 | 2018-03-11 (commit) | |||
Custom PC Early 2016 |
i7-6700k 4.5 GHz | 32 GB | 0:23 | 0:07 | 9.4.1 | 2018-05-19 (commit) | ||
MacBook Pro Retina, 13", Mid 2018 |
2.7 GHz i7-8559U | 16 GB | 0:27 | 0:09 | 9.4.1 | 2018-05-19 (commit) | ||
MacBook Pro Retina, 15", 2018 |
2.9 GHz i9 | 32 GB | 0:30 | 0:04 | 2018-05-19 (commit) | |||
MacBook Pro Retina, 15", Mid 2018 |
2.9 GHz i9 | 32 GB | 0:32 | 0:04 | 2018-05-19 (commit) | |||
Custom PC Early 2018 |
i7-7700k 4.5 GHz | 16 GB | 0:35 | 0:05 | 2018-03-10 | |||
Mac Pro Flash Storage, Late 2013 |
3.7 GHz 4-Core Xeon E5 | 32 GB | 0:35 | 0:11 | 9.4.1 | 2018-06-20 (commit) | ||
Custom PC Early 2018 |
i7-8700K 4.70+ GHz | 32 GB | 0:36 | 0:07 | 2018-02-19 (commit) | |||
Custom PC Late 2015 |
i7-4790k 4.0 GHz | 32 GB | 0:40 | 0:07 | 2018-02-22 (commit) | |||
iMac Pro 10 Core, Late 2017 |
3 GHz Intel Xeon W | 64 GB | 0:41 | 0:07 | 2017-12-28 | |||
MacBook Pro Retina, 15", Mid 2018 |
2.2 GHz i7 | 32 GB | 0:42 | 0:09 | 2018-05-19 (commit) | |||
iMac Pro 18 Core, Late 2017 |
2.3 GHz Intel Xeon W | 128 GB | 0:47 | 0:07 | 2018-03-07 (commit) | |||
Custom PC Early 2018 |
i7-7700k 4.5 GHz | 16 GB | 0:48 | 0:07 | 2018-03-10 | |||
iMac 27" 5K 1TB SSD, Mid 2017 |
4,2 GHz i7 | 40 GB | 0:49 | 0:08 | 2018-01-18 | |||
MacBook Pro Retina, 15", 2017 |
2.9 GHz i7 | 16 GB | 0:49 | 0:16 | 2017-10-09 | |||
MacBook Pro Retina, 15", 2017 |
2.9 GHz i7 | 16 GB | 0:50 | 0:15 | 2017-10-09 | |||
MacBook Pro Retina, 15", 2015 |
2.5 GHz i7 | 16 GB | 0:51 | 0:09 | 9.2 | 2018-03-02 (commit) | ||
MacPro Late 2013 | 2.7 GHz 12core Intel Xeon E5 | 64 GB | 0:54 | 0:10 | 2018-03-07 (commit) | |||
iMac 27" 256GB SSD, Late 2013 |
3.2 GHz i5 | 24 GB | 0:56 | 0:10 | 9.2 | 2018-03-02 (commit) | ||
MacBook Pro Retina, 15", 2016 |
2.9 GHz i7 | 16 GB | 1:04 | 0:09 | 9.4.1 | 2018-07-18 (commit) | ||
MacBook Pro Retina, 15", Mid 2012 |
2.6 GHz i7-3720QM | 16 GB | 1:04 | 0:13 | 9.4.1 | 2018-05-19 (commit) | ||
MacBook Pro Retina, 15", 2016 |
2.9 GHz i7 | 16 GB | 1:06 | 0:10 | 9.4.1 | 2018-07-18 (commit) | ||
MacBook Pro Retina, 15", Late 2013 |
2.6 GHz i7 | 16 GB | 1:09 | 0:12 | 2018-02-28 | |||
MacBook Pro Retina, 13", Early 2015 |
2.7 GHz i5 | 8 GB | 1:12 | 0:18 | 2018-05-19 (commit) | |||
Mac Pro Flash Storage, Late 2013 |
3.7 GHz 4-Core Xeon E5 | 32 GB | 1:15 | 0:10 | 9.4.1 | 2018-06-20 (commit) | ||
MacBook Pro Retina, 15", 2015 |
2.8 GHz i7 | 16 GB | 1:17 | 0:12 | 2018-01-02 | |||
MacBook Pro Retina, 15", 2015 |
2.5 GHz i7 | 16 GB | 1:20 | 0:09 | 9.2 | 2018-03-02 (commit) | ||
iMac 27" 256GB SSD, Late 2013 |
3.2 GHz i5 | 24 GB | 1:27 | 0:10 | 9.2 | 2018-03-02 (commit) | ||
Mac Mini Mid 2012, 512 SSD |
2.3 GHz Quad-Core i7 | 16 GB | 1:32 | 0:18 | 2017-10-20 | |||
MacBook Pro Retina, 15", 2017 |
2.8 GHz i7 | 16 GB | 1:50 | 0:14 | ||||
Custom Laptop Mid 2018 |
i5-8250u 3.4 GHz | 16 GB | 1:58 | 0:10 | 9.3 | 2018-05-11 | ||
iMac 27" 120GB SSD, Mid 2010 |
2.93 GHz i7 | 8 GB | 2:05 | 0:16 | 9.3 | 2018-03-21 | ||
MacBook Pro Retina, 13", Early 2015 |
2.7 GHz i5 | 8 GB | 2:25 | 0:31 | 2018-05-19 (commit) | |||
MacBook Retina, 15", Mid 2012 |
2.6 GHz i7 | 8 GB | 2:26 | 0:23 | ||||
MacBook Pro Retina, 13", 2014 |
2.6 GHz i5 | 8 GB | 2:30 | 0:23 | 2018-01-04 | |||
MacBook Pro 13", Mid 2012 |
2.9 GHz i7 | 8 GB | 2:30 | 0:23 |
Xcode 8
Specifications
For the test, I decided to use an app that I actually work on: eidolon. Unlike most iOS apps, the project is stable and not under active development, so it's a prime candidate for accurate-ish benchmarking.
For "fresh" builds, I cleaned the build folder (⌘⇧K) repeatedly until it worked with no permissions problems. Then I sat and waited for Xcode to index the project. I also made sure the simulator (iPad Air 2) was closed, so these times include booting the simulator and launching the app. Each version of Xcode above should use the latest iOS version that it ships with. Then I hit ⌘R and start a timer, only ending it when the app had fully launched.
"Incremental" builds represent a more common use case: changing one file and recompiling with the simulator already running. I added print("hello!")
to application(: didFinishLaunchingWithOptions:)
and hit ⌘R, timing the time it took for the app to launch.
I repeated each test a few times and took their average times.
Contributing
It would be super-cool if we could perform the above tests on a variety of machines and consolidate the results here. Below are the instructions to download the code (compatible with Apple Silicon thanks to @pawelurb), and send a pull request adding your own results. I'd super-appreciate it!
This repository is deprecated, but the results will stay around for posterity. See below for more.
git clone -b apple-silicon-compatibility https://github.com/artsy/eidolon.git
cd eidolon
bundle install
bundle exec fastlane oss
Please note that this project is released with a Contributor Code of Conduct. By participating in this project, you agree to abide by its terms.
Repo Status
This repository was created in 2015 when I worked at Artsy. The main project I worked on at the time (Eidolon) was open source, making it an ideal test case for measuring Xcode compile times of real-world apps. However, I stopped working at Artsy in 2021 and Artsy is no longer maintaining Eidolon for compatibility with the latest versions of Swift, Xcode, CocoaPods, and open source dependencies.
I could continue maintaining the repo for Artsy, since Eidolon remains open source, but honestly, keeping this Xcode benchmarking repo maintained is a lot of work, and a better repository exists.
So at the end of 2021, I'm deprecating this repository. It was a hell of a ride. I'm grateful to Artsy for the opportunity to leverage their code for the good of the iOS developer community. And I'm most grateful to dozens of contributors who made this a valuable resource. Thank you, everyone.
License
This work is licensed under a Creative Commons Attribution 4.0 International License.