Що всередині файлової системи iOS (Шляхтен)

При роботі з джейлбрейкнутим 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. Їх можна видалити через стандартну програму

Окремо варто згадати каталог /var/mobile/Library/caches/com.saurik.Cydia. Саме тут зберігаються deb-пакети твіків до перезапуску Springboard. Якщо з'явиться необхідність завантажити твік на комп'ютер, можна взяти звідси. Також при установці Твіки часто створюють додаткові каталоги, де зберігають власні дані. Зазвичай про такі каталоги сказано у документації твіків.

файлової
всередині

ПРОГРАМИДЛЯ РОБОТИЗ ФС ПРИСТРОЮ НАПРЯМУ

Існує кілька програм для роботи з ФС пристрою після джейлбрейку.

Зрозуміло, працювати з файловою системою можна за допомогою терміналу. Тут є повна підтримка UNIX-команд, тому управління ФС буде дуже швидким і зручним.

файлової

КАТАЛОГИ ДОДАТКІВ І ПІСОЧНИЦІ

Крім того, що 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 Отримання доступу до файлів 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

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, ввівши необхідний текст. Не забудь зберегти зміни файлу та перезавантажити пристрій.

всередині
всередині

Зміна параметра Екран блокування з кастомним текстом

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

ВИСНОВКИ

Це, звичайно, не все, що можна сказати про файлову структуру iOS, проте в рамках однієї статті ми не можемо розглянути всі її аспекти та обмежилися лише базовими поняттями. Маючи джейлбрейк, ти можеш піти далі та вивчити систему самостійно. Відмінним джерелом інформації може також стати iPhone wiki.