Мобильный субстрат iOS: неопределенные символы для архитектуры armv7 из примера CydiaSubstrate #2
Я изучал возможности мобильного Susbstrate и пытался глубоко погрузиться в разработку THEOS. Я установил env на моем Mac и iPad(iOS 9.3.5 Phenix JB) - простой пустой твик, скомпилированный и успешно установленный на моем устройстве, такая же история была с первым учебником: http://www.cydiasubstrate.com/id/7cee77bc-c4a5-4b8b-b6ef-36e7dd039692/. Все работало Но когда я начал делать второй ( http://www.cydiasubstrate.com/id/36b60943-ac9b-4ed2-afe4-7f529d8dfcea/), где им предложили использовать API времени выполнения субстрата, я получил ошибки компиляции:
> Making all for tweak LavenderStick…
==> Linking tweak LavenderStick (armv7)…
clang: warning: libstdc++ is deprecated; move to libc++ with a minimum deployment target of iOS 7 [-Wdeprecated]
Undefined symbols for architecture armv7:
"_MSHookClassPair", referenced from:
+[LavenderHookUIColor(MS) load] in Tweak.xm.3f53391c.o
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[3]: *** [/Users/gm/Development/theos/lavenderstick/.theos/obj/debug/armv7/LavenderStick.dylib] Error 1
make[2]: *** [/Users/gm/Development/theos/lavenderstick/.theos/obj/debug/armv7/LavenderStick.dylib] Error 2
make[1]: *** [internal-library-all_] Error 2
make: *** [LavenderStick.all.tweak.variables] Error 2
во время компиляции первого примера все прошло хорошо, как я упоминал выше:
> Making all for tweak LiliacProj…
==> Preprocessing Tweak.xm…
==> Compiling Tweak.xm (armv7)…
==> Linking tweak LiliacProj (armv7)…
clang: warning: libstdc++ is deprecated; move to libc++ with a minimum deployment target of iOS 7 [-Wdeprecated]
==> Generating debug symbols for LiliacProj (armv7)…
==> Preprocessing Tweak.xm…
==> Compiling Tweak.xm (arm64)…
==> Linking tweak LiliacProj (arm64)…
clang: warning: libstdc++ is deprecated; move to libc++ with a minimum deployment target of iOS 7 [-Wdeprecated]
==> Generating debug symbols for LiliacProj (arm64)…
==> Merging tweak LiliacProj…
==> Signing LiliacProj…
> Making stage for tweak LiliacProj…
dm.pl: building package `com.madcurd.lily:iphoneos-arm' in `./packages/com.madcurd.lily_0.0.1-2+debug_iphoneos-arm.deb'
==> Installing…
root@192.168.1.150's password:
(Reading database ... 6517 files and directories currently installed.)
Preparing to unpack /tmp/_theos_install.deb ...
Unpacking com.madcurd.lily (0.0.1-2+debug) over (0.0.1-1+debug) ...
Setting up com.madcurd.lily (0.0.1-2+debug) ...
install.exec "killall -9 SpringBoard"
root@192.168.1.150's password:
Я следовал этому уроку, так что вот мой Makefile и Tweak.xm второго НЕ компилируемого проекта: Makefile:
include $(THEOS)/makefiles/common.mk
TWEAK_NAME = LavenderStick
LavenderStick_FILES = Tweak.xm
include $(THEOS_MAKE_PATH)/tweak.mk
after-install::
install.exec "killall -9 SpringBoard"
Tweak.xm
#include <substrate.h>
MSHookInterface(UIColor, LavenderHookUIColor, UIColor)
@implementation LavenderHookUIColor
- (id) initWithRed:(CGFloat)red
green:(CGFloat)green
blue:(CGFloat)blue
alpha:(CGFloat)alpha
{
return [super initWithRed:1 green:0 blue:blue alpha:alpha];
}
@end
И короткий плист:
{{"Filter":{"Bundle":"com.apple.UIKit"}}
И вот самая интересная часть, что я пытался это исправить:
Пробовал с использованием plutil и без, пытался указать не UIKit, а SpringBoard(с snakeStyle и simple.lowercase)- как и ожидалось, ничего не изменилось.
Прочитайте все темы, связанные с проблемами компиляции armv7, но это не помогло. Вставлен пустой файл.mm. Пытался указать ARCHS в файле make, импортировал туда UIKit, пытался объявить класс Extension перед реализацией - но получил только ошибки о повторном объявлении. Также пытался использовать некоторые субстратные API, такие как%c() для класса delcare(почти то же самое).
Я проверил PATHS и файл заголовка субстрата загружен, а также я проверил, что там существует spicified функция MSHookClassPair.
Пытался объединить первый учебный код со вторым, сначала перехватывая метод инициализации UIColor, а затем расширяя UIColor методом замены - ничего не получалось.
Поэтому я прошу помощи от U. Любая помощь или предложения будут высоко оценены! Заранее спасибо!