@kood/claude-code 0.6.6 → 0.6.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +7 -1
- package/package.json +1 -1
- package/templates/.claude/agents/researcher.md +8 -1
- package/templates/.claude/instructions/sourcing/reliable-search.md +49 -2
- package/templates/.claude/skills/docs-fetch/SKILL.md +5 -4
- package/templates/.claude/skills/project-optimizer/AGENTS.md +275 -0
- package/templates/.claude/skills/project-optimizer/SKILL.md +374 -0
- package/templates/.claude/skills/project-optimizer/rules/arch-config-centralize.md +66 -0
- package/templates/.claude/skills/project-optimizer/rules/arch-hot-path.md +35 -0
- package/templates/.claude/skills/project-optimizer/rules/arch-interface-segregation.md +51 -0
- package/templates/.claude/skills/project-optimizer/rules/arch-module-boundary.md +42 -0
- package/templates/.claude/skills/project-optimizer/rules/build-cache.md +57 -0
- package/templates/.claude/skills/project-optimizer/rules/build-code-split.md +56 -0
- package/templates/.claude/skills/project-optimizer/rules/build-incremental.md +65 -0
- package/templates/.claude/skills/project-optimizer/rules/build-minify.md +61 -0
- package/templates/.claude/skills/project-optimizer/rules/build-tree-shake.md +60 -0
- package/templates/.claude/skills/project-optimizer/rules/code-complexity.md +65 -0
- package/templates/.claude/skills/project-optimizer/rules/code-dead-elimination.md +32 -0
- package/templates/.claude/skills/project-optimizer/rules/code-duplication.md +54 -0
- package/templates/.claude/skills/project-optimizer/rules/code-error-handling.md +75 -0
- package/templates/.claude/skills/project-optimizer/rules/code-naming.md +52 -0
- package/templates/.claude/skills/project-optimizer/rules/concurrency-defer-await.md +54 -0
- package/templates/.claude/skills/project-optimizer/rules/concurrency-parallel.md +90 -0
- package/templates/.claude/skills/project-optimizer/rules/concurrency-pipeline.md +68 -0
- package/templates/.claude/skills/project-optimizer/rules/concurrency-pool.md +68 -0
- package/templates/.claude/skills/project-optimizer/rules/deps-lightweight-alt.md +37 -0
- package/templates/.claude/skills/project-optimizer/rules/deps-peer-align.md +44 -0
- package/templates/.claude/skills/project-optimizer/rules/deps-security-audit.md +45 -0
- package/templates/.claude/skills/project-optimizer/rules/deps-unused-removal.md +25 -0
- package/templates/.claude/skills/project-optimizer/rules/deps-version-pin.md +40 -0
- package/templates/.claude/skills/project-optimizer/rules/dx-ci-speed.md +47 -0
- package/templates/.claude/skills/project-optimizer/rules/dx-dev-server.md +35 -0
- package/templates/.claude/skills/project-optimizer/rules/dx-lint-config.md +36 -0
- package/templates/.claude/skills/project-optimizer/rules/dx-test-coverage.md +34 -0
- package/templates/.claude/skills/project-optimizer/rules/dx-type-safety.md +49 -0
- package/templates/.claude/skills/project-optimizer/rules/io-batch-queries.md +67 -0
- package/templates/.claude/skills/project-optimizer/rules/io-cache-layer.md +67 -0
- package/templates/.claude/skills/project-optimizer/rules/io-connection-reuse.md +67 -0
- package/templates/.claude/skills/project-optimizer/rules/io-serialize-minimal.md +61 -0
- package/templates/.claude/skills/project-optimizer/rules/io-stream.md +75 -0
- package/templates/.claude/skills/project-optimizer/rules/memory-bounded-cache.md +65 -0
- package/templates/.claude/skills/project-optimizer/rules/memory-large-data.md +64 -0
- package/templates/.claude/skills/project-optimizer/rules/memory-lazy-init.md +78 -0
- package/templates/.claude/skills/project-optimizer/rules/memory-leak-prevention.md +79 -0
- package/templates/.claude/skills/project-optimizer/rules/memory-pool-reuse.md +70 -0
- package/templates/.claude/skills/sql-optimizer/SKILL.md +437 -0
- package/templates/.claude/skills/sql-optimizer/orm-patterns.md +218 -0
- package/templates/.claude/skills/tanstack-start-react-best-practices/AGENTS.md +53 -14
- package/templates/.claude/skills/tanstack-start-react-best-practices/SKILL.md +93 -27
- package/templates/.claude/skills/tanstack-start-react-best-practices/rules/bundle-defer-third-party.md +42 -19
- package/templates/.claude/skills/tanstack-start-react-best-practices/rules/client-optimistic-updates.md +109 -0
- package/templates/.claude/skills/tanstack-start-react-best-practices/rules/client-suspense-query.md +74 -0
- package/templates/.claude/skills/tanstack-start-react-best-practices/rules/client-use-hook.md +81 -0
- package/templates/.claude/skills/tanstack-start-react-best-practices/rules/rerender-react-compiler.md +81 -0
- package/templates/.claude/skills/tanstack-start-react-best-practices/rules/routing-beforeload-auth.md +121 -0
- package/templates/.claude/skills/tanstack-start-react-best-practices/rules/routing-file-conventions.md +104 -0
- package/templates/.claude/skills/tanstack-start-react-best-practices/rules/routing-link-navigation.md +119 -0
- package/templates/.claude/skills/tanstack-start-react-best-practices/rules/routing-nested-layouts.md +155 -0
- package/templates/.claude/skills/tanstack-start-react-best-practices/rules/routing-path-params.md +89 -0
- package/templates/.claude/skills/tanstack-start-react-best-practices/rules/routing-pending-component.md +110 -0
- package/templates/.claude/skills/tanstack-start-react-best-practices/rules/routing-preload-strategy.md +91 -0
- package/templates/.claude/skills/tanstack-start-react-best-practices/rules/routing-router-context.md +120 -0
- package/templates/.claude/skills/tanstack-start-react-best-practices/rules/routing-search-params.md +114 -0
- package/templates/.claude/skills/tanstack-start-react-best-practices/rules/server-deferred-data.md +1 -1
- package/templates/.claude/skills/tanstack-start-react-best-practices/rules/server-error-boundaries.md +79 -0
- package/templates/.claude/skills/tanstack-start-react-best-practices/rules/server-middleware.md +85 -0
- package/templates/.claude/skills/tanstack-start-react-best-practices/rules/server-serialization.md +56 -21
- package/templates/.claude/skills/tanstack-start-react-best-practices/rules/server-streaming.md +84 -0
- package/templates/.claude/skills/tanstack-start-react-best-practices/rules/server-validator.md +71 -0
- package/templates/.claude/skills/tauri-react-best-practices/AGENTS.md +527 -0
- package/templates/.claude/skills/tauri-react-best-practices/SKILL.md +570 -0
- package/templates/.claude/skills/tauri-react-best-practices/rules/bundle-barrel-imports.md +140 -0
- package/templates/.claude/skills/tauri-react-best-practices/rules/bundle-cargo-profile.md +96 -0
- package/templates/.claude/skills/tauri-react-best-practices/rules/bundle-frontend-treeshake.md +242 -0
- package/templates/.claude/skills/tauri-react-best-practices/rules/bundle-lazy-components.md +255 -0
- package/templates/.claude/skills/tauri-react-best-practices/rules/bundle-remove-unused-commands.md +160 -0
- package/templates/.claude/skills/tauri-react-best-practices/rules/deploy-ci-pipeline.md +269 -0
- package/templates/.claude/skills/tauri-react-best-practices/rules/deploy-signing.md +207 -0
- package/templates/.claude/skills/tauri-react-best-practices/rules/deploy-updater.md +226 -0
- package/templates/.claude/skills/tauri-react-best-practices/rules/ipc-async-commands.md +172 -0
- package/templates/.claude/skills/tauri-react-best-practices/rules/ipc-batch-commands.md +133 -0
- package/templates/.claude/skills/tauri-react-best-practices/rules/ipc-binary-response.md +198 -0
- package/templates/.claude/skills/tauri-react-best-practices/rules/ipc-channel-streaming.md +186 -0
- package/templates/.claude/skills/tauri-react-best-practices/rules/ipc-error-handling.md +250 -0
- package/templates/.claude/skills/tauri-react-best-practices/rules/ipc-type-safe.md +227 -0
- package/templates/.claude/skills/tauri-react-best-practices/rules/perf-derived-state.md +231 -0
- package/templates/.claude/skills/tauri-react-best-practices/rules/perf-functional-setstate.md +191 -0
- package/templates/.claude/skills/tauri-react-best-practices/rules/perf-index-maps.md +276 -0
- package/templates/.claude/skills/tauri-react-best-practices/rules/perf-lazy-state-init.md +196 -0
- package/templates/.claude/skills/tauri-react-best-practices/rules/plugin-lifecycle.md +265 -0
- package/templates/.claude/skills/tauri-react-best-practices/rules/plugin-mobile-compat.md +199 -0
- package/templates/.claude/skills/tauri-react-best-practices/rules/plugin-permission-scope.md +193 -0
- package/templates/.claude/skills/tauri-react-best-practices/rules/react-error-boundary.md +239 -0
- package/templates/.claude/skills/tauri-react-best-practices/rules/react-event-listener.md +151 -0
- package/templates/.claude/skills/tauri-react-best-practices/rules/react-file-src.md +155 -0
- package/templates/.claude/skills/tauri-react-best-practices/rules/react-invoke-hook.md +139 -0
- package/templates/.claude/skills/tauri-react-best-practices/rules/react-optimistic-update.md +211 -0
- package/templates/.claude/skills/tauri-react-best-practices/rules/security-capability-split.md +205 -0
- package/templates/.claude/skills/tauri-react-best-practices/rules/security-csp.md +207 -0
- package/templates/.claude/skills/tauri-react-best-practices/rules/security-least-privilege.md +106 -0
- package/templates/.claude/skills/tauri-react-best-practices/rules/security-no-wildcard.md +253 -0
- package/templates/.claude/skills/tauri-react-best-practices/rules/security-scope-paths.md +160 -0
- package/templates/.claude/skills/tauri-react-best-practices/rules/state-async-mutex.md +270 -0
- package/templates/.claude/skills/tauri-react-best-practices/rules/state-mutex-pattern.md +265 -0
- package/templates/.claude/skills/tauri-react-best-practices/rules/state-react-sync.md +375 -0
- package/templates/.claude/skills/tauri-react-best-practices/rules/state-single-container.md +275 -0
- package/templates/tanstack-start/docs/architecture.md +238 -167
- package/templates/tanstack-start/docs/library/tanstack-router/error-handling.md +777 -38
- package/templates/tanstack-start/docs/library/tanstack-router/hooks.md +549 -37
- package/templates/tanstack-start/docs/library/tanstack-router/index.md +895 -111
- package/templates/tanstack-start/docs/library/tanstack-router/navigation.md +641 -43
- package/templates/tanstack-start/docs/library/tanstack-router/route-context.md +889 -38
- package/templates/tanstack-start/docs/library/tanstack-router/search-params.md +891 -29
- package/templates/tanstack-start/docs/library/tanstack-start/auth-patterns.md +972 -36
- package/templates/tanstack-start/docs/library/tanstack-start/index.md +1525 -881
- package/templates/tanstack-start/docs/library/tanstack-start/middleware.md +1099 -20
- package/templates/tanstack-start/docs/library/tanstack-start/routing.md +796 -30
- package/templates/tanstack-start/docs/library/tanstack-start/server-functions.md +953 -35
- package/templates/tanstack-start/docs/library/tanstack-start/setup.md +371 -15
- package/templates/tauri/CLAUDE.md +189 -0
- package/templates/tauri/docs/guides/distribution.md +261 -0
- package/templates/tauri/docs/guides/getting-started.md +302 -0
- package/templates/tauri/docs/guides/mobile.md +288 -0
- package/templates/tauri/docs/library/tauri/index.md +510 -0
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
# Mobile Development
|
|
2
|
+
|
|
3
|
+
> Tauri v2 iOS & Android 모바일 개발 가이드
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## iOS Prerequisites (macOS 전용)
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
# 1. Xcode 설치 (App Store → 실행하여 초기 설정 완료)
|
|
11
|
+
|
|
12
|
+
# 2. iOS Rust 타겟 추가
|
|
13
|
+
rustup target add aarch64-apple-ios x86_64-apple-ios aarch64-apple-ios-sim
|
|
14
|
+
|
|
15
|
+
# 3. Homebrew 설치 (없는 경우)
|
|
16
|
+
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
|
|
17
|
+
|
|
18
|
+
# 4. CocoaPods 설치
|
|
19
|
+
brew install cocoapods
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
**중요:** iOS 개발은 macOS에서만 가능합니다.
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Android Prerequisites
|
|
27
|
+
|
|
28
|
+
### 1. Android Studio 설치
|
|
29
|
+
|
|
30
|
+
[Android Developer](https://developer.android.com/studio) 에서 다운로드
|
|
31
|
+
|
|
32
|
+
### 2. 환경 변수 설정
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
# ~/.bashrc 또는 ~/.zshrc
|
|
36
|
+
export JAVA_HOME="/Applications/Android Studio.app/Contents/jbr/Contents/Home"
|
|
37
|
+
# Windows: C:\Program Files\Android\Android Studio\jbr
|
|
38
|
+
# Linux: /opt/android-studio/jbr
|
|
39
|
+
|
|
40
|
+
export ANDROID_HOME="$HOME/Android/Sdk"
|
|
41
|
+
# macOS: $HOME/Library/Android/sdk
|
|
42
|
+
# Windows: %LOCALAPPDATA%\Android\Sdk
|
|
43
|
+
|
|
44
|
+
export NDK_HOME="$ANDROID_HOME/ndk/$(ls -1 $ANDROID_HOME/ndk)"
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### 3. SDK Manager 설정 (Android Studio)
|
|
48
|
+
|
|
49
|
+
SDK Manager에서 설치:
|
|
50
|
+
- Android SDK Platform (최신)
|
|
51
|
+
- Android SDK Platform-Tools
|
|
52
|
+
- NDK (Side by side)
|
|
53
|
+
- Android SDK Build-Tools
|
|
54
|
+
- Android SDK Command-line Tools
|
|
55
|
+
|
|
56
|
+
### 4. Rust 타겟 추가
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
rustup target add aarch64-linux-android armv7-linux-androideabi i686-linux-android x86_64-linux-android
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## 프로젝트 초기화
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
# iOS 프로젝트 초기화
|
|
68
|
+
npx tauri ios init
|
|
69
|
+
|
|
70
|
+
# Android 프로젝트 초기화
|
|
71
|
+
npx tauri android init
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
**생성되는 파일:**
|
|
75
|
+
```
|
|
76
|
+
src-tauri/
|
|
77
|
+
├── gen/
|
|
78
|
+
│ ├── apple/ # Xcode 프로젝트
|
|
79
|
+
│ └── android/ # Android Studio 프로젝트
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## 개발 모드
|
|
85
|
+
|
|
86
|
+
### iOS
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
# 시뮬레이터에서 실행
|
|
90
|
+
npx tauri ios dev
|
|
91
|
+
|
|
92
|
+
# Xcode에서 열기 (디바이스 선택, 디버깅)
|
|
93
|
+
npx tauri ios dev --open
|
|
94
|
+
|
|
95
|
+
# 물리 디바이스 연결 시 IP 지정
|
|
96
|
+
npx tauri ios dev --host
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
**Web Inspector:** Safari → Develop 메뉴 → 디바이스/시뮬레이터 선택
|
|
100
|
+
|
|
101
|
+
### Android
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
# 에뮬레이터에서 실행
|
|
105
|
+
npx tauri android dev
|
|
106
|
+
|
|
107
|
+
# Android Studio에서 열기
|
|
108
|
+
npx tauri android dev --open
|
|
109
|
+
|
|
110
|
+
# 물리 디바이스 연결 시
|
|
111
|
+
npx tauri android dev --host
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
**Web Inspector:** Chrome → `chrome://inspect` → Remote Devices
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## 모바일 빌드
|
|
119
|
+
|
|
120
|
+
### iOS
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
# 릴리스 빌드 (IPA)
|
|
124
|
+
npx tauri ios build
|
|
125
|
+
|
|
126
|
+
# App Store 제출용
|
|
127
|
+
npx tauri ios build --export-method app-store-connect
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
**IPA 위치:** `src-tauri/gen/apple/build/arm64/$APPNAME.ipa`
|
|
131
|
+
|
|
132
|
+
### Android
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
# AAB (Google Play 권장)
|
|
136
|
+
npx tauri android build -- --aab
|
|
137
|
+
|
|
138
|
+
# APK (사이드로딩/테스트)
|
|
139
|
+
npx tauri android build -- --apk
|
|
140
|
+
|
|
141
|
+
# 특정 아키텍처만
|
|
142
|
+
npx tauri android build -- --aab --target aarch64
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
**AAB 위치:** `gen/android/app/build/outputs/bundle/universalRelease/app-universal-release.aab`
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
## 플랫폼별 설정
|
|
150
|
+
|
|
151
|
+
```json
|
|
152
|
+
// tauri.android.conf.json (Android 전용 오버라이드)
|
|
153
|
+
{
|
|
154
|
+
"bundle": {
|
|
155
|
+
"android": {
|
|
156
|
+
"minSdkVersion": 24,
|
|
157
|
+
"versionCode": 1
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
```json
|
|
164
|
+
// tauri.ios.conf.json (iOS 전용 오버라이드)
|
|
165
|
+
{
|
|
166
|
+
"bundle": {
|
|
167
|
+
"iOS": {}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
## 앱 아이콘
|
|
175
|
+
|
|
176
|
+
```bash
|
|
177
|
+
# 플랫폼 초기화 후 아이콘 생성
|
|
178
|
+
npx tauri icon /path/to/app-icon.png
|
|
179
|
+
|
|
180
|
+
# iOS 배경색 지정
|
|
181
|
+
npx tauri icon /path/to/app-icon.png -- --ios-color '#ffffff'
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
**권장:** 1024x1024 PNG, 알파 채널 포함
|
|
185
|
+
|
|
186
|
+
---
|
|
187
|
+
|
|
188
|
+
## 앱 배포
|
|
189
|
+
|
|
190
|
+
### iOS App Store
|
|
191
|
+
|
|
192
|
+
1. **Apple Developer Program** 등록 ($99/년)
|
|
193
|
+
2. **App Store Connect** 에서 앱 등록 (Bundle ID = `tauri.conf.json > identifier`)
|
|
194
|
+
3. **코드 서명** 설정
|
|
195
|
+
|
|
196
|
+
```bash
|
|
197
|
+
# App Store용 빌드
|
|
198
|
+
npx tauri ios build --export-method app-store-connect
|
|
199
|
+
|
|
200
|
+
# App Store Connect API 키 설정
|
|
201
|
+
# AuthKey_<KEY_ID>.p8 → ~/.appstoreconnect/private_keys/
|
|
202
|
+
|
|
203
|
+
# 업로드
|
|
204
|
+
xcrun altool --upload-app --type ios \
|
|
205
|
+
--file "src-tauri/gen/apple/build/arm64/$APPNAME.ipa" \
|
|
206
|
+
--apiKey $APPLE_API_KEY_ID --apiIssuer $APPLE_API_ISSUER
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
### Google Play
|
|
210
|
+
|
|
211
|
+
1. **Play Console** 개발자 계정 생성
|
|
212
|
+
2. **앱 등록** 후 코드 서명 설정
|
|
213
|
+
|
|
214
|
+
```bash
|
|
215
|
+
# AAB 빌드
|
|
216
|
+
npx tauri android build -- --aab
|
|
217
|
+
|
|
218
|
+
# 번들 위치
|
|
219
|
+
# gen/android/app/build/outputs/bundle/universalRelease/app-universal-release.aab
|
|
220
|
+
# Play Console에서 수동 업로드 (첫 번째 릴리스)
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
---
|
|
224
|
+
|
|
225
|
+
## Mobile Plugin 개발
|
|
226
|
+
|
|
227
|
+
### 아키텍처
|
|
228
|
+
|
|
229
|
+
```
|
|
230
|
+
plugin/
|
|
231
|
+
├── src/
|
|
232
|
+
│ ├── lib.rs # 공유 로직
|
|
233
|
+
│ ├── desktop.rs # 데스크톱 구현
|
|
234
|
+
│ └── mobile.rs # 모바일 브릿지
|
|
235
|
+
├── android/
|
|
236
|
+
│ └── src/.../MyPlugin.kt # Kotlin 구현
|
|
237
|
+
└── ios/
|
|
238
|
+
└── Sources/MyPlugin.swift # Swift 구현
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
### Android (Kotlin)
|
|
242
|
+
|
|
243
|
+
```kotlin
|
|
244
|
+
@TauriPlugin
|
|
245
|
+
class MyPlugin : Plugin() {
|
|
246
|
+
@Command
|
|
247
|
+
fun doSomething(invoke: Invoke) {
|
|
248
|
+
// 블로킹 I/O → 별도 스레드 필수
|
|
249
|
+
CoroutineScope(Dispatchers.IO).launch {
|
|
250
|
+
val result = heavyWork()
|
|
251
|
+
val ret = JSObject()
|
|
252
|
+
ret.put("data", result)
|
|
253
|
+
invoke.resolve(ret)
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
### iOS (Swift)
|
|
260
|
+
|
|
261
|
+
```swift
|
|
262
|
+
public class MyPlugin: Plugin {
|
|
263
|
+
@objc public func doSomething(_ invoke: Invoke) throws {
|
|
264
|
+
let result = heavyWork()
|
|
265
|
+
invoke.resolve(["data": result])
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
### Rust에서 호출
|
|
271
|
+
|
|
272
|
+
```rust
|
|
273
|
+
// mobile.rs
|
|
274
|
+
self.0.run_mobile_plugin("doSomething", payload)
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
---
|
|
278
|
+
|
|
279
|
+
## 모바일 개발 팁
|
|
280
|
+
|
|
281
|
+
| 항목 | 설명 |
|
|
282
|
+
|------|------|
|
|
283
|
+
| **HMR** | 프론트엔드 변경 → 모바일에서도 즉시 반영 |
|
|
284
|
+
| **Rust HMR** | Rust 코드 변경 → 자동 재컴파일 |
|
|
285
|
+
| **첫 빌드** | Rust 패키지 다운로드로 수 분 소요 (이후 캐싱) |
|
|
286
|
+
| **Android 메인 스레드** | 블로킹 I/O → UI 프리징, Coroutine 사용 필수 |
|
|
287
|
+
| **iOS macOS 전용** | iOS 개발/빌드는 macOS에서만 가능 |
|
|
288
|
+
| **최소 Android** | SDK 24 (Android 7.0) |
|