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

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

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 をコンパイルして実行できるほか、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 を初めて使用する場合は、重要な抽象化とデータ構造に関するドキュメントをご覧ください。