├── .gitignore ├── .github ├── dependabot.yml └── workflows │ ├── list-installers.yml │ └── generate-installer.yml ├── LICENSE └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | .DS_Store 3 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # To get started with Dependabot version updates, you'll need to specify which 2 | # package ecosystems to update and where the package manifests are located. 3 | # Please see the documentation for all configuration options: 4 | # https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates 5 | 6 | version: 2 7 | updates: 8 | - package-ecosystem: "npm" # See documentation for possible values 9 | directory: "/" # Location of package manifests 10 | schedule: 11 | interval: "weekly" 12 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 Tech Fiddle 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /.github/workflows/list-installers.yml: -------------------------------------------------------------------------------- 1 | name: List Available macOS Releases 2 | 3 | on: 4 | workflow_dispatch: 5 | schedule: 6 | - cron: "0 0 * * 2" 7 | 8 | jobs: 9 | list-installers: 10 | runs-on: macos-latest 11 | outputs: 12 | list: ${{ steps.list.outputs.stdout }} 13 | steps: 14 | - uses: actions/checkout@v4 15 | - name: List Installers 16 | uses: mathiasvr/command-output@v2.0.0 17 | id: list 18 | with: 19 | run: | 20 | softwareupdate 21 | softwareupdate --list-full-installers 22 | send-report: 23 | runs-on: ubuntu-latest 24 | needs: [list-installers] 25 | env: 26 | OUTPUT: ${{needs.list-installers.outputs.list}} 27 | steps: 28 | - name: Send Report 29 | if: github.repository == 'Comp-Labs/Download-macOS' 30 | uses: dawidd6/action-send-mail@v3 31 | with: 32 | server_address: smtp.gmail.com 33 | server_port: 465 34 | username: ${{secrets.MAIL_USERNAME}} 35 | password: ${{secrets.MAIL_PASSWORD}} 36 | subject: Weekly macOS List Versions Report 37 | to: complabs28@gmail.com 38 | from: GitHub Reports 39 | secure: true 40 | body: Logs - ${{env.OUTPUT}} 41 | reply_to: complabs28@gmail.com 42 | ignore_cert: true 43 | convert_markdown: true 44 | - name: Skipped Job Explanation 45 | if: github.repository == 'Comp-Labs/Download-macOS' 46 | run: echo "The 'Send Report' job is skipped because it's running on a forked repository. It can run only on the original repository - Comp-Labs/Download-macOS" 47 | re-run-failed-jobs: 48 | runs-on: ubuntu-latest 49 | needs: [list-installers, send-report] 50 | if: always() && (needs.list-installers.result == 'failure') 51 | steps: 52 | - name: Needs Context 53 | env: 54 | NEEDS_CONTEXT: ${{ toJSON(needs) }} 55 | run: echo "$NEEDS_CONTEXT" 56 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # macOS Downloader 2 | 3 | Download any macOS Release without needing a Mac! Download in DMG, ISO, or ZIP File Format. 4 | 5 | ## Warning ⚠️ 6 | 7 | **Some Beta Versions may not work because Apple has deprecated `seedutil`. However, stable versions will work normally like before.** 8 | 9 | ## Notice ⚠️ 10 | 11 | **As a precaution, we request you to not fork this repository to prevent the violation of GitHub's Terms of Service. As an alternative, follow the new steps as stated below:** 12 | 13 | ## Steps to Start 14 | 15 | - Click the `Use This Template` button above the commit status. 16 | - Click on `Create a new repository`. 17 | - Enter the Repository Name as `Download-macOS`. 18 | - Click on the `Create Repository` button. 19 | - Before running, modify [this line](https://github.com/Comp-Labs/Download-macOS/blob/a4e8e6849d7bd9563638d46e6db843e109e8156c/.github/workflows/generate-installer.yml#L36) to your repository link to prevent any errors. 20 | - Go to the **Actions** Tab. 21 | - Select `Generate macOS Installer` 22 | - Click on **Run workflow**. Select the desired options and click on **Run workflow**. 23 | 24 | ## Older macOS Installers 25 | 26 | ### Older than Monterey 27 | 28 | On updating the GitHub Actions Runner to `macos-latest (macos-14)`, versions older than Monterey are on longer available. 29 | 30 | ### Older than High Sierra 31 | 32 | macOS Installers older than High Sierra can be downloaded through the links below: 33 | 34 | - [Sierra 10.12](http://updates-http.cdn-apple.com/2019/cert/061-39476-20191023-48f365f4-0015-4c41-9f44-39d3d2aca067/InstallOS.dmg) 35 | - [EI Captain 10.11](http://updates-http.cdn-apple.com/2019/cert/061-41424-20191024-218af9ec-cf50-4516-9011-228c78eda3d2/InstallMacOSX.dmg) 36 | - [Yosemite 10.10](http://updates-http.cdn-apple.com/2019/cert/061-41343-20191023-02465f92-3ab5-4c92-bfe2-b725447a070d/InstallMacOSX.dmg) 37 | - [Mountain Lion 10.8](https://updates.cdn-apple.com/2021/macos/031-0627-20210614-90D11F33-1A65-42DD-BBEA-E1D9F43A6B3F/InstallMacOSX.dmg) 38 | - [Lion 10.7](https://updates.cdn-apple.com/2021/macos/041-7683-20210614-E610947E-C7CE-46EB-8860-D26D71F0D3EA/InstallMacOSX.dmg) 39 | 40 | In case any of the links don't work, try going [here](https://support.apple.com/en-in/102662#browser) and download them using a Safari browser. 41 | 42 | ## Known Issues 43 | 44 | - Sometimes you may get an error saying `Update Not Found`. The workaround is nothing but to try again. 45 | - Sometimes you may get an error saying `hdiutil: couldn't eject "disk2" - Resource busy`. Workaround is nothing but to try again 46 | - Sometimes you may be trying to extract the Downloaded ZIP File but it will say 'Corrupted'. Workaround is to re-run the Job and it should work. No Possible Fixes are Available. 47 | 48 | ## To-Do 49 | 50 | - Add Option for user to enter versions manually 51 | -------------------------------------------------------------------------------- /.github/workflows/generate-installer.yml: -------------------------------------------------------------------------------- 1 | name: Generate macOS Installer 2 | 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | macos_version: 7 | type: choice 8 | description: "macOS Version" 9 | required: true 10 | options: 11 | - Tahoe v26.1 12 | - Sequoia v15.7.2 13 | - Sonoma v14.8.2 14 | - Ventura v13.7.8 15 | - Monterey v12.7.4 16 | file: 17 | type: choice 18 | description: "File Type" 19 | required: true 20 | options: 21 | - ISO 22 | - DMG 23 | - ZIP 24 | 25 | run-name: Generate macOS Installer - ${{ github.event.inputs.macos_version }} ${{ github.event.inputs.file }} 26 | 27 | env: 28 | installer_version: "" # Do not touch: Populated by extract-details (suppresses warnings) 29 | installer_name: "" # Do not touch: Populated by extract-details (suppresses warnings) 30 | 31 | jobs: 32 | build: 33 | runs-on: macos-latest 34 | if: github.repository == 'Comp-Labs/Download-macOS' 35 | steps: 36 | - uses: actions/checkout@v4 37 | 38 | # Setup 39 | - name: Extract Version Details 40 | id: extract-details 41 | run: | 42 | string="${{ github.event.inputs.macos_version }}" 43 | echo "installer_version=${string//*v/}" >> $GITHUB_ENV 44 | echo "installer_name=${string// v*/}" >> $GITHUB_ENV 45 | 46 | # Download Installer 47 | - name: Download macOS Installer 48 | run: | 49 | softwareupdate --fetch-full-installer --full-installer-version ${{ env.installer_version }} 50 | 51 | # Generate Installer 52 | - if: github.event.inputs.file == 'dmg' 53 | name: Generate macOS DMG Installer 54 | run: | 55 | sudo hdiutil create -o /tmp/'${{ env.installer_name }}' -size 16384m -volname '${{ env.installer_name }}' -layout SPUD -fs HFS+J 56 | sudo hdiutil attach /tmp/'${{ env.installer_name }}'.dmg -noverify -mountpoint /Volumes/'${{ env.installer_name }}' 57 | sleep 10 58 | sudo /Applications/'Install macOS ${{ env.installer_name }}'.app/Contents/Resources/createinstallmedia --volume /Volumes/'${{ env.installer_name }}' --nointeraction 59 | hdiutil eject -force /Volumes/'Install macOS ${{ env.installer_name }}' 60 | sudo mv /tmp/'${{ env.installer_name }}'.dmg ~/Desktop/'${{ env.installer_name }}'.dmg 61 | 62 | - if: github.event.inputs.file == 'iso' 63 | name: Generate macOS ISO Installer 64 | run: | 65 | sudo hdiutil create -o /tmp/'${{ env.installer_name }}' -size 16384m -volname '${{ env.installer_name }}' -layout SPUD -fs HFS+J 66 | sudo hdiutil attach /tmp/'${{ env.installer_name }}'.dmg -noverify -mountpoint /Volumes/'${{ env.installer_name }}' 67 | sleep 20 68 | sudo /Applications/'Install macOS ${{ env.installer_name }}'.app/Contents/Resources/createinstallmedia --volume /Volumes/'${{ env.installer_name }}' --nointeraction 69 | echo "Sleeping 100 to allow the installer to finish" 70 | sleep 100 71 | hdiutil eject -force /Volumes/'Install macOS ${{ env.installer_name }}' 72 | hdiutil convert /tmp/'${{ env.installer_name }}'.dmg -format UDTO -o ~/Desktop/'${{ env.installer_name }}' 73 | mv -v ~/Desktop/'${{ env.installer_name }}'.cdr ~/Desktop/'${{ env.installer_name }}'.iso 74 | sudo rm -fv /tmp/'${{ env.installer_name }}'.dmg 75 | 76 | - if: github.event.inputs.file == 'zip' 77 | name: Generate macOS ZIP Installer 78 | run: | 79 | cd /Applications 80 | zip -r 'Install macOS ${{ env.installer_name }}.zip' 'Install macOS ${{ env.installer_name }}.app' 81 | mv -v 'Install macOS ${{ env.installer_name }}.zip' ~/Desktop/'${{ env.installer_name }}.zip' 82 | 83 | # Upload Installer 84 | - name: Upload ${{ github.event.inputs.file }} 85 | uses: actions/upload-artifact@v4 86 | with: 87 | name: macOS ${{ env.installer_name }} 88 | path: "~/Desktop/${{ env.installer_name }}.${{ github.event.inputs.file }}" 89 | --------------------------------------------------------------------------------