6月23日(水)にPotatotips #74に参加させていただき、iOS枠で発表しました。
ちょうどWWDCの後だったこともあり、SharePlayやGroup Activitiesなど、自分がキャッチアップできていない部分のお話を聞けて、とても楽しかったです。
Androidの内容についても、OSアップデートのお話でさまざまな事情があるということを聞けて、大変勉強になりました。
発表内容
「LLDBを活用したデザインチェック」という内容で発表しました。
反省として題材選びが悪く、削ったにもかかわらず、ちょっとボリュームが大きかったです。
スライドの補足
蛇足ながら、削った内容を少し補足します。
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した時点ですでにvar
かlet
の情報は失われ、LLDBのValueに置き換わっている。)
このため、Python側で変数名を一意にする方法を使っています。
他の言語で書く際は、$R1
などに相当する、自動で格納されるvalueを使うのが一般的です。(アドレス周りで苦戦しそうですが、Swiftでもスマートにいけるかもしれない...?)
ファイルの読み込みと書き込み
FileManager
を利用して、Swift側でファイルの読み書きをすることでPythonスクリプトの記述を減らすこともできますが、アクセスできる領域に制約が生じます。
Python側でファイルを読み書きすることで、実機でデバッグする際などにもPCのストレージのファイルを利用することができます。