このチュートリアルでは、Bazel を使用してシンプルな iOS アプリを作成する方法について説明します。
学習内容
このチュートリアルでは、以下の方法について学習します。
- Bazel と Xcode をインストールし、 サンプル プロジェクト
- ソースコードを含む Bazel ワークスペースをセットアップします。
そのアプリの最上位のレベルを特定する
WORKSPACE
ファイルと、 ワークスペース ディレクトリ WORKSPACE
ファイルを更新して、必要なファイルへの参照を含めます。 外部依存関係BUILD
ファイルを作成する- Bazel を実行して、シミュレータと iOS デバイス用のアプリをビルドします。
- シミュレータと iOS デバイスでアプリを実行する
環境の設定
まず、Bazel と Xcode をインストールしてサンプル プロジェクトを入手します。
Bazel をインストールする
インストール手順に沿って Bazel をインストールします。 確認します。
Xcode をインストールする
Xcode をダウンロードしてインストールします。 Xcode には、Bazel によるビルドに必要なコンパイラ、SDK、その他のツールが含まれています Apple アプリケーション。
サンプル プロジェクトを取得する
また、GitHub からチュートリアルのサンプル プロジェクトを取得する必要もあります。GitHub
リポジトリには、source-only
と main
の 2 つのブランチがあります。source-only
ブランチ
プロジェクトのソースファイルのみが格納されています。このモジュールでは、
作成します。main
ブランチに両方のソースファイルが含まれている
Bazel WORKSPACE
ファイルと BUILD
ファイルを完了しました。このプロジェクト内のファイルを使用して、
ブランチを開いて、チュートリアルのステップが完了したら、作業をチェックしてください。
コマンドラインで次のコマンドを入力して、source-only
内のファイルを取得します。
branch:
cd $HOME
git clone -b source-only https://github.com/bazelbuild/examples
git clone
コマンドにより、$HOME/examples/
という名前のディレクトリが作成されます。この
ディレクトリには、Bazel のサンプル プロジェクトがいくつか含まれています。このプロジェクトのプロジェクト ファイルは、
チュートリアルは $HOME/examples/tutorial/ios-app
にあります。
ワークスペースを設定する
ワークスペースとは、ファイルの内容が
1 つ以上のソフトウェア プロジェクトのソースファイルと WORKSPACE
ファイル
および BUILD
ファイル(Bazel がビルドに使用する命令を含む)
ソフトウェアです。ワークスペースには出力ファイルへのシンボリック リンクも
ディレクトリを作成します。
ワークスペース ディレクトリは、ファイル システム上の任意の場所に配置でき、
(ルートに WORKSPACE
ファイルが存在する場合)。このチュートリアルでは、
ワークスペース ディレクトリは $HOME/examples/tutorial/
です。これにはサンプルが含まれています。
前のステップで GitHub リポジトリからクローンを作成したプロジェクト ファイル。
便宜上、$WORKSPACE
環境変数を設定して、
表示されます。コマンドラインで、次のように入力します。
export WORKSPACE=$HOME/examples/tutorial
WORKSPACE ファイルを作成する
すべてのワークスペースの最上位に WORKSPACE
という名前のテキスト ファイルを配置する必要があります。
ディレクトリにあります。このファイルは空であるか、参照が含まれている可能性があります
必要な外部依存関係に
ソフトウェアです。
ここでは、空の WORKSPACE
ファイルを作成します。このファイルは、
ワークスペース ディレクトリを特定します。後のステップでファイルを更新し、
外部依存関係の情報が含まれています。
コマンドラインで次のように入力します。
touch $WORKSPACE/WORKSPACE
open -a Xcode $WORKSPACE/WORKSPACE
これにより、空の WORKSPACE
ファイルが作成されて開きます。
WORKSPACE ファイルを更新する
Apple デバイス向けのアプリケーションをビルドするには、Bazel で最新のアプリケーションを pull する必要があります。
Apple のビルドルール
GitHub リポジトリからデプロイできますこれを有効にするには、以下を追加します。
git_repository
WORKSPACE
ファイルに次のルールを追加します。
load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository")
git_repository(
name = "build_bazel_rules_apple",
remote = "https://github.com/bazelbuild/rules_apple.git",
tag = "0.19.0",
)
git_repository(
name = "build_bazel_rules_swift",
remote = "https://github.com/bazelbuild/rules_swift.git",
tag = "0.13.0",
)
git_repository(
name = "build_bazel_apple_support",
remote = "https://github.com/bazelbuild/apple_support.git",
tag = "0.7.2",
)
git_repository(
name = "bazel_skylib",
remote = "https://github.com/bazelbuild/bazel-skylib.git",
tag = "0.9.0",
)
ソースファイルを確認する
次の場所にあるアプリのソースファイルを確認して、
$WORKSPACE/ios-app/UrlGet
。ここでもこれらのファイルを見て
アプリの構造に慣れるこれらを編集する必要はありません。
ソースファイルを指定します。
BUILD ファイルを作成する
コマンドライン プロンプトで、編集用に新しい BUILD
ファイルを開きます。
touch $WORKSPACE/ios-app/BUILD
open -a Xcode $WORKSPACE/ios-app/BUILD
ルールの load ステートメントを追加する
iOS ターゲットをビルドするには、Bazel で GitHub リポジトリからビルドルールを読み込む必要があります
常にトリガーされるようにします。これらのルールをプロジェクトで使用できるようにするには、
次の load ステートメントを BUILD
ファイルの先頭に追加します。
load("@build_bazel_rules_apple//apple:ios.bzl", "ios_application")
必要なのは、objc_library
ルールによって ios_application
ルールが
Bazel パッケージに組み込まれています。
objc_library ルールを追加する
Bazel には、Android Studio 用のアプリをビルドするために使用できるビルドルールがいくつか用意されています。
ダウンロードしますこのチュートリアルでは、最初に
Bazel に指示する objc_library
ルール
アプリのソースコードと Xib ファイルから静的ライブラリをビルドする方法。その後
こちらの
ios_application
アプリケーション バイナリと .ipa
バンドルのビルド方法を指示するルールです。
次のコードを BUILD
ファイルに追加します。
objc_library(
name = "UrlGetClasses",
srcs = [
"UrlGet/AppDelegate.m",
"UrlGet/UrlGetViewController.m",
"UrlGet/main.m",
],
hdrs = glob(["UrlGet/*.h"]),
data = ["UrlGet/UrlGetViewController.xib"],
)
ルールの名前 UrlGetClasses
をメモします。
ios_application ルールを追加する
「
ios_application
ルールはアプリケーション バイナリをビルドし、.ipa
バンドル ファイルを作成します。
次のコードを BUILD
ファイルに追加します。
ios_application(
name = "ios-app",
bundle_id = "Google.UrlGet",
families = [
"iphone",
"ipad",
],
minimum_os_version = "9.0",
infoplists = [":UrlGet/UrlGet-Info.plist"],
visibility = ["//visibility:public"],
deps = [":UrlGetClasses"],
)
deps
属性が UrlGetClasses
ルールの出力を参照する仕組みに注意してください。
先ほどの BUILD
ファイルに追加したものが表示されます。
ファイルを保存して閉じます。BUILD
ファイルと
完成した例
(GitHub リポジトリの main
ブランチにあります)
アプリをビルドしてデプロイする
これで、アプリをビルドしてシミュレータにデプロイする準備が整いました。 iOS デバイスの場合。
ビルドされたアプリは $WORKSPACE/bazel-bin
ディレクトリにあります。
このチュートリアル用に完成した WORKSPACE
ファイルと BUILD
ファイルは、次の場所にあります。
main ブランチ
ご覧ください。自分の作業内容を完成したファイルと比較して、
その他のヘルプやトラブルシューティング
シミュレータ用のアプリをビルドする
現在の作業ディレクトリが Bazel ワークスペース内にあることを確認します。
cd $WORKSPACE
次に、次のコマンドを入力してサンプルアプリをビルドします。
bazel build //ios-app:ios-app
Bazel がサンプルアプリを起動し、ビルドします。ビルドプロセス中に、 出力は次のようになります。
INFO: Found 1 target...
Target //ios-app:ios-app up-to-date:
bazel-bin/ios-app/ios-app.ipa
INFO: Elapsed time: 0.565s, Critical Path: 0.44s
ビルドの出力を確認する
.ipa
ファイルとその他の出力は、
$WORKSPACE/bazel-bin/ios-app
ディレクトリ。
シミュレータでアプリを実行してデバッグする
これで、iOS Simulator を使用して Xcode からアプリを実行できるようになりました。まず、 Tulsi を使用して Xcode プロジェクトを生成します。
次に、Xcode でプロジェクトを開き、ランタイム スキームとして iOS Simulator を選択します。 [実行] をクリックします。
デバイス用アプリを作成する
iOS デバイスでインストールして起動するようにアプリをビルドするには、Bazel に以下が必要です。 そのデバイスモデルに適したプロビジョニング プロファイル。手順は次のとおりです。
Apple デベロッパー アカウントに移動します。 ご利用のデバイスに適したプロビジョニング プロファイルをダウンロードします。詳しくは、 Apple のドキュメント をご覧ください。
プロフィールを
$WORKSPACE
に移行します。(省略可)プロファイルを
.gitignore
ファイルに追加します。BUILD
ファイルのios_application
ターゲットに次の行を追加します。provisioning_profile = "<your_profile_name>.mobileprovision",
デバイス用のアプリをビルドします。
bazel build //ios-app:ios-app --ios_multi_cpus=armv7,arm64
これにより、アプリがファットなバイナリとしてビルドされます。特定のデバイス向けにビルドするため ビルド オプションで指定します。
特定の Xcode バージョン向けにビルドするには、--xcode_version
オプションを使用します。宛先
特定の SDK バージョン向けにビルドするには、--ios_sdk_version
オプションを使用します。「
ほとんどの場合、--xcode_version
オプションで十分です。
最低限必要な iOS バージョンを指定するには、minimum_os_version
を追加します
パラメータを BUILD
ファイルの ios_application
ビルドルールに追加します。
また、 Tulsiから コマンドラインではなく GUI を使用してアプリをビルドします。
デバイスにアプリをインストールする
デバイスにアプリをインストールする最も簡単な方法は、Xcode を起動して
Windows > Devices
コマンドを使用します。接続したデバイスを
[Add](プラス記号)ボタンをクリックしてアプリを追加します。
「インストール済みのアプリ」ビルドした .ipa
ファイルを選択します。
アプリがデバイスにインストールされない場合は、
BUILD
ファイルで正しいプロビジョニング プロファイル(前の
セクションを参照)。
アプリを起動できない場合は、アプリが
プロファイルを指定します。Devices
画面の View Device Logs
ボタンは、
Xcode は、何が問題であったかに関するその他の情報を提供する場合があります。
関連情報
詳しくは、 main ブランチ ご覧ください。