AppleStoreにはたまに香ばしいアプリが置いてあることがあります。
大半は例のごとくAppleにリジェクトを食らい消滅します。
私はいつものように珍しいアプリ等を探していたところ…
「LibTerm」なる何やら香ばしいアプリを見つけたのでご紹介( 。・ω・)ノ
LibTermとは…
“LibTermは、Python 3.7およびLua 5.3を搭載したiOS用の端末です。
このアプリはOpenTermのようなものですが、この端末はあなた自身のアプリに埋め込むことができ、LuaとPython 2.7をサポートします。” (GitHubの説明文をGoogle翻訳したやつ)
とまあ…OpenTermというsandbox内で動くターミナルをベースに作り、一からコードを書き直した端末系アプリのようです( 'ω')
で、実際使ってみたのですが…まあ…不具合が多いというのが第一印象。(出たばかりなのと無料アプリだからというものもありそう…。無料アプリに期待するのは間違いというのはいつものお約束ですけどねー。)後「これちょっとどうなの?()」って不具合を見つけたのでこれもご紹介。ちなみに、この手のアプリは注意すべき点として「変な通信をしてないか」を疑うべきなのですが見た感じ変な通信はしてない模様…( 'ω')
まあ…怪しさマックスですが、何はともあれ使ってみました( 'ω')
開いた直後はこんな感じになってます。
なお、OpenTermの様にフォントカラーを変えることはできないようになっています。
(※開発者さんに英語で直接頼めば実装してくれそうではありそう…)
早速使って行くわけですが
アプリの説明文には
”コマンドを追加するには package installからインストールして下さい"
との事ですが、実はGithub上にこっそりと”自作のコマンドを追加するには設置してあるリポジトリにコミット申請してね”と書いてあるわけで…つまり、Githubアカウントを取得後にコミット申請しないと自作コマンドを”package install”でインストールするのは無理なご様子…
しかし、私はこの手のアプリはかなり触って来たのでとりあえず自力で無理矢理に解決してみました( 'ω')ノ
(※以下で解説するやり方は開発者の意図に反している可能性が非常に高い為今後修正される可能性が大いにあります。ご了承下さい)
まず、ターミナルから
“python -m pip install pproxy” 等のコマンドが追加されるPythonモジュールをインストールします。
次に以下のコマンドで”package install” でインストールされるフォルダーの一個上に行きます。
“cd ../Library/“
“ls”コマンドで一覧を取得するとわかるのですが
「Caches」,「scripts」,「Preferences」,「stash_extensions」の4つがあると思います。
とりあえず”rm -rf scripts“ とし「scripts」の項目を削除。(※「rm -rf」とは…rmコマンドは通常フォルダーは削除できません。しかし「-rf」オプションを付けると空フォルダーじゃなくてもフォルダーだったとしても削除してくれるようになります。なお、使い方次第ではハードディスクを空っぽにできたりするので管理者権限での扱いには結構注意が必要だったり…)
次に”ln -s stash_extensions/bin/ scripts“ とし「stash_extensions」の下にある「bin」フォルダーのシンボリックリンクを削除したscriptsフォルダーの名前と同じ名前で作成します。
これで以降は”python -m pip install ○○” でインストールしたコマンド達が使えるはずです。
ただし、pproxyコマンドを使うには一工夫が必要なのでこれも説明…
とりあえず”cd scripts” とコマンドを打ちscriptsに移動します。
次に”mv pproxy.py Pproxy.py” とし「pproxy.py」の名前を「Pproxy.py」にします。
何故こういう面倒なことをしないといけないのかというと、Pythonista3も同じ挙動で悩みましたがどうやら
import pproxy
等とした時、インポートする先をsite-packages3からのインポートじゃなく同一の名前のスクリプトがフォルダーにある場合それを先に読み込む不具合があるようで「pproxy.py」のままだと実行する「pproxy.py」のスクリプト自体をインポートしちゃうのでループとなりエラーが起こる様です。
これはもう、Pythonista3と同じStaShを使ってpipを動かしているのでStaSh側がなんとかしない限り治らない謂わばこの手のアプリの宿命とも言えます。
ちなみに、確認した限りでは「wsgidav」も同一の影響を受けるので、仮にwsgidavを使用したいならwsgidav.py → Wsgidav.pyとcheroot.py → Cheroot.pyの様にする必要性があります。
次に一々”python -m pip” と打つのが面倒な人の為にPproxy.pyがあるフォルダーへpip.pyをコピーしちゃいましょう。
まず”env”とコマンドを入力。
ずらっと環境変数が一覧に出てきますが、
その中にある「PYTHONHOME=」の項目内にある値をコピーします(※「/var/containers/Bundle/Application/“ランダムな文字列”/LibTerm.app」と書いてあるやつです。)
次に”cp -a /var/containers/Bundle/Application/“ランダムな文字列”/LibTerm.app/site-packages/pip.py ./ “
とコマンドを打ちます。するとpip.pyがコピーされ、以後「python -m pip」とせずに「pip install」が使える様になります。
そして、envコマンドを実行した時にわかると思いますが、このアプリはどうやらLibTerm.app直下に配置された「python37.zip」というzipファイルからPythonを実行しているっぽいのです。ただ、問題点はこのzipの所為で純正の「pip」が使えない点です。
LibTerm.appはアプリフォルダーなので当然、読み込みのみしかできません。したがって、純正の「pip」がpythonフォルダー直下に書き込めずにエラーを吐いてしまうのです。
ちなみに、対策を模索してみましたがこればっかりはダメでした( 'ω')
LibTerm.app以外の読み込み可能フォルダー(Libraryフォルダー等)にpython37.zipを投げ込み展開後「setenv」コマンドで無理矢理Pythonの環境変数を書き変えれないか試しましたがアプリの再起動後、強制的に元に戻されるので無理な様子( 'ω')。
純正の「pip」使えたらなぁ感が否めませんがこれもPythonista3と同様の宿命かなぁと思います。
変わって“pip install” 時に「pkg_resources.zip」をどこかに配置しようとしてエラーが毎回出る場合の対処です。
ひとまず「tmp」フォルダーの位置を確認しに行きます
ターミナルから”env” とコマンドを実行。
1番上にある「TMPDIR=」の項目にある値をコピー。
次にターミナルから
“package install unzip”(エラーが出た場合リトライして下さい)
を実行し、新規タブを開き
”mkdir tmples;cd tmples“
と実行し、作業フォルダーに移動後
先程コピーしたTMPDIRの値をこのように貼り付け
“cp -a /private/var/mobile/Containers/Data/Application/ランダムな文字列/tmp/pkg_resources.zip ./ “ を実行します。
次に“unzip pkg_resource.zip“ と実行し「pkg_resources.zip」を展開します。
次に”mv pkg_resources pkg;cd pkg/pkg_resources-master/pkg_resources;pwd“と実行し出てきた値をコピー。
更に新規タブを開き”cd site-packages3”とコマンドを実行しsite-packages3に移動。
次に"cp -a 先ほどコピーした値 ./“と実行し「site-packages3」フォルダーに「pkg_resources」フォルダーを配置すると以後インストール時のエラーは出なくなります。
しかし「/Users/adrianlabbe/Desktop....」の警告が出るようになりますが恐らく開発者さん側の環境でエラーを確認しないまま出しているものだと思いますのでこれも不具合だと思われます。
無視で構わないのですが、気になるなら開発者さんに連絡を入れてみるのもありではあります( 'ω')
最後に…このアプリは以前は課金制でしたが、不具合で無料になっていたのが修正を断念したのか無料で配布される様になって今に至っている様です。
(今後、開発者さんの気まぐれで課金が復活しないとも限らないので遊ぶなら今のうちかもしれない…)
また、不具合なのかフォルダーアイコンをタップして開いてicloud driveからファイルを読み込んでも何も起こらないあたりまだまだ発展途上なアプリなのが伺えます。
また現時点でその他強制終了もたまに発生しますが無料アプリですのでそこらへんはもう割り切りましょう。
ちなみに、pythonista3をお持ちの方がこのアプリが必要かと問われたらPythonista3で動かないモジュールも動いたりしなくもないので遊ぶには丁度良いかもしれません。
そして、開発者さんのモチベ上げにも開発者さんが出してる有料アプリも買って上げて下さいね( ˘ω˘)
(Pythonista3とどことなくUIが似てるのがちょっと気になるけど…)