Итак, так как я (надеюсь, я) сейчас далеко от новичка в программировании 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
.Это отличный способ обсудить темы, связанные с теос, и задать вопросы.Я в основном там, вместе с другими очень умными людьми;)