[jailbreak]iOSでPython3.7.3を実行する

Python

Python(パイソン)は、汎用のプログラミング言語である。コードがシンプルで扱いやすく設計されており、C言語などに比べて、さまざまなプログラムを分かりやすく、少ないコード行数で書けるといった特徴がある。

このPythonをiOS上で実行できるアプリの一つとしてPythonista3があります。

1200円とiOSアプリとしては高価格な部類に入りますが、できることを考えると安すぎるくらいでしょう。

今回はあえてPythonista3を使わずに、iOS上でPythonを実行するための手順を解説していきたいと思います。

手順

まず、ネイティブでPythonを実行するためにはiOSのjailbreakが必須になります。

現在、jailbreak可能なのはiOS12.4までなのでそれ以上のバージョンの方は諦めてください。

ちなみにiOS12.2まではUnc0verを使うほうが多分便利です。

というより、SileoでのPython3のインストールの仕方がわからんかったんよね…

まずはこのサイトからUnc0verをインストールします。

脱獄の手順については面倒なので割愛します。できない人は諦めてください。

Cydia

jailbreakが完了したらCydiaから以下のパッケージをインストールします。全て標準レポジトリからインストールできるので問題ないはずです。

iOS Toolchain

makeしたりする必要最低限のものが入ったパッケージ。

LLVM+Clang, ld64, CC Tools, GNU Make, ldidが同梱されています。

Python3

Python3.7.3-1がリリースされているのでこれをインストールします。

Git

絶対に必要等わけではないですが、あったほうが良いでしょう。

OpenSSH

Cydiaで配布されているTerminalは完成度が高くないのでデバイス自身にSSH接続したほうが便利です。

なのでOpenSSHは必須ですね。

Local SSH

Sandboxの影響で、自身へのSSHは22番ポートが塞がれてしまっています。

なので22の代わりに2222を自動的に使ってくれるのがこのLocal SSHで、これがないと手作業でポートマッピングしないといけないので面倒です。

iOS11までしか互換性がないと言われますが、iOS12.1でも動作しました。

AppStore

SSHクライアントは様々なものがありますが、個人的にオススメなのはPrompt2です。

値段が1800円とおいおい手間暇かけさせてPythonista3より一回り高いじゃないかというお言葉はごもっともです。

なのでこのチュートリアルはどうしてもPythonをroot権限で動かしたい方向けです。

実際にやってみた

ログインするときの初期設定はこんな感じです。ユーザはmobileとrootがありますが、まずはrootでログインしましょう。

パスワードはどちらもデフォルトがalpineなので、ログインしたらすぐにパスワードを変えましょう。

無事にPythonが起動できましたね。

ただしこのままではパッケージマネージャであるpipが入っていないので、インストールしたいと思います。

root権限でないとインストールできんから注意やよ。

$ su
$ python3 -m ensurepip
$ python3 -m pip install --upgrade pip

引用元では他にもいろんなコマンドを紹介していたのですが、これだけで十分動きます。

https://www.reddit.com/r/jailbreak/comments/8rlw95/release_python_364_for_electra_arm64/

では試しにSalmoniaをiOS上で実行してみましょう。

Salmoniaにはrequestsモジュールが必要なのでインストールします。

$ su
$ python3 -m pip install requests
$ exit
$ git clone https://github.com/tkgstrator/Salmonia.git
$ cd Salmonia

と、ここまでは順調なのですがiOS版のPythonにはブラウザをひらくということができないので起動するとエラーを起こしてしまいます。

ちなみにこれはPCで作成したconfig.jsonをWinSCPなどでコピーしてあげれば解決できます。

Salmoniaの動作成功!

まとめ

これでスマートフォンでも無事にPythonもといSalmoniaが動作しましたね!(違

iOS版のネイティブアプリをつくるかどうかはiksm.pyをSwiftに移植できるかどうかにかかっているのですが、これって簡単にできることなんでしょうか?