Ошибки компилятора с выгруженными заголовками при создании Cydia Tweak с Theos

Я пытаюсь написать твик для приложения на iPhone. У меня есть хороший опыт в разработке Objective C и iPhone, но я никогда не делал никаких джейлбрейк-твиков Cydia, за исключением нескольких руководств по настройке с использованием выгруженных заголовков rpetrich. Я хочу использовать PoedCrackMod для расшифровки, class-dump-z для получения заголовков, а затем theos/logos для исправления взломанного приложения.

Я пошел дальше и запустил PoedCrackMod, чтобы расшифровать приложение. Это дает мне файл .ipa, который я затем могу извлечь, чтобы получить файл .app, который содержит фактический двоичный файл приложения.

я могу использовать

class-dump-z -k -k -H -g -o ~/dumped_headers/ Foo

чтобы продолжить и получить каталог файлов заголовков. Я копирую эти заголовки в $THEOS/include/Foo. (Должен ли я использовать параметр -g [Отображать только экспортированные классы] здесь, или я могу также подключить неэкспортированные классы?)

На данный момент я должен быть в состоянии создать файл tweak.xm, который выглядит примерно так:

#import <Foo/Foo.h>

и для справки makefile выглядит так:

include theos/makefiles/common.mk

TWEAK_NAME = FooTweak
FooTweak_FILES = Tweak.xm

include $(THEOS_MAKE_PATH)/tweak.mk

Когда я пытаюсь скомпилировать свой твик (который на данный момент ничего не должен делать), я сталкиваюсь со всевозможными ошибками дублирования объявлений. Это нормально, или я что-то не так делаю?

Если это нормально, как мне это исправить? Я пробовал комментировать повторяющиеся объявления, и в этом случае я могу заставить его скомпилироваться. Я вставил более 20 перехватчиков, которые создают UIAlertViews при вызове метода, но ни один из них, кажется, никогда не срабатывает, что заставляет меня поверить, что я не перехватываю методы, которые не вызываются, а либо создаю ошибка в сбросе заголовков или импорте заголовков в мой твик?

У кого-нибудь есть идеи о том, что я могу делать неправильно?


person Alex Blyton    schedule 30.12.2012    source источник


Ответы (1)


Не использовать #import <Foo/Foo.h>

Вместо

[Файл] tweak.xm:

#import <substrate.h>

@interface FooToBeHookedHeader : NSObject {} // We take NSObject here as to avoid any errors.
- (void)fooMethod1; // Only put the methods you are hooking
- (void)fooInheritedMethod; // Inherited method (if hooking) as we are using NSObject up there :)
@end

%hook FooToBeHookedHeader
- (void)fooMethod1 {
// Do hooking stuff
} 
- (void)fooInheritedMethod {
// Do hooking stuff
}
%end

// Include any instance variables which you are modifying if any :)
// ~ SuperDev

Также включите идентификатор подключаемого приложения/фреймворка в свой FooTweak.plist.

person s6luwJ0A3I    schedule 01.01.2013
comment
Этот подход сработал. Однако мне нужно было сделать еще одну вещь: отредактировать файл FooTweak.plist, чтобы он содержал имя пакета приложения, а не трамплин. Я не уверен, что это значение по умолчанию, или я каким-то образом изменил его. - person Alex Blyton; 02.01.2013
comment
Когда вы создаете твик, вы записываете идентификатор приложения/фреймворка, который вы подключаете. Если перехватывается определенный заголовок, включите идентификатор пакета приложения/фреймворка, использующего этот конкретный класс. - person s6luwJ0A3I; 02.01.2013