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

94 lines
16 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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.