Тео на Маверикс: символы не найдены
Пожалуйста, прокрутите вниз, обновите ниже
Я использовал этот урок, чтобы запачкать руки в разработке теоса и джейлбрейка: http://iphonedevwiki.net/index.php/Theos/Getting_Started
Вопрос был опубликован ранее ( Theos для armv7 и arm64), но на него не было ответа.
Для начала я просто хочу, чтобы консольное сообщение появлялось всякий раз, когда я разблокирую устройство. Я следовал за учебником, но должен был установить dpkg
через MacPorts, чтобы получить ldid
и работает.
Вот мой код:
Tweak.xm:
%hook SBAwayLockBar
- (void)unlock {
%orig;
NSLog( @"SBAwayLockBar.unlock()" );
}
%end
Makefile:
include theos/makefiles/common.mk
TWEAK_NAME = TweakTest01
TweakTest01_FILES = Tweak.xm
TweakTest01_FRAMEWORKS = UIKit
include $(THEOS_MAKE_PATH)/tweak.mk
after-install::
install.exec "killall -9 SpringBoard"
Это происходит, когда я пытаюсь либо make
или же make package install
:
/tmp/theos/makefiles/targets/Darwin/iphone.mk:41: Deploying to iOS 3.0 while building for 6.0 will generate armv7-only binaries.
Making all for tweak TweakTest01...
Linking tweak TweakTest01...
ld: warning: ignoring file /tmp/theos/lib/libsubstrate.dylib, missing required architecture armv7 in file /tmp/theos/lib/libsubstrate.dylib (2 slices)
Undefined symbols for architecture armv7:
"_MSHookMessageEx", referenced from:
_logosLocalInit() in Tweak.xm.6991e5bc.o
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [obj/TweakTest01.dylib.ba964c90.unsigned] Error 1
make[1]: *** [internal-library-all_] Error 2
make: *** [TweakTest01.all.tweak.variables] Error 2
Я попробовал /usr/bin/xcode-select --install
(как было предложено Failed для создания утилиты ldid от Saurik), но это не помогло - в основном потому, что у меня уже были установлены все инструменты Xcode.
Есть намеки?
ОБНОВЛЕНИЕ 2014-03-25
Итак... похоже, что проблема заключалась в пробелах в именах путей, в которых я работал. После переименования папки из "jailbreak stuff" в "jailbreakstuff", make
бежал нормально. Но поскольку твик, который я написал, на самом деле ничего не делал, я начал с нуля.
Вот что я сделал:
- Получите установочный скрипт theos по https://gist.github.com/tom-go/3342263
- редактировать
install_theos.sh
линия 40 доmsdeb="mobilesubstrate_0.9.5001_iphoneos-arm.deb"
(новейшая версия при просмотре http://apt.saurik.com/debs/) Я заметил получение
ldid
по указанному URL-адресу Dropbox возникла ошибка, поскольку загруженный файл содержал только некоторый HTML ("Вы будете перенаправлены..."); поэтому я вернулся к http://iphonedevwiki.net/index.php/Theos/Getting_Started и выполнил шаг #4git clone git://git.saurik.com/ldid.git cd ldid git submodule update --init ./make.sh cp -f ./ldid $THEOS/bin/ldid
Вот мои источники:
Tweak.mm/Tweak.mm (символическая ссылка)
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import <SpringBoard/SpringBoard.h>
%hook SBAwayLockBar
- (void)unlock {
%orig;
%log;
// Call flash on SBScreenFlash => will flash Screen
[[%c(SBScreenFlash) sharedInstance] flash];
}
%end
Makefile
export ARCHS = armv7 armv7s arm64
export TARGET = iphone:clang:7.1:7.1
include theos/makefiles/common.mk
TWEAK_NAME = TweakTest01
TweakTest01_FILES = Tweak.xm
TweakTest01_FRAMEWORKS = UIKit Foundation
include $(THEOS_MAKE_PATH)/tweak.mk
after-install::
install.exec "killall -9 SpringBoard"
Вот некоторый консольный вывод make package
(Я заменил "mycompanyname" перед публикацией здесь):
Making all for tweak TweakTest01...
Preprocessing Tweak.xm...
Compiling Tweak.xm...
Linking tweak TweakTest01...
Stripping TweakTest01...
Signing TweakTest01...
Making stage for tweak TweakTest01...
dpkg-deb: Baue Paket »com.mycompanyname.tweaktest01« in »./com.mycompanyname.tweaktest01_0.0.1-9_iphoneos-arm.deb«.
Теперь я передаю файл с помощью iFunBox и устанавливаю пакет, выбрав его в iFile. Установка работает отлично. Я возобновляю свое устройство, разблокирую это... и никакая вспышка, никакой вывод журнала. Единственное, что показывает журнал (Xcode - Organizer), это
SpringBoard[4602] <Notice>: MS:Notice: Loading: /Library/MobileSubstrate/DynamicLibraries/TweakTest01.dylib
SpringBoard[4602] <Warning>: MS:Warning: nil class argument for selector unlock
Я попробовал два разных libsubstrate.dylib
версии
- https://github.com/kokoabim/iOSOpenDev/blob/master/lib/libsubstrate.dylib
- http://cdn.hbang.ws/dl/libsubstrate_arm64.dylib (переименован в
$THEOS/lib/libsubstrate.dylib
)
но поведение такое же. Что дальше?:)
2 ответа
Оооооо, я понял! Благодаря #theos на irc.saurik.com
Я обнаружил, что пытался подключить устаревший метод заголовка. Теперь мой Tweak.xm выглядит так:
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import <SpringBoard/SpringBoard.h>
%hook SBLockScreenViewController
- (void) finishUIUnlockFromSource:(int)arg1 {
%orig;
%log;
NSLog( @"arg1: %d", arg1 );
[[%c(SBScreenFlash) sharedInstance] flash];
}
%end
Просто для справки:
http://developer.limneos.net/?framework=SpringBoard&header=SBLockScreenViewControllerBase.h https://github.com/thomasfinch/iOS-7-SpringBoard-Headers
Это проблема с вашим libsubstrate.dylib
(в theos/lib/), который, похоже, не содержит фрагмента armv7. Попробуйте загрузить новый и заменить ваш (возможно, этот будет работать)