約 1 週間前、iOS & iPadOS 18.4 開発者ベータ 1 が、ネイティブ デバッガー外部で使用される iPhone および iPad アプリのジャストインタイム (JIT) コンパイルの使用に与える影響について報告しました。これは、AltJIT、SideJIT、Jitterbug などのユーティリティの助けを借りてサイドロードされたアプリ内での使用に影響します。
しかし、その記事で触れたように、唯一可能な回避策は、開発者が何らかの方法で iOS および iPadOS プラットフォーム上の JIT 用デバッガーを利用することです。そして、先週 Twitter (旧 Twitter) で共有された投稿によると、ハッカーであり改造者である Duy Tran ( @TranKha50277352 ) がまさにそれを行ったそうです。
この投稿では、iOSデバッガ内でプレイ中の人気ビデオゲーム「Minecraft」のスクリーンショットが紹介されています。リンク先のGitHubページには、この方法がiOS & iPadOS 18.4 開発者ベータ1で動作し、分割されたrx/rw領域を使用していることが記載されています。
コメントによると、このコードは実行領域をデバッグマップに変換するようです。デバッガがJITコンパイルを実行したいメモリページに書き込むだけで動作します。確かにハック的な回避策ですが、ちゃんと動作します。
投稿で説明されているように、このアプローチは面倒で、近い将来に機能しなくなる可能性があります。なぜなら、AppleがサイドロードアプリのJITサポートを終了することに固執しているのであれば、iOS & iPadOS 18.4の正式リリース前にこのハックをパッチで修正するのは非常に簡単だからです。
最近、なぜJITが話題になっているのでしょうか?事前コンパイル(AOT)とは異なり、JITコンパイルは汎用的なマシンコードを利用することで、非ネイティブシステム上でプログラミングコードを実行するための、はるかにパフォーマンスの高い方法を提供します。エミュレーションでの使用など、多くの利点がある一方で、AppleはマルウェアがJITを悪用する可能性があるため、セキュリティ上の脅威となる可能性があると認識しています。
iPhoneとiPadのユーザーがソフトウェアアップデートによってJITにアクセスできなくなると、サイドロードされたアプリはJITなしでも動作しますが、JITありの場合ほどスムーズでパフォーマンスは向上しません。その結果、ユーザーエクスペリエンスは悪化するでしょう。
いずれにせよ、この小さな回避策はうれしいものですが、iOS および iPadOS 18.4 の Apple 開発者ベータ リリースが初期段階にあることを考えると、この回避策が長く続くことはないでしょう。
AppleがサイドロードアプリでJITをターゲットにしていることに憤りを感じていますか? 下のコメント欄でご意見をお聞かせください。