где я могу начать программировать твики MobileSubstrate? - PullRequest
27 голосов
/ 25 мая 2011

После поиска здесь на форуме я нашел такой вопрос, и он перенаправил меня на учебник, который дал им некоторые основные инструкции по работе с SpringBoard с CapitainHook.

Для начала я хотел бы сделатьэто только с обычными% hooks.Любой намек, где я мог бы начать?

Ответы [ 3 ]

117 голосов
/ 19 июля 2012

Итак, так как я (надеюсь, я) сейчас далеко от новичка в программировании MobileSubstrate и считаю этот вопрос довольно популярным, я решил создать ответ, охватывающий все, что вам нужно знать о предмете, надеюсь, кратко.

Это небольшое введение предназначено для тех, кто обладает минимальными знаниями об Objective-C и знает, что он делает.

ПРИМЕЧАНИЕ : я буду ссылаться наtheos установил путь как $THEOS.Это может быть ~/theos, /var/theos, /usr/theos ... Да.

Самый популярный способ создания расширений MobileSubstrate, также известный как tweaks , использует Dustin Howett theos build suite .Далее следуют подробности:

Что такое теос?

Итак, мы должны начать с того, что теос не :

  • Операционная система
  • Греческий Бог
  • Компилятор

И, конечно, что теос не делает :

  • Обучает кодированию.
  • Создание твиков без необходимости думать
  • Настройка всей среды здания и / или установка iOS SDK.

Theos is кроссплатформенный набор инструментов разработки для управления, разработки и развертывания программного обеспечения iOS без использования Xcode , включающий:

  • AНадежная система сборки, основанная на GNU Make , что делает его Makefile легко развертываемыми везде с установленным theos.

  • NIC , система шаблонов проектов, которая создает готовые к созданию пустые проекты для различных целей.

  • Логотипы ,встроенная библиотека директив на основе препроцессора, разработанная для упрощения разработки расширений MobileSubstrate и оптимальной генерации кода.

  • Автоматизированная упаковка : Theos может напрямую создаватьПакеты DEB для распространения в Cydia, наиболее популярном средстве распространения пакетов на сцене джейлбрейка.

Как установить theos?

  • На OSX: установите iOS SDK и следуйте этим инструкциям .
  • На iOS : установите пакет BigBoss Recommended Tools от Cydia изапустите installtheos3.
  • на Linux : найдите способ установки инструментария и следуйте этим инструкциям .
  • на Windows : нет ничего невозможного, но если вам действительно удастся это сделать, пожалуйста, дайте мне знать.: P

Как использовать теос?

Это очень заданный вопрос и слишком расплывчатый.Так как theos - это целый набор инструментов разработки, нет смысла спрашивать Как его использовать , а точнее - Как создавать программное обеспечение с использованием theos .

Прежде всего, всегда держите в руках справочник по Theos Makefile .Он охватывает основы создания теофайла Makefile и включает в себя решение ваших проблем с линковкой, добавление фреймворка или приватной фреймворк в проект .

Теперь вы можете создать свой собственный Makefile с нуля.создайте свой маленький theos clone / symlink и начните кодировать, но theos облегчает этот шаг.Вы можете просто использовать nic.pl.

Очень простой пример запуска NIC для создания чего-либо можно найти здесь .Это очень просто и сразу настраивает вас на программирование.

Теперь, вот где мы начинаем возвращаться к теме.

Создание твика с theos

Сначалавсего, не запускает сетевой адаптер, когда находится внутри $THEOS/bin.NIC создаст каталог проекта именно там, где вы его запускаете, и он избегает создания любого проекта в $THEOS/bin.Следовательно, вы получите простую ошибку, которую можно избежать, создав каталог проекта где-нибудь приличным.

Запустите $THEOS/bin/nic.pl и выберите шаблон iphone/tweak. Вам будет предложена простая информация, на которую вы, возможно, хорошо знаете, как ответить, за исключением последнего поля: MobileSubstrate bundle filter.

Так как большая часть MobileSubstrate - это не только перехватчик (библиотека, которая переключает оригинальные методы / функции с вашими), но и загрузчик (часть, которая получает ваш перехват чтобы быть вставленным в определенные процессы), вы должны предоставить эту основную информацию, чтобы загрузчик знал, куда загрузить ваш твик. Это поле является только идентификатором пакета для приложения, в которое будет вставлен этот проект .

com.apple.springboard, опция по умолчанию - идентификатор пакета для SpringBoard, приложение которого:

  • Главный экран iOS
  • Средство запуска / отображения общих приложений
  • Строка состояния iOS
  • Обработчик некоторых важных фоновых процессов высокого уровня

Следовательно, здесь происходит множество изменений, изменяющих поведение от чего-то столь же тривиального, как запуск приложения, до чего-то вроде того, как выглядит весь интерфейс домашнего экрана.

Программирование твика с логотипами

