Boot Camp – Apple’s Published Driver Versions Listing

bootcamp

I realise that the recommended way of obtaining the latest drivers for Boot Camp is via Apple's official Boot Camp Assistant built into macOS, but was wondering if Apple offers an official index that can be used to easily obtain archival versions of the drivers that have been posted to the Apple website. Some simple searching has allowed me to find several different versions – through Boot Camp 2 to version 5, but as far as I can see, there's no "Boot Camp Downloads" page or similar from where these can all be found in a simple list.

Best Answer

Note: A version of this answer, which downloads and extracts the Boot Camp Support Software using a Windows machine, is given here.

There used to be an Apple webpage which provided a table containing information needed to obtain the correct Boot Camp Support Software (Windows Support Software) for the each version of Windows officially supported for a given Mac. The information was either a link to a webpage where the correct Boot Camp Support Software could be downloaded or the name of the DVD containing the desired software. Basically, the DVD was the Snow Leopard installation DVD. Currently, this webpage has be replaced with the Install Windows 7 on your Mac using Boot Camp webpage.

The Snow Leopard DVD contains legacy Boot Camp Support Software for XP SP2 and Vista installations. To access the Boot Camp Support Software on the Snow Leopard DVD, you need to be running Windows. I can no longer find the link where you could purchase a Snow Leopard DVD from Apple. However, a Snow Leopard ISO containing the Boot Camp Support Software can be downloaded. See this link for more information. Again, you will need to Windows to mount and access the Boot Camp Support Software.

The accepted answer to How to download Bootcamp drivers without Bootcamp assistant? explains how to download versions of the Boot Camp Support Software (Windows Support Software) for a particular Mac. However, the answer does not explain how to determine the differences between the available versions. Below is a script which automates steps 1 through 8 given in the answer.

#!/bin/bash
#
#

if [[ $0 != "$BASH_SOURCE" ]]; then
    bash "$BASH_SOURCE" "$@"
    return
fi

GetPkgUrl() {
    local "sucatalog=index-10.11-10.10-10.9-mountainlion-lion-snowleopard-leopard.merged-1.sucatalog"
    while :; do
        case ${1:-} in
        --clean) rm -f *.sucatalog *.dist;;
        --legacy) sucatalog="index-lion-snowleopard-leopard.merged-1.sucatalog";;
        "") return;;
        *) break
        esac
        shift
    done
    local 'sucatalogUrl=http://swscan.apple.com/content/catalogs/others/'"$sucatalog"
    local "language=English" "identifier=$1"
    shift
    if [[ ! -e $sucatalog ]]; then
        echo "fetching $sucatalogUrl"
        curl -O "$sucatalogUrl" 2>/dev/null
    fi
    local "matches=$(grep -e "BootCampESD.pkg" -e ".$language.dist" "$sucatalog")"
    local "pkgUrl" "dist" "distUrl" 
    local -i "i" "count=0"
    local -a "dists=()" "pkgUrls=()"

    while read "pkgUrl"; do
        if [[ $pkgUrl == *BootCampESD.pkg* ]]; then
#           echo "$pkgUrl"
            read "distUrl"
            distUrl="${distUrl#*<string>}"
            distUrl="${distUrl%</string>*}"
#           echo "$distUrl"
            if [[ ! $distUrl == *"$language.dist"* ]]; then
                echo "Error: URL '$distUrl' did not contain the string '$language.dist'" >&2
                continue # exit "1"
            fi
            dist="${distUrl##*/}"
            dists+=("$dist")
            pkgUrl="${pkgUrl#*<string>}"
            pkgUrl="${pkgUrl%</string>*}"
            pkgUrls+=("$pkgUrl")
            if [[ ! -e "$dist" ]]; then
                echo "fetching $distUrl"
                curl -O "$distUrl" 2>/dev/null
            else
                : # echo "have $distUrl"
            fi
            count="count + 1"
        fi
    done <<< "$matches"
