iOSOpenDevを使用してiOSの完全な調整を記述する

良い一日!



今日は、iOS用のジェイルブレイクプログラムの開発に再び触れたいと思います。 ロシア語を話すインターネットでは、初心者が理解できるものを見つけるのは非常に難しいので、この誤解を修正し、いくつかのポイントがどのように解決されるかを説明します。



ソフトウェアのインストール、環境とデバイスのセットアップ、ゼロからの調整の作成-これがあなたを待っています。 iOSの一部を自分で変更する方法に興味がある場合-ようこそ。



さあ始めましょう!



何が必要ですか?





準備する



最初のステップは、Xcodeをインストールすることです。 Mac AppStoreから、およびApple Webサイトのダウンロードページからダウンロードできます。 これについては詳しく説明しません。



次に、theosを配置する必要があります。 任意のプラットフォームに詰め込むことができ、機能するとは言われていますが、今日は自転車を発明せず 、ネイティブiOS SDKシステムですべてを行います。



theosを/ opt / theosフォルダーにダウンロードします。 任意のフォルダに入れることができますが、あなた自身の危険とリスクで:



export THEOS=/opt/theos git clone git://github.com/DHowett/theos.git $THEOS
      
      





これで、theosのセットアップを完了できます。



iOSOpenDevダウンロードし、インストーラーを実行します。 彼はあなたのためにすべてをします。

不明なエラーが発生した場合、ほとんどの場合、アプリケーションは「Xcode.app」と呼ばれていないか、まったく実行していません。



景品は終わりました。 可変セットアップ時間。

〜/ .bash_profileを開き、次の行を編集します。



 export iOSOpenDevDevice=...
      
      





これで、iOSOpenDevはデバイスのIPを認識します。パスワードを要求せずにSSH経由で接続し、必要なすべてのライブラリデータベースをダウンロードできるようにするためだけです。



 iod-setup base iosod sshkey -h <IP >
      
      





デバイスのパスワードを2回入力し、要求があれば、キーチェーンのパスワードを作成します。

さらに、 たくさんのヘッダーをダウンロードし 、/ opt / iOSOpenDev / includeに入れる必要があります。



ここで最も難しい部分は、IOSurfaceAPI.hを使用することです。これは、自由に配布されるコードではないためです。 しかし、システムから取得できない場合(Mac OS X 10.10では見つかりませんでした)、_ fallbackフォルダーから「スタブ」を取得すれば、分析に十分です。



このインストールでは、完了したと見なすことができます。



基礎を書く



すべての開発はXcodeで行われますが、いくつかの制限があります。



新しいプロジェクトを作成し、新しい項目「iOSOpenDev」に会います。







Logos Tweakが必要です:







プロジェクトに関する情報を入力します。 Simple PreferenceLoaderを含めると、Settings.appの単純な設定ブロックがプロジェクトに追加されます。 しかし、彼については後で。



ここで、Xcode自体が行わないことを行う必要があります。UIKit.frameworkとlibsubstrate.dylibをリンカーのリストに追加します(後者は/ opt / iOSOpenDev / lib /にあります)。







その後、.xmファイルに移動し、#errorディレクティブを破棄して、アセンブリをクリックします。 最初のビルドは失敗し、2番目のビルドは成功するはずです。それで問題ありません。 xmファイルには構文の強調表示はありませんが、これは最初のビルド後にXcodeを閉じて開くことで解決されます。



すべてのドットを「i」の上に置きましょう。.xmファイルは調整コードを担当し、.mmファイルは「中間」であり、ロゴプリプロセッサによって自動的に生成され、コンパイルされます。



最初のステップ



今日は、鈍い碑文をロック画面の「ロック解除」をテキストに変更します。



まず、「実験的」バイナリのヘッダーを取得するのがいいでしょう。 SpringBoardを使用すると、すべてがはるかに簡単になります。iOSの各バージョンのスプリングボードヘッダーをアップロードする準備ができています。 ただし、自分で作成したい場合は、class-dump-zユーティリティが役立ちます。



iOS 8.1のiPad 4用に書いているので、ヘッダーが適切に見えます。



必要なものをすばやく見つけるには2つの方法があります。 1つ目は、cycriptを使用してオブジェクトの階層を調べ、必要なものを見つけることです。 2番目は、ヘッダーの内容で検索することです。 この場合、「unlockText」を検索して、SBLockScreenViewクラスでこのメソッドを見つけました。



 - (id)_defaultSlideToUnlockText;
      
      





これが必要なものだと仮定します。 最初のスケッチを書きましょう:



 #import <UIKit/UIKit.h> %hook SBLockScreenView - (id)_defaultSlideToUnlockText { return @", !"; } %end
      
      







デバイスにインストールしてコンパイルするには、プロファイリング用にビルドを選択します。







そして、ああ、奇跡! 驚くべきことに、すべてが初めて機能しました:







私たちの主な目標は、テキストを変更することです。そのため、コンストラクター(%ctor)を作成し、設定を読み込みます。



 #import <UIKit/UIKit.h> #define SETTINGS_FILE @"/var/mobile/Library/Preferences/ru.firemoon777.LockLabel8Bundle.plist" NSDictionary *settings; %hook SBLockScreenView - (id)_defaultSlideToUnlockText { return [settings objectForKey:@"Text"]; } %end static void loadSettings() { settings = [[NSDictionary alloc] initWithContentsOfFile:SETTINGS_FILE]; } %ctor { loadSettings(); }
      
      







設定パネルを作成する



新しい目標を作成します。ファイル-新規-ターゲット-iOS Open Dev-PreferenceBundle。 LockLabel8Bundleと呼びましょう。

「複雑な」PreferenceBundle'omを使用したプロジェクトには大きなプラスがあります-設定では、アプリケーションのグラフィカルインターフェイス全体を作成でき、ルートおよび署名からの実行に煩わされません。 しかし、マイナスもあります-設定のパネルと微調整自体は個別のパッケージに収集されるため、リリースではそれらを結合する必要があります。



テンプレートを構築して、可能な多くの組み込みPSSpecifierを賞賛することができます。



たぶん、すぐに蓄積しないはずです。 そのため、記事の冒頭で説明したヘッダーのダウンロードに失敗しました。



とりわけ、最初と最後のグループであるTextViewと1つのボタンのみを残します。







この「バンドル」で輝かないように「ラベル」フィールドを編集することもできます。



ボタンにはアクション「respring:」があるため、LockLabel8BundleControllerのrespringメソッドについて説明します。



 - (void)respring:(PSSpecifier*)specifier { system("killall SpringBoard"); }
      
      





設定内での開発により、すべてがはるかに単純になります。ここでは、通常のアプリケーションと同じ法則が適用されます。



ソースコードはgithubで入手できます。



iOSの複数バージョンのサポート?



微調整が単純なスケッチから大規模なプロジェクトになると、疑問が生じますが、余分な負荷がかからないようにiOSのいくつかのバージョンのサポートを整理する方法は? ここでグループが助けになります。



 %group iOS6 //   iOS6 %end %group iOS78 //   iOS7+ %end %ctor { if (kCFCoreFoundationVersionNumber >= kCFCoreFoundationVersionNumber_iOS_7_0) { init(iOS78); } else { init(iOS6); } }
      
      







まとめると



iOSOpenDevは単なるXcodeのプラグインですが、私の意見では、ベアテオよりもはるかにシンプルで便利です。 Mac OS Xでは、初心者向けのiOS調整の開発を大幅に促進します。



All Articles