Skip to content

Commit ea32991

Browse files
committed
[General] Starting template to compile into a tweak
1 parent 6835c5f commit ea32991

File tree

4 files changed

+46
-9
lines changed

4 files changed

+46
-9
lines changed

.gitmodules

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
[submodule "ClassDumpRuntime"]
22
path = ClassDumpRuntime
3-
url = git@github.com:leptos-null/ClassDumpRuntime.git
3+
url = https://github.com/leptos-null/ClassDumpRuntime.git

ClassDumpTweak.plist

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{ Filter = { Bundles = ( "com.apple.springboard" ); }; }

Makefile

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
11
TARGET := iphone:clang:latest:8.0
2+
INSTALL_TARGET_PROCESSES := SpringBoard
23
ARCHS := arm64
34

45
include $(THEOS)/makefiles/common.mk
56

6-
TOOL_NAME = classdumpctl
7+
TWEAK_NAME = ClassDumpTweak
78

8-
classdumpctl_FILES = Sources/classdumpctl/main.m
9-
classdumpctl_FILES += $(wildcard ClassDumpRuntime/Sources/ClassDumpRuntime/ClassDump/*/*.m)
10-
classdumpctl_FILES += $(wildcard ClassDumpRuntime/Sources/ClassDumpRuntime/ClassDump/*/*/*.m)
9+
ClassDumpTweak_FILES = Tweak.x
10+
ClassDumpTweak_FILES += $(wildcard ClassDumpRuntime/Sources/ClassDumpRuntime/ClassDump/*/*.m)
11+
ClassDumpTweak_FILES += $(wildcard ClassDumpRuntime/Sources/ClassDumpRuntime/ClassDump/*/*/*.m)
1112

12-
classdumpctl_CFLAGS = -fobjc-arc -I ClassDumpRuntime/Sources/ClassDumpRuntime/include
13-
classdumpctl_CODESIGN_FLAGS = -Sentitlements.plist
14-
classdumpctl_INSTALL_PATH = /usr/local/bin
13+
ClassDumpTweak_CFLAGS = -fobjc-arc -I ClassDumpRuntime/Sources/ClassDumpRuntime/include
1514

16-
include $(THEOS_MAKE_PATH)/tool.mk
15+
include $(THEOS_MAKE_PATH)/tweak.mk

Tweak.x

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
#import <Foundation/Foundation.h>
2+
#import <ClassDump/ClassDump.h>
3+
4+
static CDClassModel *safelyGenerateModelForClass(Class const cls, IMP const blankIMP) {
5+
Method const initializeMthd = class_getClassMethod(cls, @selector(initialize));
6+
method_setImplementation(initializeMthd, blankIMP);
7+
8+
return [CDClassModel modelWithClass:cls];
9+
}
10+
11+
static void dumpHeader(NSString *requestImage, NSString *outputDir) {
12+
IMP const blankIMP = imp_implementationWithBlock(^{ }); // returns void, takes no parameters
13+
14+
CDGenerationOptions *const generationOptions = [CDGenerationOptions new];
15+
generationOptions.stripSynthesized = YES;
16+
17+
unsigned int classCount = 0;
18+
const char **classNames = objc_copyClassNamesForImage(requestImage.fileSystemRepresentation, &classCount);
19+
for (unsigned int classIndex = 0; classIndex < classCount; classIndex++) {
20+
Class const cls = objc_getClass(classNames[classIndex]);
21+
CDClassModel *model = safelyGenerateModelForClass(cls, blankIMP);
22+
CDSemanticString *semanticString = [model semanticLinesWithOptions:generationOptions];
23+
NSString *lines = [semanticString string];
24+
NSString *headerName = [NSStringFromClass(cls) stringByAppendingPathExtension:@"h"];
25+
26+
NSString *headerPath = [outputDir stringByAppendingPathComponent:headerName];
27+
28+
NSError *writeError = nil;
29+
if (![lines writeToFile:headerPath atomically:NO encoding:NSUTF8StringEncoding error:&writeError]) {
30+
NSLog(@"writeToFileError: %@", writeError);
31+
}
32+
}
33+
}
34+
35+
%ctor {
36+
dumpHeader(@"TODO", @"TODO");
37+
}

0 commit comments

Comments
 (0)