前提
こちらの記事(筆者作成)でpong.py
を一度実機転送したのですが、pong.py
はpython2
系で書かれている為、python3
系のアプリだとまた少し工夫が必要なようです。
本記事では備忘の為に、対処内容を記載します。
また、lightningケーブルの調子が悪く、python3系
の自作アプリの実機転送はまだできていません。
しかし、XCode
のiOSSimulator
では起動が確認できた為、大体OKだと思っています。
実機転送できました!
注意点1 toolchain.py
のシバンを修正する
toolchain.py
のシバンには#!/usr/bin/env python
と記載されています。
※toolchain.py
はこちら。
私の環境でenv python
を起動するとpython2.7.10
が起動しました。
つまり、toolchain.py
を起動するpython
を指定しなければ、python2
系で実行されてしまいます。
解決方法
env python
をpython3
系にするのが面倒だった方法が分からなかったので、toolchain.py
のシバンを直接python3
系のpython
に修正しました。
注意点2 .kv
ファイルのファイル名に大文字は使用しない
当初、bigApple.kv
のように複数の単語をCamelケースで連結した.kv
ファイルを使用していました。
これはMac
上の起動では何ら問題なく動くのですが、iOSSimulator
ではうまく動きませんでした。
症状として、iOSSimulator
でアプリ起動後に真っ黒な画面がずっと表示されたままになります。ログには特に変わったことは何も出力されず、結構困りました。。
解決方法
おそらく大文字を使用していることが問題なので、bigapple.kv
やapple.kv
などとすれば解決します。
※当然のことながら、if __name__ == '__main__':
内でrun()
を実行するクラス名と一致させる必要があります。
備考
@dario_okazakiさんのこちらの記事で@taashiさんがコメントされている内容と同じだと思います。
注意点3 .kv
ファイルでのmain
のimport
方法
@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
修正内容(main.py
と同階層にあるモジュールを読み込みたい場合)
%@/YourApp
を追加します。
解説
toolchain.py
でXCode
プロジェクトをcreate
すると、(少なくとも私の環境では)下記ディレクトリにファイルたちが作成されます。
~/Library/Developer/CoreSimulator/Devices/[UUID1]/data/Containers/Bundle/Application/[UUID2]/[アプリ名].app
※[アプリ名].app
はファイルではなくディレクトリ
[アプリ名].app
は上記のmain.m
で言う%@
に当たります。よって、パスが通っています。
しかし、[アプリ名].app
に入ってみても、main.py
やpython
モジュールは見当たりません。
そこで[アプリ名].app
内のYourApp
に入ってみると、main.pyc
やpython
モジュールを見つけることができます。
つまり、ここにパスを通せば読み込めます。
ちなみに、kivy
のライブラリは[アプリ名].app/lib/python3.7/site-packages/kivy
にあるので、パスが通っており使用できます。
#python
のバージョンは人によって異なるかもしれません。
他に何か注意点を見つけたら追記していきます。