Open5

古い iOS アプリを Apple Silicon Mac でビルドできるようにするまでにやったこと

snakasnaka

作業前の状態

  • CocoaPods でライブラリの依存関係を解決するようになっていた
    • Gemfile の状況から bundler 1.x 系 → Ruby 2.6 系を利用していたと推測される
  • 元々 Intel mac で開発環境が構築されていた

ターゲットする開発環境

以下の環境でプロジェクトをビルドできる状態にしたい

CPU: Apple M2 Pro
OS: 13.6.6 (Ventura)
Xcode: Version 15.2 (15C500b)
snakasnaka

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 系にあげる
snakasnaka

asdf で Ruby 3.x 系の最新を入れてみる

$ asdf install ruby latest:3

bundler バージョンが怒られるので、一旦 Gemfile.lock を消してから bndle install してみる

rm Gemfile.lock
bundle install

これで pod install が正常に実行できるようになった

snakasnaka

[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 に変更する

snakasnaka

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