Теперь каталог, сгенерированный NIC, будет содержать:

  • Theos Makefile, где вы будете изменять информацию, связанную с компиляцией
  • Файл control, в котором вы будете изменять информацию, относящуюся к упаковке
  • Символическая ссылка (или ярлык) на $THEOS с именем theos/
  • Основной файл кода, по умолчанию Tweak.xm. Он уже добавлен в Makefile для компиляции, так что вы можете сразу начать писать код!

Зная, что делать

Теперь у вас нет исходного кода SpringBoard, и вы не можете догадаться, какие методы можно перехватить из ниоткуда. Поэтому вам нужен набор заголовков SpringBoard . Для этого вам нужно использовать инструмент с именем class-dump-z и запустить его в двоичный файл SpringBoard (который находится внутри файловой системы iOS) для получения заголовочных файлов, включая все объявления классов и его методы внутри приложения.

Начиная с этого (требуется отгадывать и регистрировать вызов метода), вы можете начать возиться с тем, что вам нужно, в настройке.

Конечно, если вы не подключаете SpringBoard, вы можете использовать class-dump-z, как и в других двоичных файлах, таких как UIKit, MobileSafari и т. Д.

Обратите внимание, что при изменении приложений App Store они будут зашифрованы. Вам нужно будет расшифровать их (я, к сожалению, не могу рассказать вам, как это сделать), а затем просто запустить class-dump-z для них.

О получении частных заголовков

Для таких пакетов предпочтений требуются заголовки для частных каркасов, в этом случае заголовки Preferences каркаса. В противном случае вы получите бесконечные пропущенные ошибки объявления (как я полагаю, вы могли бы предположить).

Получение их имеет ту же логику, что и предыдущий шаг. Запустите class-dump-z в этом случае двоичный файл Preferences и добавьте заголовки в ваш INCLUDEPATH. В INCLUDEPATH компилятор будет искать заголовки, которые вы включаете, например #include <stdio.h>. Да, stdio.h находится внутри одного из каталогов, которые составляют компилятор INCLUDEPATH!

При компиляции с Makefile theos, $THEOS/include считается частью вашего INCLUDEPATH, что означает, что вы можете просто выбросить туда свои сброшенные заголовки и включить их позже.

(Обратите внимание, что заголовки с дампами классов не всегда идеальны, поэтому у вас, скорее всего, возникнет пара ошибок компиляции, связанных с заголовками, которые можно легко исправить с помощью удаления директивы #import или ее изменения, или добавив пару объявлений.)

Советы по коду

  • Вы не можете ссылаться на SpringBoard, поэтому всякий раз, когда вам требуется класс из SpringBoard, вы должны использовать либо директиву Logos %c, либо функцию objc_getClass, как определено в <objc/runtime.h>, чтобы получить ее. Пример: [%c(SBUIController) sharedInstance], [objc_getClass("SBUIController") sharedInstance].
  • Если вы не знаете, что метод делает или как что-то работает в SpringBoard, попробуйте разобрать его с помощью IDA или других.Я использую IDA Demo (<- noob!) Для моей разборки. </li>
  • Глядя на пример кода удивительно полезно как для обучения, так и для выяснения того, как что-то работает внутри SpringBoardили другие (снова ..).Великие люди в GitHub, которые смотрят проекты, это: rpetrich , chpwn , DHowett , EvilPenguin и, конечно, многое другое.
  • Чтобы узнать, как работает SpringBoard и другие (...), взгляните на статью класса в iPhone Dev Wiki !

Эпилог

Подожди, а где хорошая часть?Где я могу узнать о кодировании в Tweak.xm?

Ну, на самом деле, оригинальный вопрос был на самом деле Как запустить программирование твиков MobileSubstrate? .Вы все настроены, надеюсь, со всеми размещенными заголовками, готовыми набрать make и увидеть, как ваш проект волшебным образом скомпилирован с theos.

Все, что вам нужно сделать, - это теперь действительно копаться в ваших заголовках или вашей разборке.и подключайтесь, звоните и т. д.!

Справочник по логотипам содержит подробные инструкции по подключению и использованию других функций логотипов, а также статья MobileSubstrate на devwiki такжеОтличное чтение.

Удачи.И если есть какие-либо сомнения, не стесняйтесь присоединиться к IRC-каналу irc.saurik.com #theos.Это отличный способ обсудить темы, связанные с теос, и задать вопросы.Я в основном там, вместе с другими очень умными людьми;)

2 голосов
/ 01 февраля 2012

Вы ищете Theos, созданный DHowett .. Theos позволяет вам вносить изменения, но он не дает вам всего, что вам нужно.Вы не получаете каждый заголовок для iOS, поэтому вам нужно класс-dump-z frameworks / private-frameworks из iOS SDK.Начните здесь: http://iphonedevwiki.net/index.php/Theos/Getting_Started, или присоединитесь irc.saurik.net #theos для получения дополнительной помощи.Вы также можете посмотреть мои проекты, использующие теос: https://github.com/evilpenguin

1 голос
/ 25 мая 2011

Ты говоришь так, будто ищешь тео.Взгляните на это , оно должно помочь вам начать.

...