@kood/claude-code 0.6.6 → 0.7.0
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/analyst.md +5 -0
- package/templates/.claude/agents/architect.md +5 -0
- package/templates/.claude/agents/build-fixer.md +1 -0
- package/templates/.claude/agents/code-reviewer.md +1 -0
- package/templates/.claude/agents/critic.md +4 -0
- package/templates/.claude/agents/deep-executor.md +1 -0
- package/templates/.claude/agents/dependency-manager.md +2 -0
- package/templates/.claude/agents/deployment-validator.md +2 -0
- package/templates/.claude/agents/designer.md +2 -0
- package/templates/.claude/agents/document-writer.md +3 -0
- package/templates/.claude/agents/explore.md +1 -0
- package/templates/.claude/agents/git-operator.md +2 -0
- package/templates/.claude/agents/implementation-executor.md +2 -0
- package/templates/.claude/agents/ko-to-en-translator.md +3 -0
- package/templates/.claude/agents/lint-fixer.md +2 -0
- package/templates/.claude/agents/planner.md +3 -0
- package/templates/.claude/agents/pm.md +349 -0
- package/templates/.claude/agents/qa-tester.md +1 -0
- package/templates/.claude/agents/refactor-advisor.md +4 -0
- package/templates/.claude/agents/researcher.md +9 -1
- package/templates/.claude/agents/scientist.md +1 -0
- package/templates/.claude/agents/security-reviewer.md +1 -0
- package/templates/.claude/agents/tdd-guide.md +1 -0
- package/templates/.claude/agents/vision.md +1 -0
- package/templates/.claude/instructions/agent-patterns/agent-teams-usage.md +376 -0
- package/templates/.claude/instructions/sourcing/reliable-search.md +49 -2
- package/templates/.claude/scripts/agent-teams/check-availability.sh +238 -0
- package/templates/.claude/scripts/agent-teams/setup-tmux.sh +125 -0
- package/templates/.claude/skills/agent-teams-setup/SKILL.md +460 -0
- package/templates/.claude/skills/brainstorm/SKILL.md +1 -0
- package/templates/.claude/skills/bug-fix/SKILL.md +1 -0
- package/templates/.claude/skills/crawler/SKILL.md +2 -0
- package/templates/.claude/skills/docs-creator/SKILL.md +1 -0
- package/templates/.claude/skills/docs-fetch/SKILL.md +6 -4
- package/templates/.claude/skills/docs-refactor/SKILL.md +1 -0
- package/templates/.claude/skills/elon-musk/SKILL.md +1 -0
- package/templates/.claude/skills/execute/SKILL.md +1 -0
- package/templates/.claude/skills/feedback/SKILL.md +1 -0
- package/templates/.claude/skills/figma-to-code/SKILL.md +1 -0
- package/templates/.claude/skills/genius-thinking/SKILL.md +1 -0
- package/templates/.claude/skills/global-uiux-design/SKILL.md +1 -0
- package/templates/.claude/skills/korea-uiux-design/SKILL.md +1 -0
- package/templates/.claude/skills/nextjs-react-best-practices/SKILL.md +1 -0
- package/templates/.claude/skills/plan/SKILL.md +1 -0
- package/templates/.claude/skills/prd/SKILL.md +1 -0
- package/templates/.claude/skills/project-optimizer/AGENTS.md +275 -0
- package/templates/.claude/skills/project-optimizer/SKILL.md +375 -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/ralph/SKILL.md +1 -0
- package/templates/.claude/skills/refactor/SKILL.md +1 -0
- package/templates/.claude/skills/research/SKILL.md +1 -0
- package/templates/.claude/skills/sql-optimizer/SKILL.md +438 -0
- package/templates/.claude/skills/sql-optimizer/orm-patterns.md +218 -0
- package/templates/.claude/skills/startup-validator/SKILL.md +1 -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 +94 -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 +571 -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) |
|