3.1 KiB
title, created, updated, last_synced, type, namespace, tags, confidence
| title | created | updated | last_synced | type | namespace | tags | confidence | |||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| reflect-skip Skip Fuse — Pitfalls | 2026-05-20 | 2026-05-22 | 2026-05-22 | reference | personal |
|
0.9 |
reflect-skip Skip Fuse — Adding a New SwiftUI View
Problem
При добавлении нового SwiftUI View-файла в Sources/ReflectApp/Views/ Skip Fuse не создаёт Kotlin-стаб автоматически. Приложение крашится с ClassNotFoundException при запуске.
Fix — создать Kotlin-стаб вручную
Нужно создать стаб в обоих местах:
DerivedData/.../reflect-skip.output/ReflectApp/skipstone/ReflectApp/src/main/kotlin/reflect/app/.build/plugins/outputs/reflect-skip/ReflectApp/destination/skipstone/ReflectApp/src/main/kotlin/reflect/app/
Шаблон: скопировать OnboardingView.kt, заменить:
- Имя класса
@Statevars
Constructor принимает closure-параметры.
После создания стабов:
skip gradle assembleDebug
Package.swift — обязательная структура
Без этих секций Xcode падает с "Missing package product 'ReflectApp'":
// 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→ инлайнить в тело ViewPRODUCT_NAME=ReflectAppв Build Settings не менять@AppStorageполя добавлять вручную в Kotlin-стаб
Deploy & Signing
# 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)