Open13

iOS開発で役立ったTIPS集

Tomohiro ImaizumiTomohiro Imaizumi

実機やエミュレーターで通信速度が遅い状態を再現する方法

エミュレーター(mac)

実機

  • デベロッパモードをONにしておく
  • デベロッパ > ネットワークリンク調節器 で任意の通信速度に制御可能
図1 図2
Tomohiro ImaizumiTomohiro Imaizumi

ビルド時にエラーが直らない場合の対処法

  1. コード上でのエラーやビルド対象がGeneric Devicesになっていないかなどを確認。
  2. Clean Build Folder Cmd + Shift + K or Clean Build Folder Immediately Cmd + Opt + Shift + K
  3. Derived Data削除
  4. Xcode再起動
  5. マシン再起動
Tomohiro ImaizumiTomohiro Imaizumi

並列テストONのプロジェクトでローカルでのテスト実行時にエミュレータがたくさん立ち上げないようにする

結論: ローカル実行専用のSchemeを作成する

並列テストが有効になっているSchemeかつ共通設定だと変えることができない(Gitで差分が出てしまう)ケースが有る。
しかしSchemeは SharedをOFFにするとバージョン管理=共有されないので、適当なSchemeをコピーして並列テストをOFFにすれば良い。

Tomohiro ImaizumiTomohiro Imaizumi

Build/Runを早くする

用途に合わせてビルドと実行を別々に行うと時間短縮に

  • ビルドのみ Cmd + B
  • 最後のビルドで実行(差分がない状態でもう一度RUN) Ctrl + Cmd + R

ビルド時間の表示をする設定

defaults write com.apple.dt.Xcode ShowBuildOperationDuration YES
Tomohiro ImaizumiTomohiro Imaizumi

コマンドラインからシミュレーターの現在地GPSを設定する

位置情報を利用する機能のデバッグにとても便利 ❗

https://github.com/MobileNativeFoundation/set-simulator-location

  • set-simulator-location コマンドを使うと、lat,lng形式か自然言語で現在地を設定できる
  • -c でlat,lng形式の座標指定 🗺️
  • -q で自然言語による位置指定、日本語も利用可能 🇯🇵
set-simulator-location -c 35.360720, 138.727440
set-simulator-location -q 東京駅
Tomohiro ImaizumiTomohiro Imaizumi

実行中のシミュレーターでURLを開く

Custom URL SchemeやUniversal Linkの指定で、開きたい画面で一発で開くことができる!

xcrun simctl openurl booted [URL]

デバイス内でブラウザのアドレスバーにURLを入れて開いたり、リンクをタップしたのと同じ挙動になる。
シミュレーター上でURLを入れたり、コピペするのが面倒なときに便利。

Tomohiro ImaizumiTomohiro Imaizumi

よりカンタンに呼び出せてAndroidでも同時にURLを開けるZSH関数

毎回 xcrun するのは面倒。
加えてAndroid開発をしていると adb shell am start で同様にURLを開きたくなることがある。

そこで独自にZSH関数を定義し、かつURLの履歴を fzf を噛ませてインクリメンタルに遡れるようにすると便利。

例えばこのように open_url 関数を定義すると便利。

open_url [URL] # URLを指定してiOS/Androidの両方で開く
open_url -i [URL] # URLを指定してiOSで開く
open_url # fzfを起動して履歴からURLを選択

無論このスクリプトは自作ではなく完全CLAUDE製です 🤖
他のLLMでも作成は可能なので、これをコピーするよりも各自のユースケースに合わせて制作した方がよいかもしれません。

Tomohiro ImaizumiTomohiro Imaizumi

現在インストールされているアプリをアンインストールする

初回起動のデバッグなどでアンイストール作業が実質不要に!

xcrun simctl uninstall booted <your app identifier>

ターミナルからできるので、画面のアイコン長押しが不要で作業短縮。
さらにPre-actionsステップでこのコマンドを実行するSchemeを作っておくと、実行するだけで自動で再インストールしてから起動になるのでなお便利。
実機の場合は booted ではなくデバイスIDを指定する (本記事では割愛します)

Tomohiro ImaizumiTomohiro Imaizumi

シミュレーターのタイムゾーンを変える

タイムゾーンを変えてのデバッグに便利!

Environment variables(環境変数)に TZ を指定する。
例えば TZ=Asia/Bangkok とすると、タイ バンコクのタイムゾーンで起動する。

シミュレーター上ではシステムのタイムゾーンを指定できない(Mac上で変えるしかない)ので、デバッグ時だけタイムゾーンを変えるにはこの方法。

seealso

https://qiita.com/isseium/items/11c686654bb3f222d1fb

Tomohiro ImaizumiTomohiro Imaizumi

複数シミュレーターで同時に検証

あらかじめシミュレーターを起動しておいたうえで、生成された .app ファイルを起動中のシミュレーター内にドラッグ・アンド・ドロップするとインストールできる。
.app はDerivedDataフォルダに出力されるため、BuildのPost-actionsでファイルをDesktop等にコピーするようなスクリプトを走らせると便利。

例えば

derivedDataPath=$(find ~/Library/Developer/Xcode/DerivedData/ -type d -name "*YOUR_APP_NAME*" -print -quit)
filePath=$derivedDataPath/Build/Products/Debug(Development)-iphonesimulator/YOUR_APP_NAME.app
cp -r $filePath ~/Desktop

これをBuildのPost-actionsに追加。

seealso

https://medium.com/eureka-engineering/最強-iosアプリのデバイス毎の確認をiosシミュレータを複数起動して最速で行う-最高-8c5450f6323b

Tomohiro ImaizumiTomohiro Imaizumi

Xcode上の任意のコードを右クリックしGitHubで開く

VSCodeやIntelliJなどの主要IDEにはあるのに、Xcodeにはなくて不便。
しかし、automatorを使った右クリックのServiceメニュー拡張を作ってくれている方がいるのでこれを使う。

https://github.com/wojteklu/xcode-open-on-github

quick-actionsディレクトリ以下のautomatorファイルを登録するだけで「Open on GitHub」と「Copy GitHub link to clipboard」が追加されます。