Libraryの作成方法
こんばんは、mikiyan1978です。
今回はLibraryの作成方法について紹介します。
Tweak開発において、例えば同じ実装コードをその都度いちいち全て書くのは面倒くさいですよね?
そこで今回は簡単な例として、Respring専用のLibraryを作成する方法について書きたいと思います。
まずtheosにてTweakプロジェクトを作成します。
プロジェクト名は分かりやすくlibrespとしましょう。
次にlibresp.hというファイルを新規作成します。
中身は
#import <notify.h> @interface FBSystemService : NSObject +(id)sharedInstance; -(void)exitAndRelaunch:(BOOL)arg1; @end
このように書きます。これは脱獄依存のRespringコードではなくiOS純正コードです。
Tweak.xmには
#import "libresp.h" static void respring(CFNotificationCenterRef center, void *observer, CFStringRef name, const void *object, CFDictionaryRef userInfo) { [[%c(FBSystemService) sharedInstance] exitAndRelaunch:YES]; } %ctor { CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), NULL, respring, CFSTR("com.libresp.respring"), NULL, CFNotificationSuspensionBehaviorDeliverImmediately); }
このように書きます。
次にMakefileに
after-stage:: cp .theos/obj/debug/libresp.dylib $(THEOS)/vendor/lib mkdir -p $(THEOS_STAGING_DIR)/$(THEOS)/vendor/include/libresp cp libresp.h $(THEOS_STAGING_DIR)/$(THEOS)/vendor/include/libresp
これを追加します。
後はコンパイル、インストールして完了です。
次にこの作成したLibraryの使い方を説明します。
実装したいプロジェクトのcontrolファイルのDepends項目にこのLibraryのBundle IDを追加します。Bundle IDはこのLibraryのcontrolファイルで確認できます。リポジトリにLibraryを公開してあるのが条件です。Libraryを使用したTweakなどを公開せず自分自身だけで使う場合は必要ありません。
次にMakefileに下記を追加します。
$(TWEAK_NAME)_LIBRARIES = resp #$(TWEAK_NAME)の部分はプロジェクトに合わせて変更してください。
次に実装ファイルやヘッダーファイルに下記を追加します。
#include <libresp/libresp.h>
以上で追加記述は完了です。後はRespringさせたい場所にて下記コードを書くだけです。
notify_post("com.libresp.respring");
注意ですが今回の記事で自身で作成したLibraryをコンパイル、インストールした後にそのLibraryを使う場合はファイルなどの追加はMakefileにて全て完結しますが、リポジトリなどに公開し他の方が使うなどの場合、
/Library/Mobile Substrate/DynamicLibrariesにあるlibresp.dylibファイルを
/var/theos/libにコピーする必要があるので、その旨を説明しておく必要があります。
本来、theos構築は人それぞれであり、インストール時にいきなりtheosフォルダーへ配置されるのは後々その人のtheosによるコンパイルへの悪影響や不具合にも繋がるので、Libraryのヘッダーファイルやdylibファイルはユーザーがインストール後に手動で配置させるのがいいですね。