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

 

Основные каталоги и файлы

iOS — UNIX-подобная операционная система и использует очень похожую на UNIX и OS X структуру файловой системы. «Папка» здесь именуется «каталогом», а файловая система «растет» от корня /. Знаком ~ обозначается домашний каталог пользователя. В обычном режиме это каталог /var/mobile/, в режиме корневого пользователя — /var/root. Часть каталогов стандартны для UNIX-систем. Это /boot — здесь в UNIX располагается ядро системы и RAM-диск (в iOS ядро лежит в каталоге /System/Library/Caches/com.apple.kernelcaches/kernelcache), /etc — настройки низкоуровневых сервисов, /tmp — временные файлы, /bin — команды для запуска с помощью терминала, /mnt — точка монтирования внешних файловых систем (сюда подключаются флешки и прочее).

Наиболее же интересны для нас каталоги /System, /Library и /var. Именно здесь хранятся сама операционная система (первый каталог), системные данные (второй), настройки приложений и их данные (третий).

Стандартные (предустановленные) приложения лежат в каталоге /Applications. Здесь же располагаются исполняемые файлы Cydia, Zeusmos и некоторых других программ .app, для установки которых необходим джейлбрейк. Файлов здесь намного больше, чем иконок на рабочем столе iOS, так как тут расположены и некоторые внутренние службы, выделенные в качестве отдельных приложений (встроенная в iOS служба Facebook, Print Center и некоторые другие). На невзломанном устройстве этот каталог обновляется только при обновлении всей прошивки, однако некоторые приложения из Cydia устанавливаются именно в него, как и сам магазин Cydia.

Скачанные из App Store приложения хранятся в /var/mobile/Containers/Bundle/Application, каждое в своем собственном подкаталоге. Имена этих подкаталогов закодированы, и для того, чтобы понять, что это за приложение, необходимо зайти в каталог и перейти в следующий. Приложения, установленные не из App Store, также обычно находятся здесь. За каждым приложением закрепляется подкаталог в каталоге /var/mobile/Containers/Data/Application, внутри которого приложение хранит свои настройки и данные, созданные во время работы. Подробнее его структуру мы рассмотрим позже.

Системные обновления загружаются в каталог /var/mobile/MobileSoftwareUpdate. Их можно удалить через стандартное приложение «Настройки». Все обои хранятся в /Library/Wallpaper, а системные звуки — в /System/Library/Audio/UISounds, музыка и видео с компьютера — в /var/mobile/Media/iTunes_Control/Music.

Отдельно стоит упомянуть каталог /var/mobile/Library/caches/com.saurik.Cydia. Именно здесь хранятся deb-пакеты твиков до перезапуска Springboard. Если появится необходимость скачать твик на компьютер, его можно взять отсюда. Также при установке твики часто создают дополнительные каталоги, где хранят собственные данные. Обычно о таких каталогах сказано в документации твиков.

Каталог /var в OS X
Каталог /var в OS X
Каталог /var в iOS
Каталог /var в iOS
 

Программы для работы с ФС устройства напрямую

Существует несколько программ для работы с ФС устройства после джейлбрейка.

  • iTools — программа для Mac и Windows, позволяет добавлять и удалять файлы в ФС. На этом ее функции заканчиваются. Преимуществом для многих может стать панель закладок слева от окна просмотра ФС, где можно найти программы, твики, рингтоны или обои устройства.
  • iFunBox — имеет значительно больше возможностей. С ее помощью можно создавать каталоги, удалять, переименовывать файлы или экспортировать их на ПК. Вызывает удивление лишь отсутствие поиска по ФС.
  • Filza File Manager — позволяет прямо на устройстве просматривать метаданные файлов, переименовывать, перемещать, удалять их, открывать многие типы файлов. Есть встроенный поиск по папкам и одновременная работа с несколькими файлами.
  • iFile — во многом превосходит Filza File Manager. Некоторые возможности открываются только после оплаты полной версии программы, однако интерфейс в утилите более удобный и понятный.

Разумеется, работать с файловой системой можно и при помощи терминала. Здесь есть полная поддержка UNIX-команд, так что управление ФС будет очень быстрым и удобным.

Интерфейс iFunBox
Интерфейс iFunBox

 

Каталоги приложений и песочницы

Кроме того что iOS размещает все установленные пользователем приложения и их данные в отдельных каталогах, она налагает на работу самих приложений серьезные ограничения (запирая их в так называемую песочницу). Приложения не могут получить прямой доступ к оборудованию, им разрешено использовать только одну треть системного API. Плюс ко всему они не могут получить доступ к системным файлам и каталогам, а также файлам других приложений. Фактически все, что видит приложение, — это свой собственный каталог и несколько каталогов в /Library.

Что касается собственного каталога приложения, то его структура достаточно размыта, но обычно он включает четыре компонента: файл .com.apple.mobile_container_manager.metadata.plist, содержащий данные о приложении, и каталоги tmp, Documents и Library. В последнем часто находятся также подкаталоги Caches и Preferences. Иногда встречаются и другие, все зависит от потребностей программы.

