Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Prepare CirclrCI's macOS Intel Support Deprecation

Prepare CirclrCI's macOS Intel Support Deprecation

Kuroruri

May 21, 2024
Tweet

More Decks by Kuroruri

Other Decks in Programming

Transcript

  1. - 名前 - くろるり - 所属 - teamLab Inc. -

    仕事 - iOSアプリ作る - アプリ開発効率化有志チーム - 業務改善有志チーム 本日話している人
  2. https://discuss.circleci.com/t/macos-intel-support-deprecation-in-januar y-2024/48718 28 June 2024 - Gen2 will no longer

    be available to use - Customers will need to update their config to a new resource class before this date to avoid build errors とはいえ 終わりは来る
  3. 事例 : ライブラリが arm64-simulator 非対応 - Google の MLKit など

    arm64-simulator 非対応ライブラリが入っている - このため arm64-simulator での Unit Test が動かない - 或いはマルチモジュール構成でコンパイ ルエラーが発生する - この状態になっていないかの判断は BuildSettings を見ればわかる $ bundle exec fastlane my_test_lane (中略) ❌ /Users/distiller/project/MyProject/MyModel.swift: could not find module '<SubModule>' for target 'x86_64-apple-ios-simulator'; found: arm64-apple-ios-simulator,
  4. 対応 : rosetta 入れて rosetta simulator でテストする - macOS Orb

    使って rosetta いれる - https://circleci.com/developer/ja/orbs /orb/circleci/macos#commands-install- rosetta - fastlane run_tests ( scan ) の run_rosetta_simulator を true にする - https://docs.fastlane.tools/actions/sc an/ - とはいえ根本療法は arm64 simulator に 対応することに違いはない jobs: my_job: executor: my_executor steps: - checkout - macos/install-rosetta lane :my_test_lane do scan( run_rosetta_simulator: true, formatter: "xcpretty-json-formatter", clean: true, skip_slack: true, result_bundle: true, ) end
  5. install_mint: steps: - restore_cache: keys: - mintbin-{{ checksum ".xcode-version" }}-{{

    checksum "DevelopmentTools/Package.resolved" }} - run: name: Build Mint Binary command: | DevelopmentTools/.build/release/mint --version || (bundle exec fastlane build_tools_install package_path:./DevelopmentTools product:mint && DevelopmentTools/.build/release/mint --version) - save_cache: key: mintbin-{{ checksum ".xcode-version" }}-{{ checksum "DevelopmentTools/Package.resolved" }} paths: - ./DevelopmentTools/.build ※ build_tools_install は `spm build release` を叩く自作 lane 事例: ツールのバイナリキャッシュが x86_64 のまま - Swift 製 CLI ツールを SPM で 管理しているパターン - SPM の Build Tools Plugin ではない、 CLI ツール自作に近い形の話 - CI/CD パイプライン中で実行バイナリを ビルドしてキャッシュを持ってる - Homebrew でツールをインストールして キャッシュを持ってるパターン
  6. 対応: キャッシュ分ける - CircleCI にはキャッシュを 削除する機能が無い - キャッシュのキーが変わりさえすれば 問題がないので、キャッシュのキーに CPU

    アーキテクチャを含める変更が良い install_mint: steps: - restore_cache: keys: - mintbin-{{ arch }}-{{ checksum ".xcode-version" }}-{{ checksum "DevelopmentTools/Package.resolved" }} - run: name: Build Mint Binary command: | DevelopmentTools/.build/release/mint --version || (bundle exec fastlane build_tools_install package_path:./DevelopmentTools product:mint && DevelopmentTools/.build/release/mint --version) - save_cache: key: mintbin-{{ arch }}-{{ checksum ".xcode-version" }}-{{ checksum "DevelopmentTools/Package.resolved" }} paths: - ./DevelopmentTools/.build ※ build_tools_install は `spm build release` を叩く自作 lane
  7. 事例: そもそもツールが arm64 対応してない - 例えば danger-xcov で使われる xcov の

    core プログラムが arm64 未対応 - https://github.com/fastlane-communit y/xcov/issues/214#issuecomment-161 2024225 - https://discuss.circleci.com/t/danger- xcov-fails-on-apple-silicon/48360
  8. 事例: シミュレータタイムアウト問題 ( Xcode 15.0.1 ) - fastlane の scan

    を実行すると コンパイルは終わるけどシミュレータが 起動せずに timeout が発生 - https://discuss.circleci.com/t/too-long -with-no-output-exceeded-30m0s-con text-deadline-exceeded/49794 - timeout 発生しなくても時間が伸びるの で金がかかる - 一見 macos/preboot-simulator で 解決するように思えるが・・・
  9. 例外: rosetta simulator 指定時 - fastlaen の scan は run_rosetta_simulator

    を指定すると device の指定が正しく動作しないらしい - https://github.com/fastlane/fastlane/ issues/21293 - つまり preboot した device を使わせる ことが出来ない - 勝手に device を選んでその起動待ちで timeout してしまう
  10. 対応: No Xcode 15.0.x, Use Xcode 15.1.0 or later -

    パフォーマンスが悪い Xcode 15.0.x を 使わなければ良い - Xcode 15.1.0 以上だと改善するので、 Xcode 15.1.0 以上を使う - 体感上 15.1.0 以上なら preboot しなく ても問題ないパフォーマンス
  11. - 多分クラウドの macOS はサーバーラックに物理筐体が並んでいるので、 マシン毎の物理 IP もマシン毎に固定されるはず - よっておそらく Intel

    のマシン群で使われる IP と m1 のマシン群で使われる IP は別 事例: m1 だと IP 制限かかったリソースにアクセス出来ん 対応: IP 許可見直す - 単純に IP 許可が漏れているだけと想定されるので設定見直す