Edited at

python+kivyのアプリをiPhone実機転送する際の注意点


前提

こちらの記事(筆者作成)pong.pyを一度実機転送したのですが、pong.pypython2系で書かれている為、python3系のアプリだとまた少し工夫が必要なようです。

本記事では備忘の為に、対処内容を記載します。

また、lightningケーブルの調子が悪く、python3系の自作アプリの実機転送はまだできていません。

しかし、XCodeiOSSimulatorでは起動が確認できた為、大体OKだと思っています。

実機転送できました!


注意点1 toolchain.pyのシバンを修正する

toolchain.pyのシバンには#!/usr/bin/env pythonと記載されています。

toolchain.pyはこちら。

私の環境でenv pythonを起動するとpython2.7.10が起動しました。

スクリーンショット 2019-09-03 21.57.25.png

つまり、toolchain.pyを起動するpythonを指定しなければ、python2系で実行されてしまいます。


解決方法

env pythonpython3系にするのが面倒だった方法が分からなかったので、toolchain.pyのシバンを直接python3系のpythonに修正しました。


注意点2 .kvファイルのファイル名に大文字は使用しない

当初、bigApple.kvのように複数の単語をCamelケースで連結した.kvファイルを使用していました。

これはMac上の起動では何ら問題なく動くのですが、iOSSimulatorではうまく動きませんでした。

症状として、iOSSimulatorでアプリ起動後に真っ黒な画面がずっと表示されたままになります。ログには特に変わったことは何も出力されず、結構困りました。。


解決方法

おそらく大文字を使用していることが問題なので、bigapple.kvapple.kvなどとすれば解決します。

※当然のことながら、if __name__ == '__main__':内でrun()を実行するクラス名と一致させる必要があります。


備考

@dario_okazakiさんのこちらの記事@taashiさんがコメントされている内容と同じだと思います。


注意点3 .kvファイルでのmainimport方法

@dario_okazakiさんのこちらの記事で、bookSearch.kvの1行目に#: import main mainという記載があります。

これをすると、.kvファイルから.pyファイルの変数や関数などにアクセスすることができます。

これもMac上では問題なく起動するのですが、iOSSimulatorではmainモジュールがうまく探せないようで、動きませんでした。


解決方法

#: import main __main__とすることにより解決しました。


注意点4 自作モジュールのインポート

main.py以外に自作のモジュールを用意して読み込ませる方法ですが、iOSSimulatorではうまくいきませんでした。

パスが通っていないことが原因でした。


解決方法

テンプレートファイルを修正して、パスを通します。

修正ファイルの配置場所:

.../kivy-ios/tools/templates/{{ cookiecutter.project_name }}-ios

修正ファイル

スクリーンショット 2019-10-17 20.25.27.png

修正箇所

スクリーンショット 2019-10-17 20.28.34.png

修正内容(main.pyと同階層にあるモジュールを読み込みたい場合)

%@/YourAppを追加します。

スクリーンショット 2019-10-17 20.31.22.png


解説

toolchain.pyXCodeプロジェクトをcreateすると、(少なくとも私の環境では)下記ディレクトリにファイルたちが作成されます。

~/Library/Developer/CoreSimulator/Devices/[UUID1]/data/Containers/Bundle/Application/[UUID2]/[アプリ名].app

[アプリ名].appはファイルではなくディレクトリ

[アプリ名].appは上記のmain.mで言う%@に当たります。よって、パスが通っています。

しかし、[アプリ名].appに入ってみても、main.pypythonモジュールは見当たりません。

そこで[アプリ名].app内のYourAppに入ってみると、main.pycpythonモジュールを見つけることができます。

つまり、ここにパスを通せば読み込めます。

ちなみに、kivyのライブラリは[アプリ名].app/lib/python3.7/site-packages/kivyにあるので、パスが通っており使用できます。

pythonのバージョンは人によって異なるかもしれません。

他に何か注意点を見つけたら追記していきます。