Chromium Chronicle #28: iOS で Chrome を使ってみる

エピソード 28: Mark Cogan(フランス、パリ)
前のエピソード

2022 年に iOS 版 Chrome は 10 周年を迎えます。Chrome は最も広く利用されている iOS アプリの 1 つで、現在米国の App Store で 2 番目に多いユーティリティ アプリです。

iOS 版 Chrome は、同期、翻訳、シークレット モード、パスワード マネージャー、自動入力など、人気の Chrome 機能をすべて備えています。 iOS 版 Chrome は、マルチウィンドウやデバイス全体におけるパスワードの自動入力など、iOS のネイティブ機能とも統合されています。

ただし、iOS 版 Chrome は他のすべての Chrome プラットフォーム実装とは大きく異なる重要な点が 1 つあります。

iOS 版の Chrome では Blink を使用しません。

Apple の App Store のルールにより、iOS 版 Chrome では、ウェブ コンテンツの取得とレンダリングに iOS プラットフォーム API を使用する必要があります。そのため、iOS 版 Chrome では WebKit、Nitro、CFNetwork が使用され、他の Chrome プラットフォームでは Blink、V8、//net が使用されています。そのため、iOS アプリでウェブページのコンテンツを操作できる API は制限されているため、//content API を使用する Chrome 機能の多くは、JavaScript インジェクションを使用して iOS 版 Chrome に実装されています。

//components のクロス プラットフォーム機能は、//content の依存関係をサイロ化したまま、すべてのプラットフォームで可能な限り多くのコードを共有するように構造化されています。

ls components/some_component

content/        # code with dependencies on //content.
core/           # cross-platform code with no //content dependencies.
ios/            # iOS implementation using JavaScript injection.

iOS 版 Chrome と他のプラットフォームの Chrome との間の重要な違いは次のとおりです。

  • iOS アプリはシングルプロセスである必要があるため、iOS 版 Chrome では fork() を実行できません。
  • iOS 版 Chrome は、Objective-C++(C++ と Objective-C の組み合わせ)と Swift で作成されています。
  • iOS 上で Chrome を iOS デバイス上で直接コンパイルして実行できますが、Apple が提供する非常に高機能なデバイス シミュレータを使って、さまざまな機能を開発することもできます。

iOS で Chrome を使用する

以下のものが必要になります。

  • macOS 11.3 以降を搭載した 64 ビット macOS コンピュータ。Apple Silicon がサポートされています。
  • Xcode(Apple プラットフォーム用 IDE、バージョン 13.0 以降)
  • JDK の現在のバージョン。

詳しくは、ビルド手順をご覧ください。

ソースの取得方法は他のプラットフォームの場合とほぼ同じです。

mkdir ${HOME}/chromium-ios
cd ${HOME}/chromium-ios
fetch ios

その後、コマンドライン(または Xcode)からビルドできます。

autoninja -C out/Debug-iphonesimulator chrome

iOS 版 Chrome の機能開発の詳細

Chromium スタイルガイドをご覧になることをおすすめします。Swift、xCode、その他の iOS 固有のリソースについて詳しくは、Apple のデベロッパー向けドキュメントをご覧ください。

iOS デベロッパーで Chromium を初めて使用する場合は、重要な抽象化とデータ構造に関するドキュメントをご覧ください。