Pythonで開発したアプリをiOSデバイスで実機テストしたい場合、kivy-iosを使用できます。本記事では、kivy-iosの使い方や実機でのテスト方法などを詳しく解説します。必要なものや設定方法も紹介するので、初心者でも簡単に実践できます。
こんにちは。wat(@watlablog)です。ついに開発したアプリのリリース第一歩です!ここではiOSアプリをiPhoneで実機テストする方法を紹介します!
この記事の目標
PythonプログラミングだけでiOSアプリをつくる
モチベーション
WATLABブログでは主に(というかほとんど全部?)Pythonを使ってプログラミングをしてきました。
いつもは自分で使うためにPyCharmというIDEの画面でプログラミングし、実行して結果を得ていました。
しかし最近はIDE上でなく、デスクトップ環境やモバイル環境で使える実行ファイル形式のソフトウェアを作ってみたいと思い始めました。
「kivyで作ったアプリをNuitkaでexe化する時のエラー対処例」の記事では録音して周波数分析するソフトをNuitkaを使って実行ファイル化することに成功しました。これでPythonの入っていないPCでもPythonで開発されたソフトを使えるようになったのですが、さらに欲が出てきて、今度はモバイルアプリの開発もしてみたくなりました。
筆者のモバイル端末はiPhoneなので、この記事は自分のiPhoneでPythonで開発したソフトをテストするまでを扱います!
Pythonだけでつくる理由
通常iPhoneアプリはSwiftを使ってアプリを開発します。SwiftとはAppleが開発したプログラミング言語であり、iOSやmacOS、watchOS、tvOSといったApple製品向けのアプリケーション開発に使用されます。
Swift自体はPython同様習得が容易な言語と言われていますが、Pythonユーザーからすると新たな言語を覚えなければいけません。
本職のIT技術者なら複数の言語を習得して様々な現場に対応できるようにすべきと思いますが…一介の機械系エンジニアである筆者は腰が重いのでなんとか楽をしようと思ったのがPythonだけでつくる理由です。
先人達のライブラリを多用して作ったPythonアプリをSwiftで再現できる自信なし!
kivy-iosの使い方を習得する
kivyで書いたGUIアプリを使う
この記事ではPythonのGUIアプリ開発ライブラリの中でモバイルアプリに対応しているkivyを使います。
kivyの概要や簡単な使い方は「Python/kivyでGUIアプリ開発!基本の書き方を学ぶ」の記事を参考にしてください。
kivy-iosでPythonアプリをiOS向けに変換する
Pythonで開発したkivyアプリをiOS向けに変換するためにkivy-iosというツールキットを使います。
kivy-iosを使うと、XcodeやiOS SDKなどのApple開発ツールで使えるファイルをPythonスクリプトから自動生成してくれます。依存関係の問題を自動的に解決してくれるのでまさに神ツールです。
公式は以下のGitHubページです。
kivy-ios:https://github.com/kivy/kivy-ios
実は公式ページに簡単なインストラクションが書かれているのですが、慣れない作業に筆者はエラーに悩まされました。ここでは筆者が直面したエラーを紹介しつつ、さらに勘所をメモしつつ使い方を説明します!
XcodeでアプリをビルドしてiPhoneで実機テストする
kivy-iosを使うとXcodeというApple製品用ソフト開発で使われるIDE(統合開発環境)用のプロジェクトファイルが作成されます。
ここまでは上記公式GitHubの説明にあるのですが、そこから先の実機テストまでは解説がありません。さらに筆者はビルドエラー(Build Failed)にかなり悩まされました(何日も…)。Pythonしか触ったことのない人はまさに川から大海に流れ着いた稚魚の如く路頭に迷うと思いますので、この記事ではXcodeで直面したエラーとその解決方法も記録しておきます。
簡単にできることと簡単にはできないこと
Recipesにないライブラリはkivy-iosで変換できない
kivy-iosというツールキットを使えばPythonだけで作ったプログラムを簡単にiOSアプリにできますが、そうそう万能なツールではありません。
以下は2023年3月時点のkivy-iosのtoolchain recipes(ツールチェーン レシピ)です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
$ toolchain recipes audiostream master click 7.1.2 cymunk master ffmpeg n4.3.1 ffpyplayer v3.2 flask 1.1.2 freetype 2.5.5 hostlibffi 3.2.1 hostopenssl 1.1.1g hostpython3 3.7.1 ios master itsdangerous 1.1.0 jinja2 2.11.2 kivy 1.10.1 libffi 3.2.1 libjpeg v9a libpng 1.6.26 markupsafe 1.1.1 moodstocks 4.1.5 numpy 1.16.4 openssl 1.1.1g photolibrary master pillow 6.1.0 plyer master pycrypto 2.6.1 pykka 1.2.1 pyobjus master python3 3.7.1 pyyaml 3.11 sdl2 2.0.8 sdl2_image 2.0.0 sdl2_mixer 2.0.0 sdl2_ttf 2.0.12 werkzeug 1.0.1 |
ここに記載のライブラリ(バージョンも)を使ったプログラムであれば、kivy-iosでXcodeプロジェクトを作成してiOS端末で起動ができます。しかしリストにないライブラリは実行時にKeyErrorを出してアプリが落ちます。
残念ながら当ブログで頻出しているScipyやmatplotlib、OpenCVといったライブラリはリストにありません…。
ここに気付くまでにかなり時間を使いました…。公式をよく読めばわかったのですが、筆者は色々調べていた時に以下のページを見つけてようやく確信に至ったというレベルです。
I have made an app that uses NumPy, SciPy and Pandas which I want to put onto my iOS device. I compile and build using Kivy-iOS but there are errors with the Pandas and SciPy packages and they can't simply be installed via
How do you make a recipe for kivy-ios?pip install
orpython toolchain.py pip install
.
PyAudioやScipy、matplotlibを多用した録音FFTアプリをiOSアプリにしようと思いましたが、そんなに簡単にはいかないようですね。。
Recipesを自分でつくることもできる?
英語で検索している限りでは、Python for Androidのページにあるように、レシピをつくる方法があるそうです。iOSでも似たような手法でつくることができるかもしれません。しかし筆者はまだその方法の具体例を探せていないのでなんとも言えません。おそらくできそう…というレベルですが、これは結構ハードルが高そうですね。
https://python-for-android.readthedocs.io/en/latest/recipes/
そのため今回は簡単なプログラムを使ってiOSアプリをつくるところまでを紹介します。先は長そうであるため、複雑なアプリ制作は別記事にしていきたいと思います。
kivy-iosでXcode用のプロジェクトを作成する手順
動作環境
iOSアプリ開発なのでmacOSを搭載したPCやiPhone、macOSでしか使えないXcodeといったApple信者のような環境が必要になります。Xcodeは後ほどインストール方法から解説しますが、Xcodeを使うためにmacOSのバージョンを上げたりしています。以下に筆者がビルド成功まで確認した時の動作環境一覧を示します。
Mac | OS | macOS Ventura 13.2.1 |
---|---|---|
CPU | 1.4[GHz] | |
メモリ | 8[GB] | |
Xcode | Version | 14.2(14C18) |
iPhone SE2 | OS | iOS 16.3.1 |
gitコマンドを使えるようにしておく
kivy-iosはGitHubのファイルをcloneして作業します。そのためgitコマンドをCUIで使えるようにしておきましょう。以下の記事にgitをインストールする方法を書いていますので、動作確認まで済ませておく必要があります。
・はじめてのGit/GitHub!インストールからリポジトリの作成まで
ソースコードを準備する
サンプルアプリ
今回は「Python/kivyでGUIアプリ開発!基本の書き方を学ぶ」で紹介したシンプルなカウンターアプリをiOSアプリに変換します。
以下のmy.kvファイルとmain.pyを用意すれば動作確認をすることが可能です。kivy-iosを使う場合、main.pyという名前をメインコードに使う必要があります。
my.kvはこちら。こちらも名前はそのままにします。main.pyでMyApp()というclassを使っているので、kivyの仕様から特にPythonファイルでkvファイルを呼び出さなくても読み込まれます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#:kivy 2.1.0 Root: <Root> BoxLayout: orientation:'vertical' Button: id:button1 text:'+1' on_release:root.count_up() Button: id:button2 text:'Reset' on_release:root.count_reset() Label: id:label1 value:0 text:str(self.value) |
main.pyはこちら。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
from kivy.app import App from kivy.uix.boxlayout import BoxLayout class Root(BoxLayout): def count_up(self): self.ids.label1.value += 1 def count_reset(self): self.ids.label1.value = 0 class MyApp(App): title = 'My Application' if __name__ == '__main__': MyApp().run() |
フォルダ構成も躓きポイントだと思うので、以下に今回のフォルダ構成を示します。筆者はSimpleAppというフォルダの中にmy.kvとmain.pyを入れました。
Xcodeをインストールする
あとで使うXcodeもインストールしておきましょう。macOSにPythonをインストールした時にコマンドラインツールをインストールしていたのでこれで良いと思っていましたが、Xcode本体はまだ入っていなかったのでApple Storeから入手しました。
バージョンは13以上であれば良いそうです。
kivy-iosを準備する
kivi-iosをgit cloneする
Terminalを開き、以下のコマンドでソースコードフォルダのあるディレクトリへ移動します。
1 |
cd <SimpleAppのあるディレクトリ> |
以下のコードでkivy-iosをgit cloneします。
1 |
git clone https://github.com/kivy/kivy-ios |
こういうフォルダ構成になります。ただし、必ずしもこのフォルダにkivy-iosがないといけないわけではありません(今回は後ほどのコマンド文をわかりやすくするためにここに置きました)。
フォルダができたらディレクトリを移動します。
1 |
cd kivy-ios |
公式が推奨しているように、仮想環境下で作業を行います。以下のコードを実行するとTerminalの左端に(venv)と付き仮想環境による実行が可能です。
1 2 |
python3 -m venv venv . venv/bin/activate |
kivy-iosをpip installする
次のコマンドでkivy-iosをpip installします。
1 |
pip3 install kivy-ios |
Cythonをpip installする
Cythonを入れていない人は以下のコマンドでpip installします(バージョンは古いのだとだめらしいので指定)。
1 |
pip3 install Cython==0.29.28 |
以下の質疑応答が参考になります。
Any kivy people developing on macOS?? What are the first steps you take to set up your developing environment?
>>OK here is what I've done on my new macbook pro.
https://www.reddit.com/r/kivy/comments/wecn3u/any_kivy_people_developing_on_macos_what_are_the/
pip3 install Cython==0.29.28 (kivy doc pre-req)
kivy-iosの中のrequirements.txtをpip installする
git cloneしたkivy-iosフォルダの中にはrequirements.txtが入っています。requirements.txtとは通常pip freezeした時にリストされるライブラリ一覧を書いておき、異なる環境で一括pip installする時に使います。kivy-iosの中のrequirements.txtにはpbxprojをはじめとしたライブラリが登録されていましたので、忘れずに以下のコマンドでインストールします。
1 |
pip3 install requirements.txt |
依存関係のライブラリをbrew installしてlinkする
次のコマンドでkivy-iosを使う上で依存関係にあるライブラリをインストールし、リンクさせます。
1 2 |
brew install autoconf automake libtool pkg-config brew link libtool |
toolchainを実行する
以前にビルドしたtoolchainが悪影響を及ぼす可能性があるという情報もあり(ChatGPT-4に聞きました…)、buildする前に以下のコマンドでクリーンしておきます。
1 |
toolchain distclean |
これで準備が整ったので次のコマンドでtoolchainを実行します。
1 |
toolchain build python3 kivy |
15分ほどかかりました…!
Errorが出る場合:raise CommandNotFound(k)
「raise CommandNotFound(k) sh.CommandNotFound: python」 のエラーが出る場合は失敗しています。このエラーは筆者の環境だと、以下の質疑応答が役に立ちました(結構探した!)。
error when I run toolchain build kivy python3 #629
You can install kivy-ios from master by typing the following:
https://github.com/kivy/kivy-ios/issues/629
1 pip install https://github.com/kivy/kivy-ios/archive/refs/heads/master.zip
どうやらマスターなるアーカイブにエラーを解決する秘密があるらしい(正直意味はわかっていない)ので、以下のコマンドでpip installします。これでこちらの環境ではエラーがなくなりました。
1 |
pip3 install https://github.com/kivy/kivy-ios/archive/refs/heads/master.zip |
以下のYouTubeはM1チップを搭載したMacにおけるビルドを解説していますが、上記masterにも言及しています。どうやらkivy-iosの次のリリースからはこのmasterをインストールしなくてもよいのでは、との見解ですね。
Xcodeプロジェクトファイルを作成する
最後に以下のコマンドでXcodeのプロジェクトファイルを作成します。
1 |
toolchain create <TITLE> <DIRECTORY> |
すると「TITLE-ios」フォルダが生成され、中にXcodeのプロジェクトファイルが作成されています。
XcodeでアプリをビルドしてiPhone実機テストを行う手順
Xcodeの設定
それではいよいよアプリのビルドをします。
先ほど作成された「〜.xcodeproj」を開くと、以下の画面になります。アプリをビルドするためにはいくつか下準備を必要とします。
Development teamの設定
まずはじめにDevelopment teamの設定を行います。この設定を行わないと、「Signing for "simpleapp" requires a development team. Select a development team in the Signing & Capabilities editor.」というメッセージでBuild Failedとなります。
iOSアプリをApple storeに公開する場合は有料の登録が必要になりますが、自分のiPhoneで実機テストするだけなら無料の範囲で使うことが可能です。ただしその場合でもXcodeで自分のAppleアカウントを登録しておく必要があります。
Xcode→Settings…をクリックします。
Acounts→+マークをクリックします。
Apple ID→Continueをクリックします。
Apple IDを入力してNextをクリックします。
Apple IDが登録されたことを確認し、Manage Certificates...をクリックします。
+マークをクリックします。
Doneをクリックします。
プロジェクト画面のSigning & Capabilities欄にあるTeamをプルダウンから選択します。
アプリをBuildして実機テストする
iPhoneのデベロッパーモードをONにする
これからプロジェクト画面でビルドを行いますが、iPhoneのデベロッパーモードをONにする必要があります。これはiOS 16から追加された内容とのことですが、ONにしないとアプリ起動時に「デベロッパーモードが必要です」と怒られます。
iPhone画面で、
設定→プライバシーとセキュリティ→デベロッパーモード
と設定します。
iPhoneをMacに有線接続してホーム画面にしておく
次にiPhoneを有線でMacに接続し、画面のロックを解除した状態でホーム画面にします。
ビルドする
Xcodeのプロジェクト画面左上にあるRunボタン(▶︎)をクリックしてビルドスタートします。
ビルド途中でパスワード(PCのパスワード)を聞かれる場合は入力して許可をします。
何も問題がなければ、iPhoneへアプリが転送されます!
デフォルトではiPhone上でkivyのアイコンが追加されていると思います。
Build Failedとなる場合は原因を見つけて解決する必要があります。
信頼されていないデベロッパを解決する
無事アプリがiPhoneに転送された場合でも、アプリをクリックすると「信頼されていないデベロッパ」と表示され起動できない場合があります。
iPhone画面の設定→一般→VPNとデバイスの管理と進み、
「デベロッパAPP」をクリック、自分のApple IDが表示されているので、信頼をクリックします。
アプリを起動する
あとはアプリを起動するだけです。
まとめ
ボリュームが多くなってきましたのでここまでとします。Pythonとkivyだけで開発したアプリを無事iPhoneで動かすことができました!
toolchainの使い方やXcodeからビルドする方法はPythonしかやったことがないと初めてのことばかりです。エラーに直面してもどこかに答えはあると思うので、地道に頑張りましょう。
一つハードルが高いと思ったのはRecipesを自分で作らないと自由に外部ライブラリを使えないということ。できるだけ既存のRecipesに存在するライブラリだけで開発するか、Recipes開発者になるか…Pythonだけで実際にアプリストアで公開できるようなアプリをビルドするにはこの2択でしょう。
筆者もまだ録音FFTアプリをつくることは諦めていないので、継続して方法を探ってみます!
まだまだ先は長そうですが、ソフト開発って楽しいと思いました!
Twitterでも関連情報をつぶやいているので、wat(@watlablog)のフォローお待ちしています!