{"id":15036039,"url":"https://github.com/xcodesorg/xcodes","last_synced_at":"2025-12-11T22:55:16.603Z","repository":{"id":39759860,"uuid":"171964196","full_name":"XcodesOrg/xcodes","owner":"XcodesOrg","description":"The best command-line tool to install and switch between multiple versions of Xcode.","archived":false,"fork":false,"pushed_at":"2024-11-05T05:05:07.000Z","size":1058,"stargazers_count":4123,"open_issues_count":138,"forks_count":148,"subscribers_count":30,"default_branch":"main","last_synced_at":"2025-05-12T13:14:28.412Z","etag":null,"topics":["hacktoberfest","macos","swift","xcode"],"latest_commit_sha":null,"homepage":"","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/XcodesOrg.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-02-22T00:00:25.000Z","updated_at":"2025-05-12T09:11:05.000Z","dependencies_parsed_at":"2023-12-15T09:48:48.731Z","dependency_job_id":"0cf3fb96-3cd6-4920-9430-b7ac4a328ef5","html_url":"https://github.com/XcodesOrg/xcodes","commit_stats":{"total_commits":366,"total_committers":41,"mean_commits":8.926829268292684,"dds":"0.45628415300546443","last_synced_commit":"1e2cc929d0e699a549d4c35ef41ebb3ebcb7f07c"},"previous_names":["robotsandpencils/xcodes"],"tags_count":32,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/XcodesOrg%2Fxcodes","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/XcodesOrg%2Fxcodes/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/XcodesOrg%2Fxcodes/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/XcodesOrg%2Fxcodes/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/XcodesOrg","download_url":"https://codeload.github.com/XcodesOrg/xcodes/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253745196,"owners_count":21957319,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["hacktoberfest","macos","swift","xcode"],"created_at":"2024-09-24T20:29:58.721Z","updated_at":"2025-12-11T22:55:16.597Z","avatar_url":"https://github.com/XcodesOrg.png","language":"Swift","readme":"# xcodes\n\nThe best command-line tool to install and switch between multiple versions of Xcode.\n\n_If you're looking for an app version of `xcodes`, try [Xcodes.app](https://github.com/XcodesOrg/XcodesApp)._\n\n![CI Status](https://github.com/XcodesOrg/xcodes/workflows/CI/badge.svg)\n\n![Header Image](Header.png)\n\n### :tada: Announcment\n\nXcodes is now part of the `XcodesOrg` - [read more here](nextstep.md)\n\n## Installation\n\n### Homebrew (Preferred)\n\n```sh\nbrew install xcodesorg/made/xcodes\n```\n\nThese are Developer ID-signed and notarized release builds and don't require Xcode to already be installed in order to use.\n\n**Other methods:**\n\n\u003cdetails\u003e\n\u003csummary\u003eDownload a release\u003c/summary\u003e\n\nDownload the latest release from the [Releases](https://github.com/XcodesOrg/xcodes/releases) page. These are Developer ID-signed release builds and don't require Xcode to already be installed in order to use.\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eUsing \u003ca href=\"https://github.com/yonaskolb/Mint\"\u003eMint\u003c/a\u003e\u003c/summary\u003e\n\n```sh\nmint install XcodesOrg/xcodes\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eBuild from source\u003c/summary\u003e\n\nBuilding from source requires Xcode 12.0 or later, so it's not an option for setting up a computer from scratch.\n\n```sh\ngit clone https://github.com/XcodesOrg/xcodes\ncd xcodes\nmake install\n# or, if /usr/local/ isn't in your PATH\nPREFIX=/your/install/directory make install\n```\n\nWhile installing, you may get the following output:\n\n```sh\nswift build\nerror: terminated(72): xcrun --sdk macosx --find xctest output:\n```\n\nIf that occurs, it means you need to select a version of Xcode. You can do this with `xcode-select` or by choosing a Command Line Tools option in Xcode's preferences Locations tab.\n\u003c/details\u003e\n\n## Usage\n\n### Install Xcode : \n\nInstall a specific version of Xcode using a command like one of these:\n\n```sh\nxcodes install 10.2.1\nxcodes install 11 Beta 7\nxcodes install 11.2 GM seed\nxcodes install 9.0 --path ~/Archive/Xcode_9.xip\nxcodes install --latest-prerelease\nxcodes install --latest --directory \"/Volumes/Bag Of Holding/\"\nxcodes install --latest --experimental-unxip\n```\n\nYou'll then be prompted to enter your Apple ID username and password. You can also provide these with the `XCODES_USERNAME` and `XCODES_PASSWORD` environment variables.\n\nAfter successfully authenticating, xcodes will save your Apple ID password into the keychain and will remember your Apple ID for future use. If you need to use a different Apple ID than the one that's remembered, set the `XCODES_USERNAME` environment variable.\n\nxcodes will download and install the version you asked for so that it's ready to use.\n\n```sh\n(1/6) Downloading Xcode 11.2.0: 100%\n(2/6) Unarchiving Xcode (This can take a while)\n(3/6) Moving Xcode to /Applications/Xcode-11.2.0.app\n(4/6) Moving Xcode archive Xcode-11.2.0.xip to the Trash\n(5/6) Checking security assessment and code signing\n(6/6) Finishing installation\nxcodes requires superuser privileges in order to finish installation.\nmacOS User Password:\n\nXcode 11.2.0 has been installed to /Applications/Xcode-11.2.0.app\n```\n\nIf you have [aria2](https://aria2.github.io) installed (it's available in Homebrew, `brew install aria2`), then xcodes will default to use it for downloads. It uses up to 16 connections to download Xcode 3-5x faster than URLSession.\n\nXcode will be installed to /Applications by default, but you can provide the path to a different directory with the `--directory` option or the `XCODES_DIRECTORY` environment variable. All of the xcodes commands support this option, like `select` and `uninstall`, so you can manage Xcode versions that aren't in /Applications. xcodes supports having all of your Xcode versions installed in _one_ directory, wherever that may be.\n\n### Install Runtimes : \n\nRun this command line to display the available runtimes \n\n```sh\nxcodes runtimes --include-betas\n```\n\nInstall the wanted Runtime (ex. iOS 17.0-beta1)\n\n```sh\nxcodes runtimes install \"iOS 17.0-beta1\"\n```\n\n### `.xcode-version`\n\nWe recommend the creation of a `.xcode-version` file to explicitly declare and store the Xcode version to be used by your CI environment as well as your team.\n\n```txt\n13.4.1\n```\n\nRead [the proposal](/XCODE_VERSION.md) of `.xcode-version`.\n\n### Commands\n\n- `download \u003cversion\u003e`: Download a specific version of Xcode\n- `install \u003cversion\u003e`: Download and install a specific version of Xcode\n- `installed`: List the versions of Xcode that are installed\n- `list`: List all versions of Xcode that are available to install\n- `select`: Change the selected Xcode\n- `uninstall`: Uninstall a specific version of Xcode\n- `update`: Update the list of available versions of Xcode\n- `version`: Print the version number of xcodes itself\n- `signout`: Clears the stored username and password\n\n### Experimental Unxip - for faster unxipping\n\nThanks to the amazing work by [saagarjhi](https://github.com/saagarjha/unxip) - Xcodes now includes the ability to unxip up to 70% faster on some systems.\n\n```sh\nxcodes install --latest --experimental-unxip\n```\n\n### Shell Completion Scripts\n\nxcodes can generate completion scripts which allow you to press the tab key on your keyboard to autocomplete commands and arguments when typing an xcodes command. The steps to install a completion script depend on the shell that you use. More information about installation instructions for different shells and the underlying implementation is available in the [swift-argument-parser repo](https://github.com/apple/swift-argument-parser/blob/main/Sources/ArgumentParser/Documentation.docc/Articles/InstallingCompletionScripts.md).\n\n\u003cdetails\u003e\n\u003csummary\u003eZsh, with oh-my-zsh:\u003c/summary\u003e\n\nRun the following commands:\n\n```sh\nmkdir ~/.oh-my-zsh/completions\nxcodes --generate-completion-script \u003e ~/.oh-my-zsh/completions/_xcodes\n```\n\n\u003c/details\u003e\n\n## Development\n\nYou'll need Xcode 13 in order to build and run xcodes.\n\n\u003cdetails\u003e\n\u003csummary\u003eUsing Xcode\u003c/summary\u003e\nEven though xcodes is a command-line app, all of the normal functionality works in Xcode, like building, running, and running tests. You can even type text into Xcode's console when it prompts you for input like your Apple ID or 2FA code.\n\nWhen running xcodes from Xcode, if you want to run a particular command or pass some arguments, you can hold the option key to present a sheet with more options. This means you'd use \u003ckbd\u003eOption\u003c/kbd\u003e + \u003ckbd\u003eCommand\u003c/kbd\u003e + \u003ckbd\u003eR\u003c/kbd\u003e or hold \u003ckbd\u003eOption\u003c/kbd\u003e while clicking the Run button. Here you can add, remove, and toggle arguments that will be passed to xcodes when it's launched.\n\n![Xcode Edit Scheme Screen](XcodeRunSheet.png)\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eUsing Swift command line tools\u003c/summary\u003e\nYou can also use the Swift command line tools once you have Xcode installed:\n\n- Build: `swift build`\n- Run: `swift run`, or commands like `swift run xcodes list`\n- Run tests: `swift test`\n\n\u003c/details\u003e\n\nThere's a Makefile to help build xcodes for distribution. We already do this for you in order to provide Developer ID-signed and notarized release builds via Homebrew (see [Installation](#installation)).\n\n\u003cdetails\u003e\n\u003csummary\u003eReleasing a new version of xcodes\u003c/summary\u003e\n\n```sh\n# Bump the version number in Version.swift, commit the change, and tag it\nvim Sources/XcodesKit/Version.swift\ngit add Sources/XcodesKit/Version.swift\ngit commit -m \"Bump version to $VERSION\"\ngit tag -asm \"$VERSION\" \"$VERSION\"\n\n# Clean first\nmake clean\n\n# Make a release build of xcodes, sign it, and zip it\nmake zip\n# Create a Homebrew bottle\nmake bottle VERSION=\"$VERSION\"\n\n# Notarize the release build\n# This can take a while\nmake notarize \\\n    TEAMID=\"ABC123\"\n\n# Push the new version bump commit and tag\ngit push --follow-tags\n\n# Edit the draft release created by Release Drafter to point at the new tag\n# Set the release title to the new version\n# Duplicate xcodes-$VERSION.mojave.tar.gz and rename to xcodes-$VERSION.arm64_mojave.tar.gz, also create `xcodes-$VERSION.macos.i386.tar.gz` and `xcodes-$VERSION.macos.arm64.tar.gz`\n# Add the xcodes.zip, xcodes-$VERSION.mojave.tar.gz, xcodes-$VERSION.arm64_mojave.tar.gz files to the release\n# Publish the release\n\n# Update the Homebrew Bottle: https://github.com/XcodesOrg/homebrew-made/blob/master/Formula/xcodes.rb\n```\n\n\u003c/details\u003e\n\nNotable design decisions are recorded in [DECISIONS.md](./DECISIONS.md). The Apple authentication flow is described in [Apple.paw](./Apple.paw), which will allow you to play with the API endpoints that are involved using the [Paw](https://paw.cloud) app.\n\n[`xcode-install`](https://github.com/xcpretty/xcode-install) and [fastlane/spaceship](https://github.com/fastlane/fastlane/tree/master/spaceship) both deserve credit for figuring out the hard parts of what makes this possible.\n\n## Maintainers\n\n[Matt Kiazyk](https://github.com/mattkiazyk) - [Twitter](https://www.twitter.com/mattkiazyk)\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxcodesorg%2Fxcodes","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fxcodesorg%2Fxcodes","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxcodesorg%2Fxcodes/lists"}