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

223 lines
37 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-15'
tags: [ipad, ios, markdown, virfield, build, deploy]
---
# iPad iOS 9.3.5 — сборка редакторов, fake sign и деплой
Запрос: checkout найденных открытых редакторов в `~/Developer`, сборка на Virfield/Monterey, fake sign и установка на физический iPad. **Edhita, Notepad Example, официальный iVim 1.40 и legacy GitJournal собраны, fake-signed, установлены и запущены на iOS 9.3.5; экраны всех четырёх приложений проверены.** GitJournal потребовал local compatibility patch, описанный ниже. Fork holzschu требует 32-bit rebuild зависимостей и не установлен. Проверенный SSH-доступ к iPad настроен 2026-10-15 через `ssh-copy-id` после явного указания пользователем пароля. Все артефакты и diagnostics экспортированы; по отдельному запросу пользователя рабочая Monterey VM штатно released, её отсутствие в runtime подтверждено. Готовый golden сохранён.
## Устройство и доступ
Проверено через 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`: этот ключ ещё не был установлен. 2026-10-15 пользователь явно предоставил пароль и попросил `ssh-copy-id`; команда добавила один public key, затем вход `root` с `BatchMode=yes` без пароля прошёл. Первая password-сессия оборвалась `Broken pipe`; повторная завершилась exit 0.
- Ранее automatic approval review отклонил password probe и privileged AFC2 поиск authorized_keys до исполнения. Это исторический approval blocker, снятый новым явным запросом пользователя на парольный вход и установку ключа. Пароли и private keys здесь не хранятся.
Фактически исполненная установка ключа (пароль вводится в интерактивный prompt):
```sh
ssh-copy-id -i "$HOME/.ssh/id_rsa.pub" -p 2235 \
-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
```
Проверенный вход по ключу:
```sh
ssh -p 2235 -i "$HOME/.ssh/id_rsa" \
-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 'uname -a'
```
Через SSH подтверждены `/usr/bin/appinst`, `/usr/bin/ldid`, `/usr/bin/uicache`, `/usr/bin/uiopen`; тестовые IPA установлены ниже через USB installation_proxy. Обычный `id` в окружении iPad отсутствует, поэтому для smoke check использован `uname`.
## 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. Исходные Xcode targets задают 10.1; override 9.3 проверен успешной сборкой и запуском на iPad 9.3.5. 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 в проекте нет. На Monterey/Xcode 13.4.1 с override `SWIFT_VERSION=4.0`, `ARCHS=armv7`, minimum 9.3 компиляция завершилась `BUILD SUCCEEDED`; приложение установлено и запущено.
Форк 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 не останавливать и не удалять.
Этот исходный lease уже `released` после отдельно разрешённого recovery. Новый verified golden `ipad-editors-monterey-xcode-1341-20261014` создан в `release-check`, image `image-f8c888fcafbd1a2df2a3b9a02821685d`, macOS 12.7.6 / Xcode 13.4.1. Новая lease `lease-327bb8e4a3a06b7d5ac8e527c57d1907` прошла ready и реально собрала две apps. С 17:57:04 UTC 2026-10-14 она `needs_attention` / `vm_drift`: manager закрыл tunnel `127.0.0.1:60131`. Последний inventory при этом показывает VM running на прежнем `192.168.64.251`. Recovery новой VM требует отдельного разрешения пользователя; старое разрешение относилось только к `vf-9e65…`. Подробности в [[personal/projects/virfield]].
## Процедура сборки и деплоя
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`, `ENABLE_BITCODE=NO`. Edhita требует `pod install` с закреплёнными версиями и template AppSecret; fork iVim — старые frameworks; Notepad — app scheme `Example` (scheme `Notepad` собирает только framework). GitJournal требует старый Flutter и lockfiles. `~/Developer/ipad-editors/build-native-on-monterey.sh` реально собрал Notepad и iVim-upstream; отдельный helper GitJournal до компиляции не дошёл.
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. Перед установкой прочитать список installed bundles: существующий экземпляр с пользовательскими документами не удалять/перезаписывать без подтверждения. Для этой сессии отсутствие обоих target bundles подтверждено до install; ранее установленные приложения сохранены. Для установки fake-signed IPA проверен USB `ideviceinstaller`; наличие рабочего SSH не требуется этому маршруту.
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`. Это вспомогательный host tool. Бинарник собран на локальном Mac (`make -j4`), версия `v2.1.5-procursus7-23-gaf86971`, Mach-O arm64, SHA-256 `f36d613b2fb6e245f99bef8373844e7fa6c97a2f82059faadc74dcbcc90c9458`. Подпись с `-Hsha1` реально проверена на двух armv7 apps: embedded entitlements прочитаны обратно, USB install и launch прошли.
## Связь с 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 пока был исследовательским: существующие расписания не менялись.
Read-only проверка после вопроса пользователя 2026-10-15: iPad уже имеет `/bin/bash` (4.0.x), `/bin/sh`, `/bin/launchctl`, `/usr/bin/ssh`, dpkg. **Git, cron/crontab, basename, head и tr отсутствуют** в штатном PATH; date/sed/mkdir доступны. Поэтому собственный скрипт синка возможен, но Mac wrapper/library нельзя просто скопировать и объявить работающим: нужны совместимый armv7 Git и недостающие core utilities либо их замена в скрипте. Расписание можно сделать launchd, как на Mac. Vault нужно хранить в директории, которую открывает выбранный редактор (например его Documents), запускать синк с согласованными permissions/mobile user и отдельным клиентским SSH key к remote. Mac→iPad key, установленный выше, не является ключом iPad→NAS/GitHub. Планировщик, пакеты Git и реальный vault на iPad в этой сессии ещё не настраивались; вопрос был о возможности, не отдельным поручением менять синк.
См. также [[personal/how-to/old-ipad-ios935-ipa-sources]], [[family/how-to/vault-git-sync]].
## Исторический checkpoint 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.
## Проверенные команды и результаты, 2026-10-15
Guest workspace: `/Users/admin/ipad-editor-build/ipad-editors`. Источники переданы как git archives с `SOURCE_REVISION`; private keys в архив не включались. Guest toolchain в exported `toolchain.txt`: macOS 12.7.6, Xcode 13.4.1 / 13F100, iPhoneOS SDK 15.5.
В ready worker фактически выполнено:
```sh
cd /Users/admin/ipad-editor-build/ipad-editors
bash build-native-on-monterey.sh Notepad
bash build-native-on-monterey.sh iVim-upstream
```
Products и полные build logs экспортированы на Mac в `/Users/admin/Developer/ipad-editors/exported-editors/`. Оба `build.log` содержат `BUILD SUCCEEDED`. Helper выбирает `Example` и `iVim` schemes, выключает Apple signing/bitcode, задаёт armv7 / minimum 9.3. Для upstream iVim установлен Swift language mode 4.0. Изменений исходного кода этих двух приложений для сборки не понадобилось.
Host packaging использует `/Users/admin/Developer/ipad-editors/package-fake-signed.py`. Он копирует original .app, проверяет minimum OS всех Mach-O, требует armv7, удаляет прочие slices только в копии, подписывает nested binaries SHA1, затем main/extension с entitlements, читает entitlements обратно и создаёт IPA с сохранёнными Unix permissions/symlinks. Для iVim сохранены source entitlements/app group; `IPADLOCAL9` — локальный fake team, работоспособность iCloud не проверена.
```sh
cd /Users/admin/Developer/ipad-editors
python3 package-fake-signed.py exported-editors/Notepad/Example.app \
packages/Notepad-20261014
python3 package-fake-signed.py exported-editors/iVim-upstream/iVim.app \
packages/iVim-upstream-20261014 \
--entitlements iVim-upstream/iVim/iVim.entitlements
```
Output directory должен быть новым: helper отказывает при существующем каталоге. Уже созданные пакеты повторно не перезаписывать.
| App | IPA и SHA-256 | Install / launch |
|---|---|---|
| Notepad Example | `packages/Notepad-20261014/Example.ipa`; `835431ecb821d996b932e523fe32188f21b82fecab4808a6536a0fe0975c4748` | `com.ruddfawcett.Example`, minimum 9.3; USB install Complete / exit 0; process 3355, UI с Markdown test document виден на screenshot |
| iVim 1.40 | `packages/iVim-upstream-20261014/iVim.ipa`; `e2b67b451b11defb30fd8ba1d64a5f3e898a3010be14c3f451f41dfe12b6c777` | `com.terrychou.ivim`, minimum 9.3; USB install Complete / exit 0; process 3366, Vim welcome screen и клавиатура видны на screenshot |
| Edhita 2.3.0 | `packages/edhita-20261015/Edhita.ipa`; `f354872cc0e4596dca82903f0741ccf0204242befd3400e54fabcc1ef09a8aea` | `com.bornneet.Edhita`, minimum 9.3; USB install Complete / exit 0; detached debug launch exit 0, UI с Documents browser/Editor/Browser/Dual виден на screenshot |
| GitJournal 1.76.0+10, local legacy build | `packages/GitJournal-20261015/Runner.ipa`; `5dc474f641cb26e64586b8f1c48ee6520c0dd7797e53a6ab59ee721e098f7a52` | `io.gitjournal.gitjournal`, build10, minimum9.3; USB install Complete / exit0; detached launch exit0, onboarding UI показан на screenshot |
Установлен `ideviceinstaller` 1.2.0. До install отсутствие обоих bundle IDs проверено; другие приложения/документы не удалялись. Исполненные команды:
```sh
UDID=3a214de4ad222863b82458f3611ad6b7b53eb05f
ideviceinstaller -u "$UDID" list -a CFBundleIdentifier
ideviceinstaller -u "$UDID" install \
/Users/admin/Developer/ipad-editors/packages/Notepad-20261014/Example.ipa
ideviceinstaller -u "$UDID" install \
/Users/admin/Developer/ipad-editors/packages/iVim-upstream-20261014/iVim.ipa
ideviceinstaller -u "$UDID" list -b com.ruddfawcett.Example -a MinimumOSVersion
ideviceinstaller -u "$UDID" list -b com.terrychou.ivim -a MinimumOSVersion
```
Первый запуск через debugserver не прошёл без Developer Disk Image. Затем скачан [9.3 device support mirror](https://github.com/filsv/iOSDeviceSupport/tree/master/9.3): архив `dependencies/ios-device-support-9.3.zip`, SHA-256 `46dc58f181de29853c72c391d70e51b03a3c38ee8797365e7557a539ddff6276`. Git blob архива сверён с `81d23af3e57472f4e77222acb02fd6b5a6a529b1`. Это проверка неизменности mirror, не независимая Apple attestation. `DeveloperDiskImage.dmg` с accompanying `.signature` смонтирован на iOS 9.3.5 со статусом Complete:
```sh
ideviceimagemounter -u "$UDID" \
/Users/admin/Developer/ipad-editors/dependencies/ios-device-support-9.3/9.3/DeveloperDiskImage.dmg \
/Users/admin/Developer/ipad-editors/dependencies/ios-device-support-9.3/9.3/DeveloperDiskImage.dmg.signature
idevicedebug -u "$UDID" run com.ruddfawcett.Example
idevicedebug -u "$UDID" run com.terrychou.ivim
```
Обычный `run` держит debugger connection; проверенный в installed help вариант для самостоятельной работы приложения — `idevicedebug -u "$UDID" --detach run BUNDLEID`. Screenshot service после DDI также заработал:
```sh
idevicescreenshot -u "$UDID" /Users/admin/Developer/ipad-editors/Notepad-first-launch.png
idevicescreenshot -u "$UDID" /Users/admin/Developer/ipad-editors/iVim-first-launch.png
```
Оба screenshots просмотрены. Raw orientation landscape повернута относительно PNG; UI присутствует. В launch log есть предупреждения jailbreak tweak HMX_UIKit о недоступном notification window/keyboard method; запуску они не помешали, tweaks не менялись. Notepad — демонстрация editing component без готового vault browser. iVim — полноценный Vim. Сохранение изменённой заметки, подключение реального vault и Git sync отдельно не тестировались.
### Исторические блокеры зависимостей (исходный worker)
- **Edhita:** native ARM Ruby 2.6 / FFI падал `Bus Error` на Ethon/CocoaPods; отдельный x86_64 Ruby/CocoaPods через Rosetta загрузился успешно. `pod install --deployment` отказал из-за spec checksum/repo metadata и версии CocoaPods 1.6.1 → 1.11.3; полученных новых версий PODS в этом запуске не обнаружено. На host helper исправлен на обычный `pod install` с сохранением before/after lock и обязательным сравнением массива PODS. Последний перенос исправления в guest не прошёл, потому что Virfield tunnel уже закрыт. Xcode compile Edhita не состоялся.
- **GitJournal:** verified Flutter 2.10.5 действительно содержит armv7 Release framework с minimum iOS 9.0; запуск SDK через Rosetta прошёл. Automatic Flutter version check зависал на upstream git fetch; helper использует документированный `--no-version-check`. Native `ios-libraries` v1.1 скачаны с pinned archive SHA-256 `54d788da33397bd923b773f2041d0249b28682446eabf98046bec089eaf025c3`; все четыре static archives содержат armv7. `git_bindings` pinned `52a9def…` также подготовлен. `flutter pub get` остановился на недоступном публично `GitJournal/ext_storage` (GitHub API 404). Host pubspec изменён на опубликованный `ext_storage: 1.0.3`, но transfer в guest не прошёл; этот fallback ещё не проверен сборкой. Plugin Android-only, поэтому его platform-specific usage нужно проверить. Компиляция/деплой/Git sync GitJournal не заявляются успешными.
- **iVim / holzschu:** готовые Lua/ctags зависимости только arm64; полный fork не собран для armv7. Upstream get-frameworks/Python build scripts с изменчивыми refs и iOS 11/12 не запускались. Для полноценного fork требуется отдельная подготовка совместимых 32-bit зависимостей; официальный iVim 1.40 установлен как дополнительный найденный редактор.
Состояние и пути артефактов также сохранены в `/Users/admin/Developer/ipad-editors/manifest.json`. Исторический blocker `lease-327bb8…` снят разрешённым recovery, cleanup `job-5cb66a109f395c15cd51633ab858bee7` succeeded 18:15:12 UTC 2026-10-14. Replacement `lease-9c1a94ff2b56b396fee7f1bbd2e0dcea` ready, prepare `job-b47d43f833f4bc28e4ec880f8fa40b00` succeeded; pinned tunnel `127.0.0.1:55530`, отдельные `worker-replacement-ssh.conf`/known-hosts и caller identity attempt-3. Не запускать команды через direct-IP в обход Virfield journal.
На replacement реально выполнен `build-native-on-monterey.sh edhita`, RUN_ID `20261015T001900Z`: `BUILD SUCCEEDED`, before/after массив PODS одинаков. Полный export `edhita-export-20261015.tar.gz` сохранён на Mac. Fake-sign helper проверил armv7 main minimum 9.3, Swift dylibs minimum 7.0; `ideviceinstaller install packages/edhita-20261015/Edhita.ipa` завершился Complete, bundle metadata сверена, `idevicedebug --detach run com.bornneet.Edhita` завершился exit 0. Screenshot `Edhita-first-launch.png` просмотрен и показывает редактор и файловый browser. Изменённой пользователем заметки ещё нет; запись/редактирование vault отдельно не проверены.
GitJournal на replacement: опубликованный ext_storage 1.0.3 успешно разрешился. Затем выявлено противоречие upstream: Dart firebase_analytics 8.0.0 требует более высокий minimum iOS, несмотря на Runner9.0 и native lock6.33.0. Выбраны точные firebase_analytics6.2.0 / firebase_core0.5.2 из исторического iOS lock; это local compatibility patch. При пере-resolve незакреплённый dart-git HEAD перешёл на современный Dart3 и нарушил old SDK2.16.2. Все четыре git dependencies теперь явно pin к исходным resolved-ref (`4e47b63…`, `52a9def…`, `d7bfaa69…`, `2e2da41…`). Эти изменения находятся в host `GitJournal/pubspec.yaml` и переданы guest. Дальнейший результат компиляции пока ожидается.
Позднейшая проверка old Firebase6 выявила quiver2/quiver3 conflict с dart-git. **Final compatibility patch отключает optional Firebase analytics**: dependency удалена, `Analytics` сохраняет API с no-op Firebase methods и disabled collection, ссылка на отсутствующий публично `GoogleService-Info.plist` убрана из PBX. Actual pub get теперь успешно завершён (8.8s), native CocoaPods/build продолжается. Это локальная iOS9-сборка с изменениями в трёх source files, не утверждение неизменного upstream binary. Markdown/Git implementation сохранён.
### GitJournal: итоговая успешная сборка и установка
Следующий compiler pass выявил три ошибки: отсутствующий generated `lib/.env.dart`, removed `Platform.packageRoot` у platform3.0.0 на Dart2.16, несовместимый PointerEvent callback у photo_view0.11.1 на Flutter2.10. Исправлено:
- `platform: 3.1.0`, `photo_view: 0.13.0` — официальные pub.dev packages с SDK >=2.12 <3; API photo_view customChild, используемый приложением, сохранился. Versions/compatible callback проверены по опубликованному archive source.
- Helper исполняет просмотренный upstream `scripts/setup_env.dart` с `SENTRY_DSN=''`, генерируя пустой локальный config; настоящие credentials не искались. Sentry endpoint не задан.
- All four Git dependency refs явно закреплены из original lock; `ext_storage` взят с pub.dev1.0.3. Firebase analytics отключён. Final Dart/iOS lockfiles скопированы в host checkout.
Final pass `RUN_ID=20261015T003500Z` завершился **BUILD SUCCEEDED**, SDK15.5, ARCHSarmv7, target9.3, Apple codesigning disabled. Archive `gitjournal-export-20261015.tar.gz` экспортирован на Mac; directory `exported-editors/GitJournal` содержит app, build/dependency/configure logs, exact revisions/toolchain/Flutter version, used lockfiles, generated PBX/scheme, empty env и `compatibility.patch`. Различия tracked source включают два final lockfiles и три source files; оригинальная revision50dfb2d сохраняется отдельно.
```sh
python3 /Users/admin/Developer/ipad-editors/package-fake-signed.py \
/Users/admin/Developer/ipad-editors/exported-editors/GitJournal/Runner.app \
/Users/admin/Developer/ipad-editors/packages/GitJournal-20261015 \
--entitlements /Users/admin/Developer/ipad-editors/GitJournal/ios/Runner/Runner.entitlements
ideviceinstaller -u "$UDID" install \
/Users/admin/Developer/ipad-editors/packages/GitJournal-20261015/Runner.ipa
ideviceinstaller -u "$UDID" list -b io.gitjournal.gitjournal \
-a CFBundleIdentifier -a CFBundleDisplayName -a MinimumOSVersion -a CFBundleVersion
idevicedebug -u "$UDID" --detach run io.gitjournal.gitjournal
idevicescreenshot -u "$UDID" /Users/admin/Developer/ipad-editors/GitJournal-first-launch.png
```
Fake-sign verification проверил **49 Mach-O**: все armv7, minimum7.0 /9.0 /9.3, main/extension entitlements прочитаны обратно. Отсутствие target bundle перед install подтверждено; install Complete/exit0, metadata io.gitjournal.gitjournal /GitJournal /9.3 /10. Detached launch exit0, screenshot просмотрен: GitJournal onboarding `An Open Source Note Taking App built on top of Git`, кнопки Skip/Next. Это проверка запуска, а не реального remote sync: vault, account, clone/push и iCloud/ShareExtension отдельно не тестировались.
Все оставшиеся worker diagnostics и exact x86_64 Gemfile.lock также экспортированы в `diagnostics-20261015.tar.gz` / `exported-diagnostics`. Процесс сборки/деплоя закончен для четырёх совместимых вариантов; full fork holzschu остаётся архитектурно несовместимым с mini1 в имеющемся бинарном dependency наборе.
После явного поручения пользователя «Monterrey релизь если больше не нужен» выполнен release только `lease-9c1a94ff2b56b396fee7f1bbd2e0dcea`, idempotency `ipad-editors-release-20261015-9c1a94ff`. Cleanup `job-efbdecc8f058d3b33ab55a2e03c2b448` succeeded в 2026-10-14T18:51:19.492842Z; lease released, runtime не содержит этой VM. Golden image-f8c888… остаётся image_ready. Final reproducible source payload `worker-input-final-20261015.tar.gz` содержит все compatibility patches; Flutter SDK архив хранится отдельно. Дополнительных release/recovery вне собственной Monterey VM не выполнялось.
## Обновление: vault sync настроен 2026-10-15
После отдельного поручения пользователя настроен native Git2.8.1→TrueNAS bare SSH→launchd300s клиент от mobile, vault в Documents Edhita/ObsidianVault. Dedicated Ed25519 key ограничен exact vault Git operations и persisted в TrueNAS user settings. Actual push iPad→NAS и automatic pull NAS→iPad подтверждены; два последовательных scheduled ticks прошли exit0, позднейший третий также ok. Isolated native tests подтвердили offline сохранение/retry и stale empty lock recovery. Обработка конфликтов приведена к Mac-скрипту 2026-10-15: маркеры с обеими версиями коммитятся с `review needed` и пушатся; следующий синк и возобновление прерванного merge проверены на iPad. Folder виден в Edhita. Это заменяет прежний build-only checkpoint о ненастроенном синке; собственного GitJournal remote эта настройка не касается. Полная актуальная инструкция: [[personal/how-to/ipad-vault-sync]].