Open5
古い iOS アプリを Apple Silicon Mac でビルドできるようにするまでにやったこと
作業前の状態
- CocoaPods でライブラリの依存関係を解決するようになっていた
- Gemfile の状況から bundler 1.x 系 → Ruby 2.6 系を利用していたと推測される
- 元々 Intel mac で開発環境が構築されていた
ターゲットする開発環境
以下の環境でプロジェクトをビルドできる状態にしたい
CPU: Apple M2 Pro
OS: 13.6.6 (Ventura)
Xcode: Version 15.2 (15C500b)
CocoaPods を Ruby 3.x 系で入れ直す
問題
Ruby 2.6 系で pod install
が正常に動作しない
発生していたエラー
$ bundle exec pod install
Analyzing dependencies
Pre-downloading: `CCARadialGradientLayer` from `https://github.com/jilouc/CCARadialGradientLayer`, commit `6db6bfec1962c663a736c22d8dbd5b36724eafba`
Pre-downloading: `LINEActivity` from `git@github.com:OopsMouse/LINEActivity.git`, commit `f2cf19f`
/Users/snaka/.asdf/installs/ruby/2.6.10/lib/ruby/gems/2.6.0/gems/ethon-0.12.0/lib/ethon/curls/classes.rb:35: [BUG] Illegal instruction at 0x0000000100e3c000
ruby 2.6.10p210 (2022-04-12 revision 67958) [arm64-darwin22]
-- Crash Report log information --------------------------------------------
See Crash Report log file under the one of following:
* ~/Library/Logs/DiagnosticReports
* /Library/Logs/DiagnosticReports
for more details.
Don't forget to include the above Crash Report log file in bug reports.
原因
- 古い Ruby に依存する Gem が最新のCPU(ARM系)アーキテクチャに対応していない
対応
- 利用する Ruby のバージョンを Ruby 3.x 系にあげる
asdf で Ruby 3.x 系の最新を入れてみる
$ asdf install ruby latest:3
bundler バージョンが怒られるので、一旦 Gemfile.lock を消してから bndle install
してみる
rm Gemfile.lock
bundle install
これで pod install が正常に実行できるようになった
[Xcode] iOS ターゲット(バージョン) を変更する
問題
ビルドすると以下のような warning が出ていた。
iOS シミュレータがプロジェクトで指定されているバージョン(10.0)に対応していないように見えた。
warning: The iOS Simulator deployment target 'IPHONEOS_DEPLOYMENT_TARGET' is set to 10.0, but the range of
supported deployment target versions is 12.0 to 17.2.99.
原因(?)
プロジェクトの各 target に指定されている Minimum Deployments のバージョンが 10.0 になっていた.
対応
Podfile を変更して iOS バージョンを 10.0 → 12.0 に変更する
Podfile の変更
Podfile
abstract_target 'All' do
- platform :ios, '10.0'
+ platform :ios, '12.0'
use_frameworks!
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
- config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '10.0'
+ config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '12.0'
end
end
end