Все документы приложение хранит в Documents. Этот каталог также используется для добавления файлов в приложение с помощью iTunes (File Sharing). В tmp могут храниться файлы, скачанные из интернета. Обычно каталог пустует, так как программа перемещает все документы оттуда в Documents, а затем удаляет их. Library также содержит временные файлы и пользовательские параметры приложения. В подкаталоге Preferences могут быть и настройки подключенных к приложению нативных модулей (например, mobilesafari).

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

В iOS 8 появился новый механизм, названный Document Picker. Он позволяет одним приложениям «видеть» специальные каталоги, созданные другими приложениями, и изменять их «на месте», без переноса в песочницу программы. Для этого используются так называемые публичные песочницы, которые, по сути, представляют собой каталоги, где каждая программа имеет права на запись и на чтение. Фактически это аналог кнопки «Импортировать» на Mac, только доступ дается не ко всей файловой системе, а к отдельным каталогам программ. Технологию поддерживают iCloud Drive, Dropbox и некоторые другие сервисы. Очевидно, их количество будет увеличиваться. Для успешного применения технологию должны поддерживать и программы, откуда будут переноситься файлы, и программа, куда они будут переноситься.

Реализация функций Document Picker в программе
Реализация функций Document Picker в программе
Получение доступа к файлам iCloud Drive
Получение доступа к файлам iCloud Drive
 

Как происходит установка приложений

Стоит знать, какие каталоги создаются при установке пакетов приложений. Рассмотрим этот вопрос для твиков и программ из App Store. Твики распространяются в deb-пакетах, которые представляют собой архив с файлами: динамические библиотеки (.dylib), настройки (.plist), каталог с самим приложением (.app), каталог с документами и другие. При установке такой файл просто разворачивается в систему. Причем не в пользовательский каталог, а в системные (либо и те и другие), ограничения песочницы на него не действуют.

Рассмотрим файловую структуру установленного твика на примере AudioRecorder. В каталоге /Library/MobileSubstrate/DynamicLibraries хранятся динамические библиотеки твика и его настройки. В данном случае это AudioRecorder.dylib, AudioRecorder.plist, AudioRecorderUI.plist, AudioRecorderUI.dylib. Библиотек может быть больше или меньше, все зависит от сложности приложения.

Языковая локализация твика и некоторые настройки размещаются в /Library/PreferenceBundles. Здесь хранится также несколько изображений, используемых в программе. Исполняемый файл и основная часть графики находятся в /var/db/stash/_.YWqibn/Applications. В /var/mobile/Library/Mobile Documents создается также пустой каталог net~limneos~AudioRecorder. Пользовательские же данные хранятся по пути /var/mobile/Documents/AudioRecorder.

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

С программами из App Store все значительно проще. В /var/mobile/Containers/Bundle/Application/<шестнадцатеричный код приложения> хранится графика программы, локализации, исполняемый файл. Каталог /var/mobile/Containers/Data/Application/<шестнадцатеричный код приложения> — «песочница» программы (документы, пользовательские настройки). На этом структура установленного файла .ipa заканчивается.

 

Изменяем системные файлы

Теоретически изменением файлов в ФС напрямую можно сделать очень много. Достаточно хотя бы оценить количество файлов с расширением plist — в основной массе это настройки программ и системных сервисов. Потому перечислить все возможные операции с файлами практически нереально, ограничимся лишь некоторыми примерами их использования.

Например, если ты захочешь сменить какой-либо текст на экране блокировки или на рабочем столе, это можно сделать, перейдя в каталог /System/Library/CoreServices/Springboard.app и перейдя в необходимый локализационный пакет, название которого совпадает с установленным языком интерфейса на устройстве. Файлы здесь хранятся в формате String, и открыть их в «читаемом» виде можно, например, при помощи Filza File Manager, речь о котором шла выше. Для смены надписи Slide to Unlock (или «Разблокируйте» в русском варианте) необходимо открыть Springboard.string и сменить параметр AWAY_LOCK_LABEL, введя необходимый текст. Не забудь сохранить изменения файла и перезагрузить устройство.

Изменение параметра AWAY_LOCK_LABEL
Изменение параметра AWAY_LOCK_LABEL
Экран блокировки с кастомным текстом
Экран блокировки с кастомным текстом

Можно изменять также параметры нативных приложений, которые хранятся внутри их пакетов .app в каталоге /Applications. Например, в Preferences.app можно изменять номер сборки или версии системы, а также названия разделов и функций настроек. Если необходимо самостоятельно модифицировать, к примеру, темы для WinterBoard, знание о расположении директорий также пригодится. Так, все темы лежат в папке /Library/Themes, где их можно видоизменять. Тут есть модифицированные иконки стандартных утилит, можно добавить собственную кастомизированную иконку или поменять уже существующую.

 

Выводы

Это, конечно же, не все, что можно сказать о файловой структуре iOS, однако в рамках одной статьи мы не можем рассмотреть все ее аспекты и ограничились лишь базовыми понятиями. Имея джейлбрейк, ты можешь пойти дальше и изучить систему самостоятельно. Отличным источником информации может также стать the iPhone wiki.

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    4 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии