Итак, поскольку я (надеюсь, что я) сейчас далек от новичка в программировании MobileSubstrate и считаю этот вопрос довольно популярным, я решил создать ответ, охватывающий все, что вам нужно знать по этому вопросу, надеюсь, вкратце.
Это небольшое введение предназначено для тех, кто имеет минимальные знания о Objective-C и знает, что делает.
ПРИМЕЧАНИЕ. Я буду называть путь установки theos $THEOS
. Это может быть ~/theos
, /var/theos
, /usr/theos
... Да.
Самый популярный способ создания расширений MobileSubstrate, также известных как твики, — это использование Дастина Хоуэтта. комплект сборки theos. Подробности следуют:
Что такое теос?
Итак, мы должны начать с того, чем theos не является:
- Операционная система
- Греческий бог
- Компилятор
И, конечно же, то, что theos не делает:
- Научит кодить.
- Создает настройки, не заставляя вас думать
- Настраивает всю среду построения и/или устанавливает iOS SDK.
Theos — это кроссплатформенный набор инструментов разработки для управления, разработки и развертывания программного обеспечения iOS без использования Xcode, включающий:
Надежная система сборки, основанная на GNU Make, которая упрощает создание файлов Makefile. может быть развернут везде с установленным theos.
NIC, система шаблонов проектов, которая создает готовые к сборке пустые проекты для различных целей.
Logos, встроенная библиотека директив на основе препроцессора, предназначенная для упрощают разработку расширений MobileSubstrate и оптимизируют генерацию кода.
Автоматическая упаковка: Theos может напрямую создавать пакеты DEB для распространения в Cydia, самом популярном средстве распространения пакетов среди джейлбрейков.
Как установить теос?
- На OSX: установите iOS SDK и следуйте этим инструкциям а>.
- На iOS: установите пакет Рекомендуемые инструменты BigBoss из Cydia и запустите
installtheos3
.
- В Linux: найдите способ установить набор инструментов и следуйте инструкциям эти инструкции.
- В Windows: нет ничего невозможного, но если вам действительно удастся это сделать, дайте мне знать. :П
Как использовать теос?
Это очень заданный вопрос и слишком расплывчатый. Поскольку theos — это целый набор инструментов разработки, не имеет смысла спрашивать Как им пользоваться, а более конкретно спрашивать Как создавать программы с помощью theos.
Прежде всего, всегда имейте под рукой справочник по Makefile компании Theos. Он охватывает основы создания make-файла theos, включая решение проблем с связыванием, добавление фреймворка или частного фреймворка в проект.
Теперь вы можете создать свой собственный Makefile с нуля, создать свой маленький клон/символическую ссылку theos и начать кодирование, но theos упрощает этот шаг. Вы можете просто использовать nic.pl
.
Очень простой пример запуска NIC для создания чего-либо можно найти здесь. Это очень просто и сразу настраивает вас на программирование.
Теперь, вот где мы начинаем возвращаться к теме.
Создание твика с помощью theos
Во-первых, не запускайте сетевую карту внутри $THEOS/bin
. Сетевая карта создаст каталог проекта именно там, откуда вы его запускаете, и это позволит избежать создания любого проекта в $THEOS/bin
. Таким образом, вы получите простую ошибку, которой можно избежать, создав каталог проекта в каком-нибудь приличном месте.
Запустите $THEOS/bin/nic.pl
и выберите шаблон iphone/tweak
. Вам будет предложена простая информация, на которую вы, возможно, хорошо знаете, как ответить, за исключением последнего поля: MobileSubstrate bundle filter
.
Поскольку большая часть MobileSubstrate — это не только hooker (библиотека, которая переключает оригинальные методы/функции с вашими), но также и loader (часть, которая заставляет вас подключаться к быть вставленным в определенные процессы), вы должны предоставить эту основную информацию, чтобы загрузчик знал, куда загрузить ваш твик. Это поле является всего лишь идентификатором пакета для приложения, в которое будет вставлен этот проект.
com.apple.springboard
параметром по умолчанию является идентификатор пакета для SpringBoard, приложение, которое:
- Домашний экран iOS
- Средство запуска/отображения общих приложений
- Строка состояния iOS
- Обработчик некоторых важных фоновых процессов высокого уровня
Таким образом, происходит множество настроек, изменяющих поведение от чего-то тривиального, такого как запуск приложения, до чего-то вроде того, как выглядит весь пользовательский интерфейс домашнего экрана.
Программирование твика с помощью Logos
Теперь каталог, сгенерированный 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!) для дизассемблирования.
- Взгляд на пример кода невероятно полезен как для изучения, так и для выяснения того, как что-то работает внутри SpringBoard или других (опять же..). Замечательные люди на GitHub, на которых можно посмотреть проекты: rpetrich, chpwn, DHowett, EvilPenguin и, конечно же, гораздо больше.
- Чтобы также узнать о том, как работает SpringBoard и другие (...), ознакомьтесь со статьей класса на iPhone Dev Wiki. !
Эпилог
Подожди, а где хорошая часть? Где я могу узнать о кодировании в Tweak.xm
?
Ну, первоначальный вопрос на самом деле был Как начать программирование настроек MobileSubstrate?. Вы все настроили, надеюсь, все заголовки размещены, готовы ввести make
и увидеть, как ваш проект волшебным образом скомпилирован с помощью theos.
Все, что вам нужно сделать, это сейчас покопаться в ваших заголовках или дизассемблированном коде и начать цепляться, звонить и т. д.!
Справочник по логотипам точно описывает, как подключать и использовать другие функции логотипов, а Статья о MobileSubstrate на devwiki также очень полезна.
Удачи. А если есть сомнения, присоединяйтесь к IRC-каналу irc.saurik.com #theos
. Это отличный способ обсудить темы, связанные с теосом, и задать вопросы. Я в основном там, вместе с другими очень умными людьми ;)
person
Community
schedule
19.07.2012