`rubicon-objc` と`toga` と `Pyto` と

Pythonista3 以外でも、良い感じにRubicon-objc を動かしたい

リンク

rubicon

toga

Pyto

Pyto のビルド

GitHub - ColdGrub1384/Pyto at cd3b3de23fa22b5db9ddaea6b87b6c6fef3a4e69

現在時点の最新をビルドしたが、Xcode でエラー吐く。 軽い気持ちでビルドしたので詳細確認までは未実施。

Pyto/site-packages at cd3b3de23fa22b5db9ddaea6b87b6c6fef3a4e69 · ColdGrub1384/Pyto · GitHub

./site-packages に、モリモリとモジュールは入ったので、検証確認が必要そうなものたちをごっそりと持っていく

カジュアルな考え

  • Pythonista3 では、
    • VieeController(NavigationController) を実装
    • App 自体のrootViewController を取得
    • MainThred 上で
      • 取得したController から.presentViewController_ で実装Controller を差し込む
    • .dismissViewControllerAnimated_ で閉じる
    • visibleViewController = self.visibleViewController と、ViewController 呼んでる
    • self. で、NavgationController 自体を閉じてもいいかも?

(Pyto は一旦置いておいて)a-shell だと、なにかしらのViewController の.viewDidDisappear_ で落ちる

また、落ちない場合もあり、再現性として不明。

まずまず、つらつらと。。。

参照先実装の要件を剥がしていきたい

  • Pyto で、toga とrubicon-objc が使われている
  • toga のlifecycle の挙動に倣いたい
    • toga のオブジェクトとして、rubicon をwrap している
  • Pyto も、自身のViewController から生やしている様子

という感じなので、toga オブジェクトとなっているところをrubicon のオブジェクトにまで剥がし、a-shell で実行できるようにしたい

だけども、現在Pythonista3 とa-shell でasyncio するときに、loop.run_forever(lifecycle=iOSLifecycle()) としておらず、loop = asyncio.new_event_loop() で走っちゃってるのよな。。。

Pyto でも、loop.run_forever(lifecycle=iOSLifecycle()) で動かしているみたいなのよね・・・

App 上でPython が走るということは、どうゆうことや?

Pyto やa-shell のPython 実行の動きを確認しなきゃなんとも言えないけども、App 自体のViewController から差し込んでおるので、閉じたら閉じて欲しい。 とはいえ、.presentViewController_ は、MainThred 上でないと、落ちるからその辺をケアしたい。

思いつきで、UISheetPresentationController | Apple Developer Documentation で表示させたりしてみるけど、結局のところ独自View を表示させるためにワンクッション入れているだけな印象なので、意味はないかも。

life cycle とは?

toga では、iOS のlifecycle はずっとぶん回す(という雑な理解) かたちでの実装をしているが、Pythonista3 でeventloop.py を呼び出すときには、iOSLifecycle を使わないと実行ができる。

toga は、無の状態(と、表現をしていいのか?) からのスタートだから、そういった仕様としている?でもPyto も同じ?(いや、オーバーライド時に上書きして消してる?)

Pyto のコードで気になる部分追っかけ

Semaphore

Python を埋め込む

次回

rubicon-objca-Shall と - pome-ta_hugo-blog

なんとなくの解決編