1

私はiOS用のロボット工学アプリケーションに取り組んでいる開発者です。私はこのアプリをアプリストアに提出するつもりはありません。また、提案された方法がアップルに承認されることを望んでいません。

私はBluetoothを機能させようとしています。まずは、既存のAppleフレームワークを変更してみることから始めるのがよいと思います。フレームワークを変更して、iOSデバイスにビルドされたときに、フレームワークがアプリ用に変更されるようにすることはできますか(同じデバイス上の他のアプリは変更されません)?

4

2 に答える 2

6

実際のところ、あなたはそうすることができます!

Objective-Cを使用すると、メソッドを「スウィズル」してデフォルトの動作をオーバーライドし、必要に応じて元の実装を呼び出すことができます。これは、Objective-Cメソッドに対して、何度でも実行できます。

C関数に存在する動作をオーバーライドする場合は、プラットフォームをもう少し制御する必要があります。ジェイルブレイクを使用すると、Jay FreemanのCydiaSubstrateの全機能を使用して、Objective-CメソッドとC /C++関数の両方をフックまたはスウィズルできます。

MethodSwizzleそれ自体の使用はお勧めしませんが、次のURLには、スウィズリングについての適切な説明がありますhttp://cocoadev.com/wiki/MethodSwizzling

ただし、実際には、代わりにCydiaSubstrateのMSHookMes​​sageExとMSHookFunctionを使用する必要があります。特に、AppStoreに何も送信していないためです。

Bluetoothに関しては、この分野で広範な作業を行ってきました(iOS上のシステムアプリにバニラBluetooth OBEXサポートを提供するシステム全体の調整であるCelesteを開発しました)。BTstackのようなものを使用することを検討することをお勧めします。これは、HCIからRFCOMMレベルまでのBluetoothモジュールへのアクセスを提供し、おそらく必要になるSDPやペアリングなどをサポートします。また、メソッドのスウィズリングを必要としないという追加の利点もあります。これは、絶対に避けなければならないある種の悪魔的な儀式であると考える人もいます。

于 2012-10-31T23:59:51.143 に答える
2

カテゴリ(これらのフレームワークで提供される基本クラスの機能を拡張する)を除いて、既存のAppleフレームワーク自体を「変更」できるとは思いません。より良い行動方針は、単に独自のフレームワークを作成し(または、他の誰かのオープンソース、商用、または単にサードパーティのフレームワークを見つけて)、そのフレームワークを、使用するiOSデバイスにインストールするアプリに組み込むことです。

于 2012-10-31T23:44:50.363 に答える