【備忘録】pythonとkivyで開発したアプリをiPhoneに実機転送する方法


現状(2019/12/17追記)

toolchain.pyのソースコードがおそらく変更されており、kivy-iosの手順に従えば、基本的には問題なくできると思う。
何か問題が発生した場合は、pythonkivyをアンインストールしたキレイな状態から開始することをオススメする。
また、pyenvの使用はオススメしない。
kivy-iosの手順ではbrew install pythonと記載がある。手順に従わない方法でpython環境を整えると、うまくいかない可能性が高まる。
ちなみに、pyenvでやると必ずNGという訳ではないと思うが、私はpyenvを使用することにこだわりはなかったので、素直にbrewでインストールした。

やりたいこと

pythonを勉強したい!
なんか適当にアプリを作りたい!
できるならスマホアプリを作りたい!
(外出先でいろいろ遊べるので。)

ひとまず、kivyのtutorialとして提供されているPong GameをiPhone実機で実行することを目標にする。

実行環境

python 3.6.5(Kivy3.appを入れたらこのバージョンのpythonがインストールされた)
kivy 1.10.1
Cython 0.28.1
Mac macOS Mojave 10.14.4
Xcode 10.2.1
iPhone iOS 12.2

手順

基本的にはここに書いてあるコマンドを実行していけばよいが、一部補足して記載する。
https://github.com/kivy/kivy-ios

1 git clone

git clone https://github.com/kivy/kivy-ios.git

ここにあるtoolchain.pyをあとで実行するので、git cloneしておく。
kivy-iosディレクトリが作成されるので、cd kivy-iosしておく。

2 権限(?)の設定

2-1 kivypythonバージョンの確認


kivyとタイプするとpythonプロンプトが起動する。このとき、上図のようにpythonのバージョンを確認できる。
※筆者はbrewによりpython 3.7.3を元々インストールしていたが、Kivy3.appによりkivyをインストールしたところ、kivyにはpython 3.6.5が関連付いた。
パスも異なる為共存しても問題ないが、pythonを実行する際はどの場所にあるどのバージョンのpythonを実行しているかを気にする必要がある。

2-2 pippythonバージョンの確認

head -1 $(which pip)

pipコマンド(実態はpythonスクリプト)のシバンに書いてあるpythonのバージョンを確認する。
シバンだけで確認できない場合は、シンボリックリンクを追ったりpython --versionしてみる。
2つのバージョンが一致していれば、2-4へ移動。

2つのバージョンが一致していない場合、一致させる必要がある。
おそらく、kivypythonバージョンに合わせる方が楽。

2-3 pipを作成し、バージョンを一致させる

適当なディレクトリにcdして下記を実行する。
※実行するpythonは2-1で確認したkivypythonで実行する。
上図で言うpython 3.6.5がどこかにあるのでそのpythonで実行する。

wget https://bootstrap.pypa.io/get-pip.py
python get-pip.py

このときに使用するpythonがポイントで、pythonのパス・バージョンに応じたpipが生成される。
また、実行したpythonが存在するディレクトリにpipが作成される為、/usr/local/bin/pythonなどで実行するとpipが上書きされる可能性がある為注意。
なお、後続の処理で実行するtoolchain.pyの中でwhich pipを行いpipのパスを取得しているようなので、pipを作成した場合はwhich pipでどのpipが参照されているかを確認した方がよい。

2-4 pip実行

pip install -r requirements.txt

この権限(?)の設定はpython毎に実行が必要らしく、kivyに関連付いているpythonのバージョンを変更した場合、再度実行が必要になる。
ちなみにrequirements.txtの内容は下記である。
バージョンの設定か何かをしているようだが、よく分からない。。

requirements.txt
pbxproj==2.5.1
requests>=2.13

3 Xcodeのコマンドラインツールのインストール

xcode-select --install

1つ注意点として、電源を繋いでいないとインストールできなかった。

4 なんかインストール

brew install autoconf automake libtool pkg-config

英文を読む限り必須作業なのか微妙だが、やれるものはやっておこう。
インストール時に下図のように警告やエラーが出ることがある。

警告は、「それ最新入ってるよ」なのでOK。
エラーは、「それ入ってるけどちょい古いから更新かけてね」なので、更新をかける。

4-1 最新バージョンへ更新

brew upgrade automake

4-2 リンクの設定

brew link libtool

上図のように警告が出ることがある。
これも「既にリンクあるよ」なのでOK。

5 Cythonのインストール

pip install cython==0.28.1

2019-05-20現在、こちらのkivyのインストール手順ではCython=0.23を指定している。
上記は有志の方による翻訳のhtml版だが、翻訳時のバージョンが単に0.23だっただけだと推察。
※有志の方、翻訳ありがとうございます!大変助かっています!

6 一旦確認

./toolchain.py recipes

ここで上記コマンドが正常に実行できれば、ここまでの手順はOKと判断できる。
出力結果はrecipeと呼ばれるものの一覧であり、よく分からないがこれらが何なのかは重要なことだと思うので後で調べる。

7 ビルド

./toolchain.py build python3 kivy

ビルドが1回以上必要らしいが、時間がかかることがある。
初回は40分ほどかかった。
なお標準出力にログが大量に出力されるが、ほとんどがDEBUGログである為toolchain.pyのどこかをいじればログの出力を抑制できそうな気がする。
また、作成したアプリに応じてビルド対象を増減する必要がある。

8 Xcode Projectの作成

./toolchain.py create <title> <app_directory>

上記の書式でtoolchain.pyを実行する。
第2引数の「<title>」は作成するアプリの名前なので慎重に決定する。
<app_directory>にはmain.pyが存在していないといけない。

9 Xcodeでプロジェクトを開く

open <title>-ios/<title>.xcodeproj

上記コマンドを実行すると、Xcodeで使用するファイルをまとめたディレクトリ(<title>-ios)が作成される。
<title>.xcodeprojがその名の通りXcodeのプロジェクトファイルなのでopenする。
※作成された<title>-iosの中身を勝手にいじってはいけない。

10 まずはSimulatorで実行

実機で動かす前にSimulatorで実行ができないと話にならないので、Simulatorで実行してみる。

再生ボタンを押下後、下図のようにSimulatorが起動する(一旦iOSのバージョンは適当でよい)。
※初回実行時は少し時間がかかる。
リンゴのマークとプログレスバーが表示される。

左にスライドすると下図のようにpongのアプリがあるのでクリックする。

すると下図のようにpongがSimulator上で実行できていることが確認できる。

11 iPhone実機転送の準備

11-1 iPhoneをMacに接続する。

11-2 下図の「Team」を選択する。

※個人開発でも個人アカウントが出てくるのでそれを選択。
※場合によってはapple IDにログインが求められる。

11-3 下図のようなエラーが発生した場合は、こちらのサイト様を参考に解消する。

11-4 下図のように出力先を実機にする。


12 iPhone実機転送

12-1 再生ボタンを押下!

12-2 iPhone側でアプリの実行を許可する。

アプリ単位ではなくdeveloper単位の様子。

以上。