はじめに
この記事は、とにかく早く Apple Silicon 環境で iOS アプリ開発環境を整えなければならない方を対象に執筆しました。
Apple Silicon で動かないと業務に支障が出るから買い換えられない…
なんて方を救えたら嬉しいです。
なので、
Rosetta を使うのは嫌!ワークアラウンドも嫌!という方は別記事を参考にしていただければと思います。
検証済み環境
- Tool
- CocoaPods
- Carthage
- SPM
- Mint
- XcodeGen
- Homebrew
- Env
- MacBook Pro 14 inch 2021
- Apple M1 Pro
- macOS Monterey 12.2.1
- mac-auto-setup
- MacBook Pro 14 inch 2021
Rosetta を使いましょう
サードパーティ製ツールをあまり使っていない場合を除き、Apple Silicon 対応にはある程度の工数が必要になることが多いです。
まずは Rosetta 環境下で動くようにして、快適な環境下で少しずつ Apple Silicon 対応を進めていくことをお勧めします。
Shell commands
お使いのターミナルアプリを Rosetta で起動するようにチェックを入れるか、arch -arch x86_64
を付けてコマンドを実行しましょう。どちらも同じですが、うまく動かないときは前者で試してみてください。
Ruby に関連する問題
rbenv のインストールや rbenv 経由での Ruby インストールを Apple Silicon (No use Rosetta)環境下で実行した場合は特に問題に遭遇する可能性が高いです。その一例をご紹介します。
# 以下エラー発生時に実行
# ffi-X.XX.X/lib/ffi_c.bundle' (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64e'))
bundle config --local build.ffi --enable-system-libffi
bundle install
を試みた際、rbenv で導入した Ruby と ffi の相性が悪く、エラーが発生する場合があります。その場合、ffi のインストールに必要な libffi をシステム標準の物を使うように強制することで回避可能です。
Xcode
Xcode も Rosetta で起動するようにチェックを入れるか、arch -arch x86_64
を付けて open コマンドを実行しましょう。
ただし、これだけで安心してはいけません。
シミュレータも合わせて Rosetta で起動するように明示的に設定しないと挙動が不安定になります。
/Applications/Xcode.app/Contents/Developer/Applications/Simulator.app
に対しても Open using Rosetta
を有効化しましょう。
Homebrew の仕様変更
Xcode プロジェクト内で Homebrew でインストールしたコマンドが command not found
になる場合があります。これは、Homebrew 経由でのソフトウェアインストール先が変更になったことによるものです。
# mint の場合
sudo sh -c "mkdir -p /usr/local/bin & ln -s $(brew --prefix)/bin/mint /usr/local/bin/mint"
Xcode 内で実行される Shell Script は一部の PATH しか許可されていないため、従来の PATH にシンボリックリンクを作成することで回避可能です。
Mint 経由のコマンド実行に失敗
xcrun --sdk macosx mint run swiftlint
# ↓
/opt/homebrew/bin/swiftlint
mint run
コマンドが失敗する事象に遭遇しました。
調査・試行錯誤を行いましたが、まだ解決できていないため、一時的に Homebrew 経由でインストールした物を呼び出すように書き換えて対応しています。今回は特に lint 系だったこともあり、ワークアラウンド対応としました。
ワークアラウンドとしてコミットする場合、一律で書き換えるのではなく Apple Silicon の場合のみコマンドを変えるように分岐処理を追加すると良いでしょう。
Break Point によるデバッグに失敗
Break Point を利用して (lldb) p value
のようにコマンド経由でメモリ上のデータにアクセスを試みると以下のようなエラーが出力される場合があります。
Cannot create Swift scratch context (couldn't create a ClangImporter)Cannot create Swift scratch context (couldn't create a ClangImporter)
これはシステム側で設定されているディレクトリに zsh が無いことが原因である場合があります。これもいくつか対処方法がありますが、Xcode が参照する PATH にシンボリックリンクを作成することで回避可能です。
sudo sh -c "mkdir -p /usr/local/bin & ln -s $(brew --prefix)/bin/zsh /usr/local/bin/zsh"
さいごに
いかがだったでしょうか。
他にも環境構築系で苦戦することがあるかと思います。その際には私の環境構築スクリプトも参考にしていただけたらと思います(mac-auto-setup)。
最後まで読んでいただき、ありがとうございます。