更新日期:March 4, 2026

<aside> 📝

前情提要

這是關於一個程式開發工程師在家搶不到菇,電玩展把附近菇都擠爆,又不想花錢買軟體而職業病發的故事。

本期內容感謝公司贊助的Claude code(?)

</aside>

使用設備:iPhone (iOS 26, iOS 18)、Macbook (MacOS 26)

<aside> ⚠️

需開啟iPhone開發者模式

</aside>


iOS 虛擬定位 - 指令列版設定

1. 安裝 Homebrew(如果還沒有)

開啟終端機執行:

/bin/bash -c "$(curl -fsSL <https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh>)"

2. 安裝 pipx 和 pymobiledevice3

brew install pipx
pipx ensurepath
source ~/.zshrc
pipx install pymobiledevice3

透過pymobiledevice3實作,適用的iOS各版本請參考 https://github.com/doronz88/pymobiledevice3

3. 建立腳本資料夾和檔案

mkdir -p ~/LocationScript

建立 loc.sh

透過終端機:

cat > ~/LocationScript/loc.sh << 'EOF'
#!/bin/zsh

set_location() {
    echo "設定位置:$1, $2"
    pymobiledevice3 developer dvt simulate-location set -- "$1" "$2"
}

case "$1" in
    set)
        if [[ -z "$2" || -z "$3" ]]; then
            echo "錯誤:請提供緯度和經度"
            echo "範例:loc set 25.0330 121.5654"
            exit 1
        fi
        set_location "$2" "$3"
        ;;
    go)
        case "$2" in
            taipei101)      echo "前往:台北101";    set_location 25.0330 121.5654 ;;
            taipei-station) echo "前往:台北車站";   set_location 25.0478 121.5170 ;;
            xinyi)          echo "前往:信義區";     set_location 25.0360 121.5680 ;;
            tokyo)          echo "前往:東京駅";     set_location 35.6812 139.7671 ;;
            shinjuku)       echo "前往:新宿";       set_location 35.6896 139.7006 ;;
            osaka)          echo "前往:大阪駅";     set_location 34.7024 135.4959 ;;
            *)
                echo "找不到地點:$2"
                echo "可用地點:taipei101, taipei-station, xinyi, tokyo, shinjuku, osaka"
                exit 1
                ;;
        esac
        ;;
    clear)
        echo "清除模擬位置..."
        pymobiledevice3 developer dvt simulate-location clear
        ;;
    list)
        echo "預設地點:"
        echo "  taipei101      - 台北101 (25.0330, 121.5654)"
        echo "  taipei-station - 台北車站 (25.0478, 121.5170)"
        echo "  xinyi          - 信義區 (25.0360, 121.5680)"
        echo "  tokyo          - 東京駅 (35.6812, 139.7671)"
        echo "  shinjuku       - 新宿 (35.6896, 139.7006)"
        echo "  osaka          - 大阪駅 (34.7024, 135.4959)"
        ;;
    tunnel)
        echo "啟動 tunneld(按 Ctrl+C 停止)..."
        sudo pymobiledevice3 remote tunneld
        ;;
    *)
        echo "iOS 17+ 虛擬定位工具"
        echo ""
        echo "用法:"
        echo "  loc go <地點>          前往預設地點"
        echo "  loc set <緯度> <經度>  設定自訂座標"
        echo "  loc clear              清除模擬位置"
        echo "  loc list               列出預設地點"
        echo "  loc tunnel             啟動 tunneld"
        echo ""
        echo "範例:"
        echo "  loc go taipei101"
        echo "  loc set 25.0330 121.5654"
        ;;
esac
EOF

或透過編輯器:

#!/bin/zsh

set_location() {
    echo "設定位置:$1, $2"
    pymobiledevice3 developer dvt simulate-location set -- "$1" "$2"
}

case "$1" in
    set)
        if [[ -z "$2" || -z "$3" ]]; then
            echo "錯誤:請提供緯度和經度"
            echo "範例:loc set 25.0330 121.5654"
            exit 1
        fi
        set_location "$2" "$3"
        ;;
    go)
        case "$2" in
            taipei101)      echo "前往:台北101";    set_location 25.0330 121.5654 ;;
            taipei-station) echo "前往:台北車站";   set_location 25.0478 121.5170 ;;
            xinyi)          echo "前往:信義區";     set_location 25.0360 121.5680 ;;
            tokyo)          echo "前往:東京駅";     set_location 35.6812 139.7671 ;;
            shinjuku)       echo "前往:新宿";       set_location 35.6896 139.7006 ;;
            osaka)          echo "前往:大阪駅";     set_location 34.7024 135.4959 ;;
            keelung-shell)  echo "前往: 基隆貝殼純點"; set_location 25.161110 121.762787;;
            *)
                echo "找不到地點:$2"
                echo "可用地點:taipei101, taipei-station, xinyi, tokyo, shinjuku, osaka"
                exit 1
                ;;
        esac
        ;;
    clear)
        echo "清除模擬位置..."
        pymobiledevice3 developer dvt simulate-location clear
        ;;
    list)
        echo "預設地點:"
        echo "  taipei101      - 台北101 (25.0330, 121.5654)"
        echo "  taipei-station - 台北車站 (25.0478, 121.5170)"
        echo "  xinyi          - 信義區 (25.0360, 121.5680)"
        echo "  tokyo          - 東京駅 (35.6812, 139.7671)"
        echo "  shinjuku       - 新宿 (35.6896, 139.7006)"
        echo "  osaka          - 大阪駅 (34.7024, 135.4959)"
        echo "  keelung-shell  - 基隆貝殼純點(25.161110, 121.762787)"
        ;;
    tunnel)
        echo "啟動 tunneld(按 Ctrl+C 停止)..."
        sudo pymobiledevice3 remote tunneld
        ;;
    *)
        echo "iOS 17+ 虛擬定位工具"
        echo ""
        echo "用法:"
        echo "  loc go <地點>          前往預設地點"
        echo "  loc set <緯度> <經度>  設定自訂座標"
        echo "  loc clear              清除模擬位置"
        echo "  loc list               列出預設地點"
        echo "  loc tunnel             啟動 tunneld"
        echo ""
        echo "範例:"
        echo "  loc go taipei101"
        echo "  loc set 25.0330 121.5654"
        ;;
esac