shell 刪除 XCode 不用的模擬器文件

每次 xcode 升級(jí)都會(huì)自帶最新的模擬器文件,但是老版本的模擬器依然存在,并沒(méi)有刪除。本著硬盤(pán)空間能省一點(diǎn)是一點(diǎn)的原則,寫(xiě)了個(gè)腳本來(lái)刪除不用的模擬器。

#/bin/sh
simulatorPath=~/Library/Developer/CoreSimulator/Devices
simulatorPlistPath="${simulatorPath}/device_set.plist"

if [[ ! -f ${simulatorPlistPath} ]]; then
    #statements
    echo "simulator plist file does not exit, please make sure it's at ${simulatorPlistPath};"
    exit 1
fi

cd ${simulatorPath}
backupDevicePath="../backup"

# 解析 plist
OSPrefix="com.apple.CoreSimulator.SimRuntime."
modelPrefix="com.apple.CoreSimulator.SimDeviceType"

retainIOSs="11-2"
retainTVOSs="11-2"
retainWatchOSs="4-2"

# 可以從 retianOS 中截取,使用最新的。
# endIOSVersion=11
# endTVOSVersion=11
# endWatchOSVersion=4

# PlistBuddy Print 只是打印內(nèi)容,并不能把讀出來(lái)的內(nèi)容轉(zhuǎn)成 map or array,所以把全部的可能性都遍歷出來(lái)
SYSTEM=("iOS" "tvOS" "watchOS")

function delete() {
    system=$1
    # declare models
    # declare startVersion
    # declare retainOS
    if [[ ${system}x == "iOS"x ]]; then
        retainOS=${retainIOSs}
        models=("iPhone-4"
                "iPhone-4s"
                "iPhone-5"
                "iPhone-5s"
                "iPhone-6"
                "iPhone-6-Plus"
                "iPhone-6s"
                "iPhone-6s-Plus"
                "iPhone-7"
                "iPhone-7-Plus"
                "iPhone-8"
                "iPhone-8-Plus"
                "iPhone-X"
                "iPhone-SE"
                "iPad--5th-generation-"
                "iPad-Air"
                "iPad-Air-2"
                "iPad-2"
                "iPad-Retina"
                "iPad-Pro"
                "iPad-Pro--9-7-inch-"
                "iPad-Pro--10-5-inch-"
                "iPad-Pro--12-9-inch---2nd-generation-"
                "Resizable-iPad"
                "Resizable-iPhone"
                )
        startVersion=8
    elif [[ ${system}x == "tvOS"x ]]; then
        retainOS=${retainTVOSs}
        models=("Apple-TV-1080p"
                "Apple-TV-4K-1080p"
                "Apple-TV-4K-4K"
                )
        startVersion=8
    elif [[ ${system}x == "watchOS"x ]]; then
        retainOS=${retainWatchOSs}
        models=("Apple-Watch-38mm"
                "Apple-Watch-Series-2-38mm"
                "Apple-Watch-Series-2-42mm"
                "Apple-Watch-42mm"
                "Apple-Watch-Series-3-38mm"
                "Apple-Watch-Series-3-42mm"
                )
        startVersion=3
    fi

    logPath="./log/${system}"
    simulatorPre="${OSPrefix}${system}"
    # clear txt 輸出
    if [[ ! -d ${logPath} ]]; then
        mkdir -p ${logPath}
    fi
    rm ${logPath}/*.txt

    # start from ios 7 to 11
    endVersion=`echo ${retainOS} | cut -d \- -f 1`
    declare -a versions
    for (( i=${startVersion}; i <= ${endVersion}; i++ )); do
        for (( j=0; j < 10; j++ )); do
            v="${i}-${j}"
            versions=(${versions[@]} ${v})
        done
    done

    # log
    echo "system:${system}\nlogPath:${logPath}\nmodels:${models[@]}\nversions:${versions[@]}" > ${logPath}/info.txt

    return
    #按數(shù)據(jù)遍歷
    for v in ${versions[@]}
    do
        vname=${simulatorPre}-$v
        # echo "name:${vname}"
        if [[ ${v}x == ${retainOS}x ]]; then
            echo "find retain iOS ${vname}" >> ${logPath}/retain.txt
        else
            pname=`/usr/libexec/PlistBuddy -c "Print :DefaultDevices:${vname}" ${simulatorPlistPath}`
            if [[ ! -z "${pname}" ]]; then
                # os 版本存在
                echo "find OS : ${vname}" >> ${logPath}/findOSs.txt
                for n in ${models[@]}; do
                    model="${modelPrefix}.${n}"
                    modelId=`/usr/libexec/PlistBuddy -c "Print :DefaultDevices:${vname}:${model}" ${simulatorPlistPath}`
                    if [[ ! -z "${modelId}" ]]; then
                        # model 存在
                        echo "OS:${vname}\nmodel:${model}\nid:${modelId}" >> ${logPath}/findModels.txt

                        if [[ -d ./${modelId} ]]; then
                            # source exits
                            targetPath=${backupDevicePath}/${v}/${n}

                            if [[ ! -d ${targetPath} ]]; then
                                mkdir -p ${targetPath}
                            fi
                            mv -f ./${modelId} ${targetPath}
                        fi
                    else
                        echo "OS:${vname}\nmodel:${model}\nid:${modelId}" >> ${logPath}/notExit.txt
                    fi
                done
            else
                    echo "pname:${vname} does not exit!!!!!" >> ${logPath}/notExit.txt
            fi
        fi
    done
}

for p in ${SYSTEM[@]}; do
    delete ${p}
done
exit 0
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 雖然自己的人生很平常,沒(méi)有特別傳奇或事件發(fā)生,但隨著年齡的增長(zhǎng),總想把自己成長(zhǎng)的過(guò)往,依稀還能記得的記錄下...
    Z雪蓮閱讀 290評(píng)論 0 1
  • 前幾天去南京有些事處理一下,住在老同學(xué)的店里。既是為了省錢(qián),更是為了聯(lián)系一下感情不至于無(wú)聊,無(wú)聊最是折磨人。 剛...
    無(wú)知與不知閱讀 326評(píng)論 0 0
  • 夜晚,永遠(yuǎn)是TYUN最瘋狂與糜爛的時(shí)刻。 吧臺(tái)之上,性感嫵媚的美人雙手攀著冰冷的鋼 管,這人有著一雙妖嬈的鳳眸,眼...
    瀚寒閱讀 258評(píng)論 0 0
  • 夢(mèng)幻花是黃色牽?;ǎ淮嬖谟谧匀唤纾怯扇藶楦淖冎参锏奶匦?,從而形成的一種新的植物。黃的鮮亮,品質(zhì)好,觀賞性強(qiáng),因...
    阿楓19閱讀 963評(píng)論 0 1

友情鏈接更多精彩內(nèi)容