mikiyan1978’s 脱獄情報日記

脱獄に関する情報を発信します

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ファイルはユーザーがインストール後に手動で配置させるのがいいですね。

質問がありましたら下記よりお願いします。
LINE
友だち追加

Twitter