Pythonista3 で Python をやり直す(1) - appex

##はじめに

私の iPhone には Pythonista3 というアプリが入っていますが、正直ちゃんと使っていませんでした。でも Pythonista ってiPhone 上のアプリケーションを開発できたりかなり強力なんですよね。というわけで、Pythonista について色々調べると同時に Python 自体をやりなおして、調査結果をブログに記載することにしました。以降では "Pythonista" と書いてる箇所は、基本的に Pythonista3 を対象としています。


##何から始める？

Pythonista には Example のソースコードが複数入っていますが、そのまま見てもよくわからないので、Pythonista のドキュメントを見ながら小さいスクリプトを作成して動作を確認していくことにします。omz-software が開発しているようなので、そこのサイトが公式でしょうか。Documentation と Forum があるようです。

http://omz-software.com/pythonista/docs/
https://forum.omz-software.com/category/5/pythonista

ここに記載されている情報をベースとして、ググりながら調べていこうと思います。

##Pythonista Modules
iPhone 上で Python をやるので、iPhone に特化したライブラリなどを使っていったほうが面白いですよね。ということで、それらの専用モジュールを含め、Pythonista 用のモジュールについて調べていくことにします。

Pythonista Modules にはたくさんのモジュールが記載されています。優先度はよくわからないのでリストの上から順に見ていくことにします。

##appex

一番上にリストされているのは appex です。

appex - Using the Pythonista Sharing Extension
http://omz-software.com/pythonista/docs/ios/appex.html

これは、他のアプリケーションから "Share" によりデータを連携するときに使うようです。アプリケーション間でのデータ連携についての内部の仕組みはちゃんと理解していませんが、とりあえず以下のようにすると動作することが分かったのでメモです。

以下を Pythonista3 上で作成して、iPhone 内に保存します。


```python:myappex.py
import appex

print(appex.is_running_extension())
print(appex.get_text())
```

このスクリプトで使用しているメソッドは2つ。is_running_extension() は、App Extension として呼び出されたときに True を返します。普通にスクリプトとして実行すると False となります。ここでは App Extension として呼び出すテストなので、コンソールに True が返されることを確認します。

もう1つは get_text(). アプリケーションから受け取った text input を返します。ここではこのテキストをコンソールに出力しています。具体的にアプリケーションがどのようにテキストを他のアプリケーションに渡しているのかはよく分かってません。

次に、ここで作成した myappex.py を App Extension に登録します。登録方法は以下の通りです。

エディタの左上の 三 の部分をクリックすると左ペインが開き、その右下にギアアイコンがあるのでそれをクリックすると Settings が開きます。

<img width="370" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526956/0735c98a-ccb8-3d53-0576-9a3ed7d961d0.png">


Settings で、 APP EXTENSIONS にある "Share Extension Shortcuts" をクリックします。
<img width="372" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526956/33d32aa0-081a-e10a-4491-60e37fb30241.png">

(+) をクリックして myappex.py を選択します。
<img width="373" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526956/4303bd70-1b23-529e-9a63-7955de0ac48d.png">


"Edit Shortcut" はデフォルトのまま、右上の "Done" をクリックします。
<img width="371" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526956/d9e729c6-4a16-0263-2475-11fcd1a55a5d.png">


これで appex のスクリプトが App Extension に登録されました。

次に、他のアプリケーションから share によりこの App Extension を呼び出して、
ちゃんと動作するかどうか確認します。

メモで適当にテキストを打ち込んでそれを Share してみます。
ここでは「テスト」と書いてから、右上の share アイコンをクリックします。
<img width="374" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526956/33357a29-7cb0-bc2d-134c-3b3ddf9e2b49.png">

下のほうに "Run Pythonista Script" があるのでこれをクリックします。
<img width="374" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526956/c115bfc5-c486-3525-1e60-c6232925e75e.png">

App Extension として登録した myappex があるので、それをクリックします。
<img width="383" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526956/fa9d5eca-b6e7-7634-66ad-fb44843b6da6.png">

is_running_extension() が True を返し、get_text() がメモアプリケーションで打ち込んだ文字列「てすと」を受け取っていることが分かります。
<img width="393" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526956/3c475252-e30a-159e-a8e1-fecb945c9025.png">