アプリチームで iOS アプリを開発している髙木です。日経電子版 iOS チームでは、M1 Pro/Max が発売したタイミングで、開発に用いる Mac を順次刷新していきました。 しかし、プロダクトの開発環境によってはスムーズな移行が実現せず、Intelプロセッサ向けに最適化されたアプリを利用するための互換モード、Rosetta(2) を用いる必要があります。
この記事では、日経電子版アプリチームが開発している日経電子版 / 紙面ビューアー / Nikkei Wave のアプリを Rosetta 無しの真の Apple Silicon 環境で動作するように最適化した過程を紹介します。またこの対応でビルド時間が劇的に改善されることも合わせて紹介します。
Apple Silicon 対応
Bitrise CIを用いたCIキャッシング・並行実行テクニックでも簡単に紹介しましたが、現状日経電子版のアプリは以下のツールを用いた構成で実現されています。
- XcodeGen を用いた project.xcodeproj 管理
- Mint/Fastlane を用いた Setup
- Swift Package Manager / Carthage を使ったパッケージ管理
Apple Silicon 対応にあたって、以下のステップが必要でした。
- Ruby (rbenv)を 2.7.X にアップデート
- Framework を XCFramework 形式に対応する
- Carthage から Swift Package Manager に移行する
- Carthage のみ対応しているライブラリは XCFramework にする
- XCFramework を Swift Package Manager で管理する
特に2以降のステップを説明します。
Framework を XCFramework 形式に対応する
Apple Silicon 対応はこのステップが解決できるかにかかっています。
SDK によっては、ビルド済みの Framework
(バイナリフレームワーク形式)のみが提供されている場合があります。
これらは、Xcode 11 から登場した複数のプラットフォームで動作させることが可能な XCFramework
に変更する必要があります。
配信元に根気よくリクエストしましょう!!
Carthage から Swift Package Manager に移行する
Swift Package Manager は Swift の標準パッケージマネージャで近年採用が急速に進んでいます。 今まで Carthage で管理していたライブラリを可能な限り、Swift Package Manager に移行、場合によっては Pull Request を送って対応していきました。
Carthageのみ対応しているライブラリは XCFramework にする
対応することが困難な場合、Carthage も v0.37.0 から利用できる --use-xcframework
オプションを用いることで XCFramework 形式のバイナリフレームワークを生成することが可能です。ライブラリが依存しているライブラリの影響で、単純に対応できないものは Pull Request を送って改善していきました。
XCFrameworkをSwift Package Manager で管理する
Apple Silicon 対応と直接関係はありませんが、XCFramework は Swift Package Manager で管理することも可能です。日経のプロジェクトではこれを進めることで、プロジェクトファイルを Xcode で開けばすぐに開発が始められる状態へと改善しました。 毎日開く環境だからこそ、必要なステップはなるべく少なくできると快適ですよね。
ビルド時間チェック! どれくらい早くなった?
これらを経て、日経電子版のアプリたちはApple Silicon Mac でも問題なくビルドができるようになりました。 せっかくなので、既存の Intel Mac / Apple Silicon (Rosetta Mode) / Apple Silicon で Release 向けアーカイブにかかるビルド時間に対して数回平均をとってざっくりと比較してみました。
端末スペックはそれぞれ以下となります。
- Intel: 8 コア Intel Core i9 2.3 GHz 64 GB Intel UHD Graphics 630, AMD Radeon Pro 5500M 1TB
- Apple Silicon (Rosetta): 10 コア CPU M1 Max 64GBユニファイドメモリ 1TB
- Apple Silicon: 10 コア CPU M1 Max 64GBユニファイドメモリ 1TB
Intel | Rosetta | Apple Silicon | |
---|---|---|---|
Build Time (sec) | 634 | 502 | 318 |

Rosetta でも体感凄く早くなったと思っていましたが、 Rosetta無し はそれを更に凌駕する速さですね! Intel と比べると、半分の時間に短縮しています。 Rosetta モードで開発している方は、このグラフを見て、Rosetta からの脱却を目指したくなったのではないでしょうか?
日経電子版アプリチームではこうした開発環境の改善も逐次行っています。 関心を持たれた方は、ぜひキャリア採用や新卒採用、インターンなどにご応募いただければと思います。カジュアル面談も実施しております。