しおメモ

雑多な技術系ブログです。ニッチな内容が多いです。

potatotips #74に参加して発表しました

6月23日(水)にPotatotips #74に参加させていただき、iOS枠で発表しました。

potatotips.connpass.com

ちょうどWWDCの後だったこともあり、SharePlayやGroup Activitiesなど、自分がキャッチアップできていない部分のお話を聞けて、とても楽しかったです。

Androidの内容についても、OSアップデートのお話でさまざまな事情があるということを聞けて、大変勉強になりました。

発表内容

「LLDBを活用したデザインチェック」という内容で発表しました。

反省として題材選びが悪く、削ったにもかかわらず、ちょっとボリュームが大きかったです。

speakerdeck.com

スライドの補足

蛇足ながら、削った内容を少し補足します。

SwiftとPythonスクリプトのデータのやり取り

SwiftではC++などと異なり、いわゆるスマートポインタが基本的に使われるので、raw pointerを使うためにはUnsafePointerの類を使う必要があります。(この点でObjC++で記述する方が楽な場面が多いです。Swiftで書いている例が圧倒的に少ない...)

そのため、スライドのようにPython側からメモリにwriteする際は、mallocのかわりにUnsafeMutablePointer<T>.allocateで確保して、そこ(pointee)からアドレスを取得して利用します。

(サンプルコードのGetObjectDescription()はSwiftのdebugDescriptionのようなもので, 正攻法ではないのですが、Swiftで書く以上仕方ない場面もあります。)

逆にメモリからreadする際にも、SwiftコードでwithUnsafePointerなどを利用すれば多少safeに書くことができます。

letを利用したLLDB上での変数定義

expressionコマンドで$を変数名の先頭につければ、変数を定義することができますが、varでもletでもimmutableになってしまいます。(expressionした時点ですでにvarletの情報は失われ、LLDBのValueに置き換わっている。)

このため、Python側で変数名を一意にする方法を使っています。

他の言語で書く際は、$R1などに相当する、自動で格納されるvalueを使うのが一般的です。(アドレス周りで苦戦しそうですが、Swiftでもスマートにいけるかもしれない...?)

ファイルの読み込みと書き込み

FileManagerを利用して、Swift側でファイルの読み書きをすることでPythonスクリプトの記述を減らすこともできますが、アクセスできる領域に制約が生じます。

Python側でファイルを読み書きすることで、実機でデバッグする際などにもPCのストレージのファイルを利用することができます。