#   echo "found $count .dist files"

    echo
    echo "Matching URL's are listed below."
    for ((i=0; i<${#dists[@]}; ++i)); do
        dist="${dists[i]}"
        if grep "'$identifier'" "$dist" >/dev/null; then
            echo "${pkgUrls[i]}"
        fi
    done
    echo
}

GetPkgUrl "$@"

An anonymous edit was made to this answer, where the variable sucatalog was changed from index-lion-snowleopard-leopard.merged-1.sucatalog to index-10.11-10.10-10.9-mountainlion-lion-snowleopard-leopard.merged-1.sucatalog.

Note: The --legacy option substitutes the original file name.

The identifier of my iMac (21.5-inch, Mid 2011) is iMac12,1. Assuming the script has already been saved to the file getpkgurl, the following command can be used to get a list of available downloads.

Note: The --clean option removes all previous downloaded files.

./getpkgurl --clean --legacy iMac12,1

Note: A good reference for older Mac computer to identifier translations is given here.

The output from the command is given below.

fetching http://swscan.apple.com/content/catalogs/others/index-lion-snowleopard-leopard.merged-1.sucatalog
fetching http://swcdn.apple.com/content/downloads/24/46/041-91737-A_KOBGOTCIEZ/0b9gnebg3ivdfsd79simxpr60vvx9sy31k/041-91737.English.dist
fetching http://swcdn.apple.com/content/downloads/26/37/041-91736-A_6XKJ6AQL4K/9qene91xdcr1ytzik312zjmbaxyujy0p7j/041-91736.English.dist
fetching http://swcdn.apple.com/content/downloads/24/21/041-88430-A_MH044N1M88/l1tfz2ccakcy7ko79ugzcw0naadra581o3/041-88430.English.dist
fetching http://swcdn.apple.com/content/downloads/62/58/041-98143-A_HN8B941A1T/nknv1gt3xcgylggwc11kl5e0j4296tjfo1/041-98143.English.dist
fetching http://swcdn.apple.com/content/downloads/63/48/041-88436-A_A9JD5TGYOC/9qwbctjgtpqblqv40gl7uwf625j5pe796i/041-88436.English.dist
fetching http://swcdn.apple.com/content/downloads/53/33/041-88396-A_YLDCG32JBG/ehs3p0jphqr5sfk0wh15gqxkua7nndzk8u/041-88396.English.dist
fetching http://swcdn.apple.com/content/downloads/28/47/041-88734-A_Q0SKN07BL0/7knxzec1xmojr5x5t7xnu5a4u6lslmlf9v/041-88734.English.dist
fetching http://swcdn.apple.com/content/downloads/25/38/041-88737-A_IXJZSM8OLV/fq3xy3duoq3xqp9o2sa8dkjtz5wvjaojhq/041-88737.English.dist
fetching http://swcdn.apple.com/content/downloads/09/31/041-88738-A_WMEMEM44HQ/hox9b0vuev029dtitorkp40rsgjdnww4qm/041-88738.English.dist
fetching http://swcdn.apple.com/content/downloads/53/06/041-88735-A_5MC8H30E1T/uzofvyg87dqhkn2qh1ipxy4f1uxduhitsb/041-88735.English.dist
fetching http://swcdn.apple.com/content/downloads/24/61/041-88748/z2zwt4m9xtxt5sf64w9v5bz760cohxc2jc/041-88748.English.dist
fetching http://swcdn.apple.com/content/downloads/36/49/041-98163/n3zau0xy5j0a121vnvud3jac2ahplizknu/BootCampESD.dst/041-98163.English.dist
fetching http://swcdn.apple.com/content/downloads/63/06/041-88804/p3d1dt0il8vi5w3wrzepvrs3992dtmkfwb/041-88804.English.dist
fetching http://swcdn.apple.com/content/downloads/57/55/041-88815/dmx4z5azm5wktzh9qh8kiyrbz874wj9h4d/041-88815.English.dist
fetching http://swcdn.apple.com/content/downloads/47/29/041-89072-A_HZY5QI4LGV/knck1r3qmsw9nliisjjm7vll0zv1u239eu/041-89072.English.dist
fetching http://swcdn.apple.com/content/downloads/32/09/041-89042-A_XVZ2U8XKG2/06ub1qfep6wv3g8bb68smwt3ac25xyng83/041-89042.English.dist
fetching http://swcdn.apple.com/content/downloads/52/10/061-26579-A_7RJL96VW4I/z662ygc05hfe7cukb3itfbc8i1j7boxu95/061-26579.English.dist
fetching http://swcdn.apple.com/content/downloads/35/46/041-87995-A_EWCD1K4CH1/2b5jaj1p2oxqlpzgwat4bdqjpjs8n3mxip/BootCampESD.dst/041-87995.English.dist
fetching http://swcdn.apple.com/content/downloads/23/15/041-91731-A_LBI7Q8UWOG/juk1ng0hm623gxh3jv4qxt190ga1h5p0lw/041-91731.English.dist
fetching http://swcdn.apple.com/content/downloads/35/26/041-88148-A_FV1FQ1MLRG/qyueop2fculv8o6ybt2oq266qo98pqphb9/041-88148.English.dist
fetching http://swcdn.apple.com/content/downloads/41/45/061-26565-A_30YFW2NOY7/mcryv1yqxl8bmiok36kl4tiycf3g72uda5/061-26565.English.dist
fetching http://swcdn.apple.com/content/downloads/04/44/041-84708/yq9w47gthzu8e8fqmad6hx0vs15fuk4540/041-84708.English.dist
fetching http://swcdn.apple.com/content/downloads/45/20/041-85204-A_24VIQ2D28M/3ln1dqstqacwzknssu2fyu3rqhf3y3b94n/BootCampESD.dst/041-85204.English.dist
fetching http://swcdn.apple.com/content/downloads/05/20/041-85201-A_6JI09ZIRDD/sma4jd483vqdug5bqoemfohvvahjd4rewx/BootCampESD.dst/041-85201.English.dist
fetching http://swcdn.apple.com/content/downloads/26/08/041-84821-A_AMCFPC3QDK/4fffs8qgdflw7pn1finqqd40gifh41mvs6/041-84821.English.dist
fetching http://swcdn.apple.com/content/downloads/57/55/041-84868-A_402D0DFI39/6uz8hhgtd4b87t00mrq0uihiop5ivumsbk/BootCampESD.dst/041-84868.English.dist
fetching http://swcdn.apple.com/content/downloads/29/62/041-84859-A_GGUOSJMIGN/sb1apxcjpp358ze2df6bzhwd49m2cqyzy5/BootCampESD.dst/041-84859.English.dist
fetching http://swcdn.apple.com/content/downloads/50/29/041-84869-A_EJ35WAWA75/obofx71e3kcf8aqzukdrzg7hqpv1p06hca/BootCampESD.dst/041-84869.English.dist
fetching http://swcdn.apple.com/content/downloads/25/34/041-93123-A_M7QYPDZ8WH/dhg7w8ixxzaoay8anu1922grngi1sckdbn/041-93123.English.dist

Matching URL's are listed below.
http://swcdn.apple.com/content/downloads/04/44/041-84708/yq9w47gthzu8e8fqmad6hx0vs15fuk4540/BootCampESD.pkg
http://swcdn.apple.com/content/downloads/45/20/041-85204-A_24VIQ2D28M/3ln1dqstqacwzknssu2fyu3rqhf3y3b94n/BootCampESD.pkg
http://swcdn.apple.com/content/downloads/26/08/041-84821-A_AMCFPC3QDK/4fffs8qgdflw7pn1finqqd40gifh41mvs6/BootCampESD.pkg
http://swcdn.apple.com/content/downloads/57/55/041-84868-A_402D0DFI39/6uz8hhgtd4b87t00mrq0uihiop5ivumsbk/BootCampESD.pkg

The results show there are 4 possible URL's. Entering each URL in Safari will cause a version of the Boot Camp Support Software to download. The correct download would have to be determined by inspection.

Note: By default, the .pkg installer places a .dmg file in the "/Library/Application Support/BootCamp" folder. The .dmg file contains the Windows Support Software.

This script was tested using GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin17). The version of macOS was High Sierra 10.13.6.

Hint: You can paste the function GetPkgUrl into a Terminal application window running BASH instead of creating a script file.