Тео на Маверикс: символы не найдены

Пожалуйста, прокрутите вниз, обновите ниже


Я использовал этот урок, чтобы запачкать руки в разработке теоса и джейлбрейка: 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 бежал нормально. Но поскольку твик, который я написал, на самом деле ничего не делал, я начал с нуля.

Вот что я сделал:

  1. Получите установочный скрипт theos по https://gist.github.com/tom-go/3342263
  2. редактировать install_theos.sh линия 40 до msdeb="mobilesubstrate_0.9.5001_iphoneos-arm.deb" (новейшая версия при просмотре http://apt.saurik.com/debs/)
  3. Я заметил получение ldid по указанному URL-адресу Dropbox возникла ошибка, поскольку загруженный файл содержал только некоторый HTML ("Вы будете перенаправлены..."); поэтому я вернулся к http://iphonedevwiki.net/index.php/Theos/Getting_Started и выполнил шаг #4

    git 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 версии

но поведение такое же. Что дальше?:)

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. Попробуйте загрузить новый и заменить ваш (возможно, этот будет работать)

Другие вопросы по тегам