--- title: reflect-skip Skip Fuse — Pitfalls created: '2026-05-20' updated: '2026-05-22' last_synced: '2026-05-22' type: reference namespace: personal tags: - reflect - skip - swiftui - kotlin - pitfall confidence: 0.9 --- # reflect-skip Skip Fuse — Adding a New SwiftUI View ## Problem При добавлении нового SwiftUI View-файла в `Sources/ReflectApp/Views/` Skip Fuse **не создаёт Kotlin-стаб автоматически**. Приложение крашится с `ClassNotFoundException` при запуске. ## Fix — создать Kotlin-стаб вручную Нужно создать стаб в **обоих** местах: 1. `DerivedData/.../reflect-skip.output/ReflectApp/skipstone/ReflectApp/src/main/kotlin/reflect/app/` 2. `.build/plugins/outputs/reflect-skip/ReflectApp/destination/skipstone/ReflectApp/src/main/kotlin/reflect/app/` **Шаблон:** скопировать `OnboardingView.kt`, заменить: - Имя класса - `@State` vars Constructor принимает closure-параметры. После создания стабов: ```bash skip gradle assembleDebug ``` ## Package.swift — обязательная структура Без этих секций Xcode падает с "Missing package product 'ReflectApp'": ```swift // Package.swift — обязательные поля dependencies: [ .package(url: "https://source.skip.tools/skip.git", from: "1.8.9"), .package(url: "https://source.skip.tools/skip-fuse.git", from: "1.0.0"), .package(url: "https://source.skip.tools/skip-fuse-ui.git", from: "1.0.0"), ], targets: [ .target( name: "ReflectApp", path: "Sources/ReflectApp", dependencies: [ .product(name: "SkipFuse", package: "skip-fuse"), .product(name: "SkipFuseUI", package: "skip-fuse-ui"), ], plugins: [.plugin(name: "skipstone", package: "skip")] ) ] ``` **Pitfall:** нужны оба: `skip-fuse` (runtime) + `skip-fuse-ui` (SwiftUI overlay для Android). Ранее была попытка использовать `skip-ui` вместо `skip-fuse-ui` — это неверно, `skip-ui` не предоставляет `SwiftUI` модуль для Android-сборки и ломает full build с `no such module 'SwiftUI'`. ## Прочие питфоллы - `@State private` → менять на `internal` в Kotlin-стабе - `case none` в enum крашит JNI — избегать - `ViewModifier` → инлайнить в тело View - `PRODUCT_NAME=ReflectApp` в Build Settings не менять - `@AppStorage` поля добавлять вручную в Kotlin-стаб ## Deploy & Signing ```bash # Build and publish (~15s Gradle): ./build-and-publish.sh ``` Android signing keystore: `~/.android/signing/nolvu-release.jks` (alias: nolvu2026) ## Проект `~/Developer/reflect-skip` ## Связанные страницы - [[tech/hermes-eagle-mac]] — Hermes на Eagle, openclaw-claude-proxy - [[tech/hermes-docker-kraken]] — Hermes на Кракене (Docker)