Ответ 1
Итак, поскольку я (надеюсь, что я) сейчас далеко от нуба с программированием MobileSubstrate, и увидел этот вопрос как довольно популярный, я решил создать ответ, охватывающий все, что вам нужно знать о предмете, надеюсь, кратко.
Это небольшое введение предназначено для тех, у кого имеет минимальное знание на Objective-C и знает, что он делает.
ПРИМЕЧАНИЕ. Я буду ссылаться на путь установки theos как $THEOS
. Это может быть ~/theos
, /var/theos
, /usr/theos
... Да.
Самый популярный способ создания расширений MobileSubstrate, также известный как tweaks, использует Dustin Howett сборник theos. Подробности следуют:
Что такое theos?
Итак, мы должны начать с того, что theos не:
- Операционная система
- Греческий Бог
- Компилятор
И, конечно же, что делает theos не:
- Обучает программированию кода.
- Создает твики, не заставляя вас думать
- Устанавливает всю среду здания и/или устанавливает SDK iOS.
Theos - это кросс-платформенный набор средств разработки для управления, разработки и развертывания программного обеспечения iOS без использования Xcode, в котором представлены:
-
Прочная система построения, созданная GNU Make, что делает его Makefile легко развертываемым через всюду с theos тоже.
-
NIC, система шаблонов проектов, которая создает готовые для сборки пустые проекты для в разных целях.
-
Logos, встроенная библиотека на основе препроцессора директив, предназначенных для создания MobileSubstrate расширение разработки легко и с оптимальной генерацией кода.
-
Автоматическая упаковка. Theos способен напрямую создавать пакеты DEB для распространения в Cydia, самом популярном средстве распространения пакетов на сцене джейлбрейка.
Как установить theos?
- В OSX: установите IOS SDK и следуйте этим инструкциям.
- В iOS: установите пакет рекомендуемых инструментов BigBoss из Cydia и запустите
installtheos3
. - В Linux: найдите среднее значение для установки инструментальной цепочки и следуйте этим инструкциям.
- В Windows: ничего невозможного, но если вы действительно это сделаете, сообщите мне.: P
Как использовать theos?
Это заданный вопрос очень и слишком расплывчатый. Поскольку theos представляет собой целый набор инструментов для разработки, нет смысла спрашивать, как его использовать, но более конкретно, спросить, как создать программное обеспечение с помощью theos.
Прежде всего, всегда используйте Theos Makefile Reference. Он охватывает основы создания файла файла theos и включает решение проблем с связями с добавлением рамки или частной структуры в проект.
Теперь вы можете создать свой собственный Makefile с нуля, создать свою небольшую теорию clone/symlink и начать кодирование, но theos делает этот шаг проще. Вы можете просто использовать nic.pl
.
Очень простой пример запуска NIC для создания чего-то можно найти здесь. Это очень прямолинейно и позволяет вам сразу программировать.
Теперь, где мы начинаем возвращаться к теме.
Создание твика с помощью функции
Прежде всего, не запускать NIC, когда внутри $THEOS/bin
. NIC создаст каталог проекта именно там, где вы его используете, и избегает любого проекта, созданного в $THEOS/bin
. Таким образом, вы получите простую ошибку, которой можно избежать, создав каталог проекта где-то достойным.
Запустите $THEOS/bin/nic.pl
и выберите шаблон iphone/tweak
. Вам будет предложена простая информация, которую вы можете хорошо знать, как ответить, за исключением последнего поля: MobileSubstrate bundle filter
.
Поскольку большая часть MobileSubstrate - это не просто проститутка (библиотека, которая переключает исходные методы/функции с вашей), но также загрузчик(часть, которая заставляет ваш крючок вставляться в определенные процессы), вы должны предоставить эту базовую информацию для загрузчика, чтобы узнать, где загрузить вашу настройку. Это поле - это только идентификатор пакета для приложения, в который будет вставлен этот проект.
com.apple.springboard
, по умолчанию используется идентификатор пакета для SpringBoard, приложение:
- iOS Homescreen
- Пусковая установка/дисплей обычных приложений
- Строка состояния 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
!
При компиляции с помощью theos Makefile, $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
. Это отличный способ обсудить темы, связанные с теосом, и задать вопросы. Я в основном там, вместе с другими очень умными людьми;)