Files
obsidian-vault/personal/how-to/ipad-ios935-build-deploy.md
T
2026-10-15 09:50:58 +00:00

37 KiB
Executable File
Raw Blame History

title, created, updated, tags
title created updated tags
iPad iOS 9.3.5 — сборка редакторов, fake sign и деплой 2026-10-14 2026-10-15
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):

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

Проверенный вход по ключу:

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 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. Исходные Xcode targets задают 10.1; override 9.3 проверен успешной сборкой и запуском на iPad 9.3.5. 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 и не подходит.

Дополнительно найден и скачан официальный terrychou/iVim, 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. Для 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, 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 фактически выполнено:

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 не проверена.

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 проверено; другие приложения/документы не удалялись. Исполненные команды:

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: архив 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:

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 также заработал:

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 сохраняется отдельно.

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.