[2026-05-22] taiga sync: .obsidian/community-plugins.json .obsidian/graph.json .obsidian/hotkeys.json .obsidian/plugins/obsidian-git/data.json .obsidian/plugins/obsidian-git/main.js
This commit is contained in:
@@ -1,91 +0,0 @@
|
||||
---
|
||||
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)
|
||||
Reference in New Issue
Block a user