94 lines
16 KiB
Markdown
94 lines
16 KiB
Markdown
---
|
||
title: iPad iOS 9.3.5 — сборка редакторов, fake sign и деплой
|
||
created: '2026-10-14'
|
||
updated: '2026-10-14'
|
||
tags: [ipad, ios, markdown, virfield, build, deploy]
|
||
---
|
||
# iPad iOS 9.3.5 — сборка редакторов, fake sign и деплой
|
||
|
||
Запрос: checkout найденных открытых редакторов в `~/Developer`, сборка на Virfield/Monterey, fake sign и установка на физический iPad. Эта заметка описывает текущее состояние и процедуру; сборки, подписи и установка ещё не выполнены.
|
||
|
||
## Устройство и доступ
|
||
|
||
Проверено через libimobiledevice 2026-10-14:
|
||
|
||
- Модель `iPad2,5`: iPad mini первого поколения, 32-bit ARM (`armv7`).
|
||
- iOS `9.3.5`; имя `iPad (Alexey)`.
|
||
- UDID `3a214de4ad222863b82458f3611ad6b7b53eb05f`.
|
||
- `idevice_id -l` в обычном sandbox возвращает `Unable to retrieve device list`; вне sandbox устройство видно по USB и как network device.
|
||
- Локальный USB SSH-туннель: `iproxy -u 3a214de4ad222863b82458f3611ad6b7b53eb05f 2235:22`.
|
||
- SSH-сервер устройства: `OpenSSH_6.7`, host-key algorithms `ssh-rsa,ssh-dss`. Современный клиент без compatibility flag не согласует host key.
|
||
- Host key закреплён в `~/Developer/ipad-editors/ipad-known-hosts`; RSA fingerprint `SHA256:sl+pEjLygox+shHazV2JnzKGvvRFeiTbpx3ZevgT2Kk`.
|
||
- Существующий `~/.ssh/id_rsa` (`SHA256:UZ8oPNIe8z2bvBOhWQRyt+JWi99oqQnP8N5XAAm5Uhs`) отклонён для `root` и `mobile`, в том числе при принудительном `PubkeyAcceptedAlgorithms=ssh-rsa`. SSH agent не содержит identities. Путь к ранее установленному на iPad ключу пока не найден.
|
||
- Проверка стандартного пароля заблокирована автоматической проверкой разрешений; она не выполнялась. Пароли и private keys в этой заметке не хранятся.
|
||
|
||
Команда для уже авторизованного ключа (подставить проверенный путь):
|
||
|
||
```sh
|
||
ssh -p 2235 -i /absolute/path/to/ipad-key \
|
||
-o IdentitiesOnly=yes -o BatchMode=yes \
|
||
-o HostKeyAlgorithms=ssh-rsa -o PubkeyAcceptedAlgorithms=ssh-rsa \
|
||
-o StrictHostKeyChecking=yes \
|
||
-o UserKnownHostsFile="$HOME/Developer/ipad-editors/ipad-known-hosts" \
|
||
root@127.0.0.1 'id; command -v appinst; command -v ldid; command -v uicache; command -v uiopen'
|
||
```
|
||
|
||
## Checkouts
|
||
|
||
Все пять source checkouts скачаны в `~/Developer/ipad-editors/`. Публичные исходники Editorial, 1Writer, Textastic, Working Copy и самого приложения Git2Go не найдены; Git2Go website repository не является приложением и не подменяет его исходники.
|
||
|
||
| Checkout | Закреплённая ревизия | Проверенные требования и ограничения |
|
||
|---|---|---|
|
||
| [Edhita](https://github.com/tnantoka/edhita/tree/8614a583f765b0f73d3e4c7d150e8d44a9137dbe) | `8614a583f765b0f73d3e4c7d150e8d44a9137dbe` | Исходники 2.3.0, iOS 9.0, Swift 5; файловый редактор с Markdown preview. Ветка `uikit` на HEAD уже требует iOS 10.0. CocoaPods зависимости закреплены старым Podfile.lock. |
|
||
| [iVim / holzschu](https://github.com/holzschu/iVim/tree/f0d6dbceb7900ff6eb122691114a64a64cd9a580) | `f0d6dbceb7900ff6eb122691114a64a64cd9a580` | iOS 9.1, Swift 5; полноценный Vim, document picker и shell-команды через ios_system. В checkout отсутствуют Frameworks; upstream get_frameworks.sh указывает ios_system 2.4, Python/Lua dependencies нужно закрепить и проверить armv7. |
|
||
| [Notepad](https://github.com/ruddfawcett/Notepad/tree/8ae529d831380e203029381a7b1eccad68701fda) | `8ae529d831380e203029381a7b1eccad68701fda` | MIT Markdown editor component и Example app. Podspec поддерживает iOS 8.0, но Xcode targets Example/Notepad сейчас задают 10.1. Для попытки сборки — override 9.3; это требует проверки компилятором. Demo открывает встроенный tests.md, не является готовым browser для Obsidian vault. |
|
||
| [GitJournal](https://github.com/GitJournal/GitJournal/tree/50dfb2d4ea2b8f00f9e5938e682970e53981ae84) | `50dfb2d4ea2b8f00f9e5938e682970e53981ae84` | Исторический 1.76.0+10 непосредственно перед повышением minimum iOS до 10.0. Runner, Podfile и AppFrameworkInfo.plist задают iOS 9.0; нужен Flutter >=2.0.3 с Dart >=2.12 и <3.0. Markdown + встроенный Git sync. Latest checkout требует iOS 11 и не подходит. |
|
||
|
||
Дополнительно найден и скачан официальный [terrychou/iVim](https://github.com/terrychou/iVim/tree/d6aaa3c8cd620f035209776f5cc998e7b2da5d5f), checkout `~/Developer/ipad-editors/iVim-upstream`, revision `d6aaa3c8cd620f035209776f5cc998e7b2da5d5f` (2018-09-29, 1.40). Targets задают iOS 9.1; внешних frameworks в проекте нет. Для Xcode 13 share/test targets со Swift 3 требуют override `SWIFT_VERSION=4.0`; успешная компиляция пока не подтверждена.
|
||
|
||
Форк holzschu: скачан официальный `ios_system` v2.4 `release.tar.gz`, SHA-256 `17e220bc4bd89745105f037edcbb37ce445b44b9154d207c882352ce02cc6af4`. `lipo -archs` показал `ios_system.framework` armv7+arm64, но `lua_ios.framework` и `libctags.dylib` — только arm64. Заявленный minimum iOS 9.1 не доказывает поддержку 32-bit в этих бинарных зависимостях. Upstream getPackages.sh также собирает Python/ZeroMQ с arm64 и iOS 11/12; он не запускался.
|
||
|
||
[Flutter removed 32-bit iOS after the 2.10 stable cycle](https://github.com/flutter/flutter/issues/97327). Для GitJournal нельзя брать текущий Flutter; наличие deployment target 9.0 само по себе не доказывает armv7 в каждом готовом framework.
|
||
|
||
## Virfield и фактический блокер
|
||
|
||
Прочитаны installed `virfield_help`: workflows, verification, operations. Верифицированный template `monterey-xcode-13.4.1`: macOS 12.7.6 / 21H1320, Xcode 13.4.1 / 13F100, golden в `samsung-tart`.
|
||
|
||
Запросы сохранены локально:
|
||
|
||
- `~/Developer/ipad-editors/virfield-acquire.json`: default storage; отклонён `resource_exhausted`.
|
||
- `~/Developer/ipad-editors/virfield-acquire-release-check.json`: explicit internal storage; принят, но clone не подтверждён.
|
||
- Identity только для этой аренды: `~/.local/share/virfield-identities/ipad-editors-20261014-attempt-1/`; private key не хранится в Git/vault.
|
||
- Lease `lease-9e65ca2f956c0f061eb3ac021d9f6b6f`, VM `vf-9e65ca2f956c0f061eb3ac021d9f6b6f`, job `job-ee57f1c483518f251f1bcd095621e6e9`.
|
||
- Job `needs_attention` / `clone_outcome_unknown`; lease `quarantined`. Последний status не показывает физическую VM с этим именем, но reservation остаётся. SSH configuration не создавалась: lease не ready.
|
||
|
||
Причина и диагностические недостатки записаны в [[personal/projects/virfield]]. Local Tart golden нельзя клонировать в другой TART_HOME; явный cross-container destination был принят admission, затем отклонён backend. Требуется штатное operator recovery с подтверждением точного имени, без обхода journal. Recovery может удалить VM навсегда — отдельное подтверждение пользователя обязательно.
|
||
|
||
После восстановления использовать свободное место в исходном `samsung-tart`, либо создать отдельный verified Monterey/Xcode golden непосредственно в internal `release-check` и клонировать уже его в том же контейнере. Чужую macos27 lease не останавливать и не удалять.
|
||
|
||
## Процедура сборки — ещё не исполнена
|
||
|
||
1. Получить job `succeeded` и lease `ready`, затем создать pinned SSH config через установленный Virfield CLI. Проверить `sw_vers`, `xcodebuild -version`, `xcrun --sdk iphoneos --show-sdk-version` в госте. Не работать на golden.
|
||
2. Передать checkouts/зафиксированные зависимости в guest `~/workspace`; сохранить SHA исходников и полный build log отдельно для каждого приложения.
|
||
3. Для Xcode targets использовать `-sdk iphoneos -configuration Release -destination generic/platform=iOS`, `ARCHS=armv7`, `ONLY_ACTIVE_ARCH=NO`, `IPHONEOS_DEPLOYMENT_TARGET=9.3`, `CODE_SIGNING_ALLOWED=NO`, `CODE_SIGNING_REQUIRED=NO`. Edhita требует `pod install` с закреплёнными версиями и template AppSecret; iVim — соответствующие старые frameworks; Notepad — app scheme `Example` (scheme `Notepad` собирает только framework). GitJournal требует старый Flutter и его pubspec.lock/Podfile.lock, затем release build без Apple signing. Подготовлен `~/Developer/ipad-editors/build-native-on-monterey.sh`; проверен только синтаксис `bash -n`, фактическая сборка ожидает ready worker.
|
||
4. Экспортировать .app/IPA на Mac до окончания lease; проверять `lipo -archs` у executable и всех вложенных Mach-O: должен присутствовать `armv7`. Проверить minimum OS <=9.3.5, UIDeviceFamily включает 2, итоговые bundle IDs, отсутствие обязательной arm64 capability. Подписывать вложенные dylib/framework/appex до основного executable.
|
||
5. Fake sign выбранным совместимым `ldid`, проверить signature/entitlements; сформировать IPA с `Payload/<App>.app` и SHA-256. `codesign -s -` без проверки совместимости старого устройства не считать проверенным эквивалентом.
|
||
6. Через уже настроенный SSH key проверить jailbreak, AppSync, `appinst` и `ldid`. Перед установкой прочитать список installed bundles: существующий экземпляр с пользовательскими документами не удалять/перезаписывать без подтверждения. Для новой тестовой сборки выбрать отдельный bundle ID при необходимости.
|
||
7. Передать IPA, вызвать доступный installer, проверить его exit code и появление bundle. При disconnect сначала прочитать состояние устройства, затем решать о повторе. Обновить icon cache, запустить по bundle ID доступным launcher и проверить работающий процесс/экран. Installer success не доказывает launch или редактирование.
|
||
8. Сохранить результат отдельно для build, fake sign, install, launch, Markdown editing; дополнить эту заметку фактическими командами и логами. Освободить только собственную lease после экспорта и явного разрешения cleanup.
|
||
|
||
Fake signer source скачан отдельно: [ProcursusTeam/ldid](https://github.com/ProcursusTeam/ldid/tree/af86971ae72ec3ed3d0a699107c4e882324c941b), checkout `~/Developer/ipad-editors/ldid`, ревизия `af86971ae72ec3ed3d0a699107c4e882324c941b`. Это вспомогательный инструмент, не пятый редактор. Бинарник собран на локальном Mac (`make -j4`, libplist 2.8.0 / libcrypto 3.6.5); запуск usage проверен, версия `v2.1.5-procursus7-23-gaf86971`, Mach-O arm64. SHA-256: `f36d613b2fb6e245f99bef8373844e7fa6c97a2f82059faadc74dcbcc90c9458`. Это host tool для подписи, не сборка редактора; редакторы по запросу должны собираться на Monterey. Подпись armv7-приложений ещё не проверена. Для старой ОС ldid позволяет явно выбрать hash `-Hsha1`; фактическую совместимость проверить на готовом артефакте и устройстве.
|
||
|
||
## Связь с Obsidian sync
|
||
|
||
На Mac `~/scripts/sync-vault.sh` уже запускается `launchd` `com.sync-vault` каждые 300 секунд; текущий daemon state подтверждает StartInterval. Remote скрипта — `nas`, не GitHub. Редактирование серверных .md через SFTP может использовать этот существующий синк; прямому iPad GitJournal/Working Copy потребуется собственный remote. Обычный iOS-app sandbox не даёт cron для Bash/Git; на jailbroken устройстве daemon/launchd и системные Git/Bash требуют отдельной настройки. Запрос на cron пока был исследовательским: существующие расписания не менялись.
|
||
|
||
См. также [[personal/how-to/old-ipad-ios935-ipa-sources]], [[family/how-to/vault-git-sync]].
|
||
|
||
## Обновление 2026-10-14 22:40 Asia/Bishkek
|
||
|
||
- Explicitly authorized recovery завершился успешно: cleanup `job-1fe239f3064566b2a4b3f75ebce13813`; старый lease освобождён. Новый образ `ipad-editors-monterey-xcode-1341-20261014` строится непосредственно в internal `release-check`, image `image-f8c888fcafbd1a2df2a3b9a02821685d`, job `job-076452fa609adc3e6d4093a8e047a693`. См. [[personal/projects/virfield]].
|
||
- Host `ideviceinstaller` 1.2.0 установлен через Homebrew. Проверена штатная USB-служба: `ideviceinstaller -u 3a214de4ad222863b82458f3611ad6b7b53eb05f list -a CFBundleIdentifier -a CFBundleDisplayName -a CFBundleVersion` завершился exit 0 и вернул installed bundles. Ни один bundle редакторов ещё не установлен. Для install синтаксис этой версии: `ideviceinstaller -u UDID install PATH.ipa`; installer success нужно дополнительно сверить со списком приложений и запуском. Наличие SSH для этого USB-маршрута не требуется; возможность установки fake-signed IPA ещё не проверена.
|
||
- Поиск отпечатков public authorized_keys через privileged AFC2 отвергнут automatic approval review ДО исполнения как credential probing without specific authorization. AFC2-команда не выполнялась. Используется обычная USB installation_proxy без чтения privileged SSH files.
|
||
- Flutter 2.10.5/Dart 2.16.2 x64 SDK скачан с официального Google archive и совпал с published SHA-256 `cc3b48d864c5863898246b8f8e602489cc8e2e77098db27ef3484a25162e1c80`; размер 1,181,514,897 bytes. На ARM Monterey worker этому историческому host SDK нужен Rosetta. Это подготовка инструмента, не подтверждение сборки GitJournal.
|