更新日期:March 4, 2026
<aside> 📝
前情提要
這是關於一個程式開發工程師在家搶不到菇,電玩展把附近菇都擠爆,又不想花錢買軟體而職業病發的故事。
本期內容感謝公司贊助的Claude code(?)
</aside>
使用設備:iPhone (iOS 26, iOS 18)、Macbook (MacOS 26)
<aside> ⚠️
需開啟iPhone開發者模式
</aside>
開啟終端機執行:
/bin/bash -c "$(curl -fsSL <https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh>)"
brew install pipx
pipx ensurepath
source ~/.zshrc
pipx install pymobiledevice3
透過pymobiledevice3實作,適用的iOS各版本請參考 https://github.com/doronz88/pymobiledevice3
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