Theos на Mavericks: символы не найдены

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


Я использовал это руководство, чтобы запачкать руки при разработке Theos и джейлбрейк-твика: http://iphonedevwiki.net/index.php/Theos/Getting_Started

Вопрос был опубликован ранее ( Theos для armv7 и arm64 ), но он не т был дан ответ.

Для начала я просто хочу, чтобы консольное сообщение появлялось всякий раз, когда я разблокирую устройство. Я следовал инструкциям, но мне пришлось установить dpkg через MacPorts, чтобы запустить ldid.

Вот мой код:

Настройка.xm:

%hook SBAwayLockBar

- (void)unlock {
    %orig;
    NSLog( @"SBAwayLockBar.unlock()" );
}

%end

make-файл:

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 (как было предложено Не удалось собрать утилиту Saurik ldid), но это совсем не помогло - в основном потому, что у меня уже были установлены все инструменты Xcode.

Любые подсказки?


ОБНОВЛЕНИЕ 25 марта 2014 г.

Итак... похоже, проблема заключалась в пробеле в именах путей, с которыми я работал. После переименования папки с "материалы для побега из тюрьмы" на "материал для побега из тюрьмы" 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#For_Mac_OS_X и выполнил шаг №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

создать файл

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

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


person Dennis    schedule 20.03.2014    source источник


Ответы (2)


Это проблема с вашим libsubstrate.dylib (в theos/lib/), который, похоже, не содержит фрагмента armv7. Попробуйте загрузить новый и заменить свой (возможно, этот подойдет)

person Cl3ment    schedule 23.03.2014

Уууууу, я понял! Благодаря #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

person Dennis    schedule 25.03.2014