Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Prepare CirclrCI's macOS Intel Support Deprecation
Search
Kuroruri
May 21, 2024
Programming
57
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Prepare CirclrCI's macOS Intel Support Deprecation
Kuroruri
May 21, 2024
More Decks by Kuroruri
See All by Kuroruri
CI/CD·自動化入門
kuroruri
1
4.7k
Knowledge obtained by making about 10 apps with Redux in iOS
kuroruri
0
1k
Other Decks in Programming
See All in Programming
変わらないものが、変わるものを決める — 意図駆動開発 × イベントソーシング × イミュータブル | What Doesn't Change Decides What Can — IDD × Event Sourcing × Immutability
tomohisa
0
1.8k
使いながら育てる Claude Code — 開発フローの1コマンド化 × 繰り返し指摘の自動仕組み化
shiki_kakaku
0
1.9k
プロポーザルを書いてもらう
pvcresin
0
560
30年振りにコンパイラの定数整数除算を改善した
herumi
1
450
楽しそうなつよつよエンジニアと目が死んでる僕/A brilliant engineer having a blast, and dead-eyed me.
3l4l5
2
200
Discordを用いたラボオートメーション関連情報収集の自動化
noguhiro2002
0
170
為什麼你並不需要ViewModel / No, you don't need a ViewModel
lovee
1
500
AWS DevOps AgentのAzure接続機能を検証して見えた活用法/Use Cases Verified for the AWS DevOps Agent's Azure Connectivity Feature
masakiokuda
1
250
「人を評価する AI」の設計と実装
ryoyanara
0
220
運用ダッシュボードの設計を誰も教えてくれないのだけどみなさんどうしてるんですか? - チームに監視するという文化を根付かせるための第一歩を踏みたい -
satoshi256kbyte
1
140
AI時代に設計が 最大の生産性レバーになる 意図駆動開発とデータを消さない設計|Don't Delete Your Data or Your Intent — Design as the Deepest Lever in the AI Era
tomohisa
1
1.1k
まだ間に合う!今年の夏こそSchemeのマクロ展開器を完全理解!
omasanori
0
150
Featured
See All Featured
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
480
Code Reviewing Like a Champion
maltzj
528
40k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.9k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.6k
Utilizing Notion as your number one productivity tool
mfonobong
4
550
Designing for humans not robots
tammielis
254
26k
Facilitating Awesome Meetings
lara
57
7.1k
The Cult of Friendly URLs
andyhume
79
7k
Un-Boring Meetings
codingconduct
0
390
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.7k
Making the Leap to Tech Lead
cromwellryan
135
10k
Transcript
CircleCI の Intel macOS 廃止に備える Mobile勉強会 Wantedly × チームラボ ×
Sansan #14
- 名前 - くろるり - 所属 - teamLab Inc. -
仕事 - iOSアプリ作る - アプリ開発効率化有志チーム - 業務改善有志チーム 本日話している人
はじめに
質問 : 開発者の PC は Apple Silicon ?
おそらく 殆ど YES コンパイル早くなるしね 多分みんな乗り換えてるよね
質問 : CI/CD サービスのほうは?
多分、半々 概ね料金上がるし
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 とはいえ 終わりは来る
CI/CD での Apple Silicon 対応時の 引っ掛かりポイントを 幾つかピックアップ
本題
コード側は Apple Silicon 対応 ?
事例 : ライブラリが 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,
対応 : 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
使用ツール類は Apple Silicon 対応?
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 でツールをインストールして キャッシュを持ってるパターン
対応: キャッシュ分ける - 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
事例: そもそもツールが 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
対応: rosetta 入れる - 根本療法はツール側の arm64 対応 - 暫定対処的には rosetta
を入れてしまえ ば良い
他、CircleCI 固有のあれこれ
事例: シミュレータタイムアウト問題 ( 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 で 解決するように思えるが・・・
例外: rosetta simulator 指定時 - fastlaen の scan は run_rosetta_simulator
を指定すると device の指定が正しく動作しないらしい - https://github.com/fastlane/fastlane/ issues/21293 - つまり preboot した device を使わせる ことが出来ない - 勝手に device を選んでその起動待ちで timeout してしまう
対応: 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 しなく ても問題ないパフォーマンス
- 多分クラウドの macOS はサーバーラックに物理筐体が並んでいるので、 マシン毎の物理 IP もマシン毎に固定されるはず - よっておそらく Intel
のマシン群で使われる IP と m1 のマシン群で使われる IP は別 事例: m1 だと IP 制限かかったリソースにアクセス出来ん 対応: IP 許可見直す - 単純に IP 許可が漏れているだけと想定されるので設定見直す
事例: AWS S3 へのアクセスが遅くなる、終わらん https://support.circleci.com/hc/en-us/articles/19334402064027-Troubleshooting-slow-uploads-to-S3-for-jobs-using-an-m1-macOS-resource-class
色々あるけど粛々やろう