Files
obsidian-vault/personal/how-to/ipad-ios935-build-deploy.md
T

13 KiB
Raw Blame History

title, created, updated, tags
title created updated tags
iPad iOS 9.3.5 — сборка редакторов, fake sign и деплой 2026-10-14 2026-10-14
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 в этой заметке не хранятся.

Команда для уже авторизованного ключа (подставить проверенный путь):

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

Все четыре репозитория скачаны в ~/Developer/ipad-editors/. Публичные исходники Editorial, 1Writer, Textastic, Working Copy и самого приложения Git2Go не найдены; Git2Go website repository не является приложением и не подменяет его исходники.

Checkout Закреплённая ревизия Проверенные требования и ограничения
Edhita 8614a583f765b0f73d3e4c7d150e8d44a9137dbe Исходники 2.3.0, iOS 9.0, Swift 5; файловый редактор с Markdown preview. Ветка uikit на HEAD уже требует iOS 10.0. CocoaPods зависимости закреплены старым Podfile.lock.
iVim / holzschu 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 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 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 и не подходит.

Flutter removed 32-bit iOS after the 2.10 stable cycle. Для 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, 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.