ottijp blog

MediaPipeのiOSサンプルサプリをビルドするときにハマった点

2019-12-30 Tags: MediaPipebazelPythoniOS

MediaPipeのiOSアプリサンプルをビルドしようとしたところ,いくつかハマリポイントがあったのでメモします.

環境

$ sw_vers
ProductName:    Mac OS X
ProductVersion: 10.14.5
BuildVersion:   18F132
$ python --version
Python 3.7.1
$ pip show six | grep Version
Version: 1.12.0
$ pip show future | grep Version
Version: 0.18.2

TL;DR

  • bazelのバージョンは1.1.0にする必要がある
  • pyenvを使っている場合はglobalの環境にライブラリをインストールする必要がある(かも)

やったこと

mediapipe/mediapipeiossetup.md at master · google/mediapipeを参考に セットアップし,マルチハンドトラッキングを試すため,次のようなコマンドを実行したところ,エラーになりました.

$ bazel build --config=ios_arm64 mediapipe/examples/ios/multihandtrackinggpu:MultiHandTrackingGpuApp
Starting local Bazel server and connecting to it...
INFO: Options provided by the client:
  Inherited 'common' options: --isatty=1 --terminal_columns=134
INFO: Reading rc options for 'build' from /Users/otti/src/github.com/google/mediapipe/.bazelrc:
  'build' options: --jobs 128 --define=absl=1 --cxxopt=-std=c++14 --copt=-Wno-sign-compare --copt=-Wno-unused-function --copt=-Wno-uninitialized --copt=-Wno-unused-result --copt=-Wno-comment --copt=-Wno-return-type --copt=-Wno-unused-local-typedefs --copt=-Wno-ignored-attributes --incompatible_disable_deprecated_attr_params=false --incompatible_depset_is_not_iterable=false --apple_platform_type=macos --apple_generate_dsym
ERROR: Unrecognized option: --incompatible_depset_is_not_iterable=false

問題1: bazelのバージョン

GitHubにあるチュートリアルではbazelをHomeBrewでインストールするようにありますが,2019/12/29現在だと2.0.0がインストールされました. こちらによると,bazelのバージョンは0.24.1から1.1.0までとあったので, これが問題の1つでした.

そこで,bazelのGitHubページにあるリリースから1.1.0のインストーラを持ってきてインストールしました.

$ wget https://github.com/bazelbuild/bazel/releases/download/1.1.0/bazel-1.1.0-installer-darwin-x86_64.sh
$ chmod +x bazel-1.1.0-installer-darwin-x86_64.sh
$ ./bazel-1.1.0-installer-darwin-x86_64.sh --user

bazelコマンドは$HOME/binにインストールされます.

問題2: pyenvのバージョン指定

※ 今やっても再現しないので勘違いかもしれません.

pyenvを使っているので,localの環境をセットして,必要なライブラリをインストールしましたが,ビルド時になぜかライブラリがないというエラーになりました.

$ pyenv local 3.7.1
$ pip install --user future six
$ bazel build --config=ios_arm64 mediapipe/examples/ios/multihandtrackinggpu:MultiHandTrackingGpuApp

(sixがないよ,というエラーが出ていた)

ビルド時にローカルでない環境でpythonが起動されている感じだったので, 一度globalな環境でpip installしてからリビルドしたところ,うまくビルドできました.

課題

bazelを使ってサンプルアプリをビルドすることはできるようになったのですが, Tulsiを使ってXcodeプロジェクトを作るのがどうにもうまくいきませんでした. (Tulsiのビルドに失敗する.)

$ git clone https://github.com/bazelbuild/tulsi.git
$ cd tulsi
$ git --no-pager diff
diff --git a/.bazelrc b/.bazelrc
index e4da12f..58b310a 100644
--- a/.bazelrc
+++ b/.bazelrc
@@ -1,6 +1,6 @@
 build --cpu=darwin_x86_64
 build --apple_platform_type=macos
-build --xcode_version=10.2.1
+build --xcode_version=11.2.1
$ sh build_and_run.sh

(中略)

ERROR: /private/var/tmp/_bazel_otti/4297d0da58a646c5b5271c3e84680971/external/build_bazel_rules_apple/tools/realpath/BUILD:9:1: in _apple_genrule_inner rule @build_bazel_rules_apple//tools/realpath:realpath_genrule:
Traceback (most recent call last):
        File "/private/var/tmp/_bazel_otti/4297d0da58a646c5b5271c3e84680971/external/build_bazel_rules_apple/tools/realpath/BUILD", line 9
                _apple_genrule_inner(name = 'realpath_genrule')
        File "/private/var/tmp/_bazel_otti/4297d0da58a646c5b5271c3e84680971/external/build_bazel_apple_support/rules/apple_genrule.bzl", line 57, in _apple_genrule_impl
                ctx.resolve_command(<7 more arguments>)
        File "/private/var/tmp/_bazel_otti/4297d0da58a646c5b5271c3e84680971/external/build_bazel_apple_support/rules/apple_genrule.bzl", line 69, in ctx.resolve_command
                apple_support.action_required_execution_requirements(<1 more arguments>)
        File "/private/var/tmp/_bazel_otti/4297d0da58a646c5b5271c3e84680971/external/build_bazel_apple_support/lib/apple_support.bzl", line 208, in apple_support.action_required_execution_requirements
                xcode_config.availability()
type 'XcodeVersionConfig' has no method availability()
ERROR: Analysis of target '//:tulsi' failed; build aborted: Analysis of target '@build_bazel_rules_apple//tools/realpath:realpath_genrule' failed; build aborted
INFO: Elapsed time: 28.495s
INFO: 0 processes.
FAILED: Build did NOT complete successfully (42 packages loaded, 469 targets configured)

bazelのバージョンを変えてみたり,色々試してみましたが,いづれもtype 'XcodeVersionConfig' has no method availability()のエラーでした. Xcodeのバージョンに関係する問題ですかね?

MediaPipeを組み込んだiOSアプリを作ろうと思っているので, 何かしらの方法でXcodeプロジェクトからMediaPipeを使いたいのでちょっと困っています.


ottijp
Satoshi SAKAO (@ottijp)

都内でアプリケーションエンジニアをしています

...