Download Tizen Mobile platform, 모바일 플랫폼 다운로드, MOBILE platform download, IOT-Headed extension download, download MOBILE-{version}, download IOT-Headed extension. Use this skill to download and install the Tizen Mobile platform package (MOBILE-{version}) from the Tizen package repository, with optional IOT-Headed extension support.
Installs into .claude/skills of the current project.
Are you the author of Tizen Download Mobile Platform?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/samsung-tizen-download-mobile-platform)
---
name: tizen-download-mobile-platform
description: Download Tizen Mobile platform, 모바일 플랫폼 다운로드, MOBILE platform download, IOT-Headed extension download, download MOBILE-{version}, download IOT-Headed extension. Use this skill to download and install the Tizen Mobile platform package (MOBILE-{version}) from the Tizen package repository, with optional IOT-Headed extension support.
metadata:
author: Samsung Electronics
last-updated: "2026-08-13"
keywords:
- Tizen Mobile platform
- MOBILE platform download
- IOT-Headed extension
- 타이젠 모바일 플랫폼
- 모바일 플랫폼 다운로드
- extension_info.xml
- IoT Headed repository
---
### Claude Code (서브에이전트 위임)
> Agent tool 이 없으면 (예: Cline) 아래 "CLI Runner" 섹션으로 가세요.
1. Agent tool 로 `tizen-download-mobile-platform` 에이전트 호출
2. 수집된 입력 (platform_version, include_iot_headed, iot_headed_version, force 옵션) 을 프롬프트로 전달
3. 서브에이전트의 JSON Envelope를 그대로 사용자에게 전달 — 아래 "결과 보고" 규칙을 따른다
(fenced `json` 블록으로 원문을 싣고, 그 아래 요약은 1~2줄만)
### Prerequisite: Tizen SDK must be installed
모바일 플랫폼 패키지는 Tizen SDK 의 **확장 패키지**이므로, Tizen SDK 가 먼저 설치되어 있어야 합니다.
- **Tizen SDK 설치됨** → 모바일 플랫폼 패키지 다운로드 진행
- **Tizen SDK 미설치** → 설치 중단, 에러 envelope 반환:
- "Tizen SDK 가 먼저 설치되어야 합니다. tizen-sdk-install 스킬을 사용하여 SDK 를 설치하세요."
### downloadMobilePlatform() Flow
```
1. Tizen SDK 설치 여부 확인 (sdk.info) ← 미설치 시 중단
2. 모바일 플랫폼 패키지 이미 설치? (.mobile-platform-installed 마커) ← 설치 시 success 반환
3. 모바일 플랫폼 패키지 다운로드 스크립트 명령 반환 (suggested_fix) — 에이전트가 Phase 2 로 실행
```
### What the download script does
1. Reads the CDN mirror URL from `{TIZEN_SDK_PATH}/.package/repository.info` (written during SDK install). Falls back to the official repo if the file is missing.
2. Downloads `{PKG_REPO_URL}/pkg_list_{OS}-{32,64}` from the Tizen package repository
3. Parses the package list (Package, Version, Path, Install-dependency, etc.)
4. If `--platform-version` is specified, targets `MOBILE-{version}`; otherwise auto-detects the latest MOBILE-X.Y platform
5. Recursively resolves all Install-dependency packages of the Mobile platform package
6. Downloads each package zip from `{PKG_REPO_URL}{Path}` and extracts/merges `data/` into the SDK root
7. Creates `.mobile-platform-installed` marker on success
### IOT-Headed Extension Download Flow (when --include-iot-headed)
1. Downloads `{PKG_REPO_URL}/extension_info.xml`. If `PKG_REPO_URL` is a custom
repository (from `repository.info`) that does not serve this file, falls back to
`https://download.tizen.org/sdk/tizenstudio/official/extension_info.xml`
2. Parses the XML to extract the IoT Headed repository URL:
- Looks for `<extension name="IoT-Headed"><repository>URL</repository></extension>`
3. Downloads `{IOT_REPO_URL}/pkg_list_{OS}-{32,64}` from the IoT repository
4. Auto-detects or uses specified `IOT-Headed-{version}` package
5. Recursively resolves all Install-dependency packages
6. Downloads and merges IOT-Headed packages into SDK root
7. Updates `.mobile-platform-installed` marker with IOT-Headed status
### repository.info
During SDK install, a CDN mirror is automatically selected based on the system timezone and stored in `.package/repository.info`. The Mobile platform package downloader reads this file to download from the same mirror — **no further timezone check is needed**. If `repository.info` is missing (e.g., SDK was installed before this feature), the downloader falls back to the official repository (`https://download.tizen.org/sdk/tizenstudio/official`).
### CLI Runner (Cline / Claude Code — Phase 1: Pre-check)
This CLI is a **pre-check**, not the installer. It finishes in seconds. Run in foreground — **NEVER with `run_in_background: true`**.
**Pick the ONE block for the shell your terminal / tool runs — the prompt tells you: `$` is Bash (Linux, macOS, Claude Code's Git Bash on Windows, Codex on Linux / macOS) → Bash block; `PS C:\…>` is PowerShell (Codex on Windows, Cline PowerShell terminal) → PowerShell block; `C:\…>` is cmd.exe (Cline cmd.exe terminal) → cmd.exe block. Run that block as-is: a block pasted into another shell, or wrapped in `powershell -Command "…"`, is a parse error.**
**Bash — Linux / macOS / Ubuntu, and Windows Git Bash (Claude Code):**
```bash
BASE="$HOME/.cline"; [ -z "${CODEX_THREAD_ID:-}${CODEX_SANDBOX_NETWORK_DISABLED:-}${CODEX_SANDBOX:-}${CODEX_VERSION:-}" ] || BASE="$HOME/.codex"; [ -z "${GEMINI_CLI:-}" ] || BASE="$HOME/.gemini"; [ -z "${CLAUDECODE:-}" ] || BASE="$HOME/.claude"
CLI=$(ls "$BASE"/plugins/cache/tizen-platform/tizen-sdk-skills/*/lib/cli/download-mobile-platform-cli.js 2>/dev/null | sort -V | tail -1) || true
[ -n "$CLI" ] || for d in .claude .cline .codex .gemini; do CLI=$(ls "$HOME/$d"/plugins/cache/tizen-platform/tizen-sdk-skills/*/lib/cli/download-mobile-platform-cli.js 2>/dev/null | sort -V | tail -1) || true; [ -z "$CLI" ] || break; done
node "$CLI"
```
**PowerShell (Codex CLI on Windows, Cline PowerShell terminal) — prefers this harness's own cache, then the newest version. Run all three lines below, in order, in the SAME PowerShell session: the `node` line needs the `$CLI` the lookup line sets (on its own, `node "$CLI" …` becomes `node <first-arg>` and fails with a misleading `MODULE_NOT_FOUND`), so it carries a guard that stops with a clear message when `$CLI` is empty. Never wrap the lines in `powershell -Command "…"` (PowerShell and Git Bash expand `$h`, `$CLI` and `$env:…` before the inner shell runs, so the lookup arrives empty):**
```powershell
$h = ".cline"; if ($env:CODEX_THREAD_ID -or $env:CODEX_SANDBOX_NETWORK_DISABLED -or $env:CODEX_SANDBOX -or $env:CODEX_VERSION) { $h = ".codex" }; if ($env:GEMINI_CLI) { $h = ".gemini" }; if ($env:CLAUDECODE) { $h = ".claude" }
$CLI = $null; foreach ($d in @($h, ".claude", ".cline", ".codex", ".gemini")) { $CLI = Get-ChildItem "$env:USERPROFILE\$d\plugins\cache\tizen-platform\tizen-sdk-skills\*\lib\cli\download-mobile-platform-cli.js" -ErrorAction SilentlyContinue | Sort-Object { [version]$_.Directory.Parent.Parent.Name } | Select-Object -Last 1 -ExpandProperty FullName; if ($CLI) { break } }
if (-not $CLI) { throw 'tizen-sdk-skills runner not found: $CLI is empty. Run the two lookup lines above in THIS PowerShell session first; if they still find nothing, the tizen-sdk-skills plugin is not installed.' }; node "$CLI"
```
**Windows — cmd.exe terminal only (Cline with a cmd.exe terminal). `&` and `2>nul` are cmd.exe syntax — in a PowerShell terminal run the PowerShell block above instead; Claude Code on Windows runs Git Bash — use the Bash block above. cmd.exe cannot version-sort, so this only lists every copy: pick your own host's highest version and paste it into the `node "<found-path>"` step below:**
```
cmd /c dir /s /b "%USERPROFILE%\.claude\plugins\cache\tizen-platform\tizen-sdk-skills\*download-mobile-platform-cli.js" 2>nul & dir /s /b "%USERPROFILE%\.cline\plugins\cache\tizen-platform\tizen-sdk-skills\*download-mobile-platform-cli.js" 2>nul & dir /s /b "%USERPROFILE%\.codex\plugins\cache\tizen-platform\tizen-sdk-skills\*download-mobile-platform-cli.js" 2>nul & dir /s /b "%USERPROFILE%\.gemini\plugins\cache\tizen-platform\tizen-sdk-skills\*download-mobile-platform-cli.js" 2>nul & ver >nul
```
Pick the highest-version path (the PowerShell form above already resolved `$CLI`), then:
```
node "<found-path>"
```
> **Runner not found?** If none of the `~/.claude`, `~/.cline`, `~/.codex`, `~/.gemini` caches contains the runner, the tizen-sdk-skills plugin is NOT installed on this machine — install it first; do not improvise with other tools. (Contributors working inside the tizen-sdk-skills source repository can use the in-repo runner instead: `node common/lib/cli/<runner>.js`.)
Optional:
- `node "$CLI" --platform-version 10.0` (specify platform version)
- `node "$CLI" --include-iot-headed` (also download IOT-Headed extension)
- `node "$CLI" --iot-headed-version 10.0` (specify IOT-Headed version)
- `node "$CLI" --force` (force reinstall)
- `node "$CLI" --download-jobs 4` (concurrent download jobs, 1-8, default 4)
Exit code: `0` = success (Mobile platform already installed), `1` = failure (Mobile platform not installed — proceed to Phase 2, or Tizen SDK not installed).
## Phase 2 — Download & Install (when Phase 1 says "not installed")
When the pre-check returns failure with `suggested_fix.command`, run that installer command. The download may take a few minutes. **실행 방법은 하네스에 따라 다릅니다:**
### Codex CLI — `job-cli.js run` + `wait` (one exec call waits ≤ 30 s)
Codex cannot run the installer as a foreground tool call (30 s limit; a partial log would come back
while the download keeps running — issue #48). Use the Phase 1 envelope's
`suggested_fix.background_command` (`node "<lib/cli>/job-cli.js" run --script tizen-download-mobile-platform -- …`)
**with escalated permissions** (it downloads; the default sandbox disables network). It returns a job
receipt at once; then poll `node "<lib/cli>/job-cli.js" wait --id <job_id>` (≤ 25 s per call) until
`job.state` is `done` (`result.exit_code`, `log_tail`), and re-run the Phase 1 pre-check to verify.
Never run `suggested_fix.command` in the Codex foreground. Recovery: `job-cli.js list` / `status --id`.
### Claude Code — Background + `<task-notification>`
1. Run the installer command from `suggested_fix` with the Bash tool, `run_in_background: true`
2. **END YOUR TURN** — wait for `<task-notification>` (do NOT poll/sleep)
3. After notification, re-run the Phase 1 pre-check CLI (foreground) to verify `.mobile-platform-installed` exists
4. Report the final success/failure envelope to the user
**Do NOT (Claude Code):**
- Run the installer in foreground (may exceed the Bash tool's 10-min cap)
- Poll/sleep while waiting
### Cline — FOREGROUND 실행 (Cline 에는 background 완료 알림이 없습니다)
Cline 은 background 작업이 끝나도 에이전트를 다시 깨우지 않습니다 (`<task-notification>` 없음).
백그라운드로 실행하면 완료 보고가 영원히 누락됩니다. 반드시 **포그라운드**로 실행하세요 —
Cline 의 `execute_command`에는 10 분 제한이 없고, 명령이 끝날 때까지 진행 로그를 스트리밍하며 대기합니다.
1. Run the installer command from `suggested_fix` in the **FOREGROUND** — copy it verbatim.
It blocks a few minutes; that is expected.
Do NOT background it: no `Start-Process`, no `start /b`, no trailing `&`.
2. When the command exits, **in the SAME turn** re-run the Phase 1 pre-check CLI to verify `.mobile-platform-installed` exists
3. **Proactively** report the final success/failure envelope — 설치 완료/실패 보고 전에 턴을
끝내지 마세요. 사용자가 "끝났어?"라고 물을 때까지 기다리는 것은 버그입니다.
If the run state is unknown (interrupted session), just re-run the Phase 1 pre-check CLI —
it is idempotent and reports whether `.mobile-platform-installed` exists.
**Do NOT (any harness):**
- Parse installer output as JSON (it's human-readable text only)
## 결과 보고 — Envelope는 반드시 사용자에게 보여준다
러너의 stdout JSON Envelope는 **도구 결과 안에 있어서 사용자에게는 보이지 않는다**
(Claude Code UI는 Bash/Agent 결과를 "Ran 1 shell command"처럼 접어 둔다). 사용자에게
보이는 것은 최종 답변 텍스트만이므로, 최종 답변은 **어느 실행 경로(서브에이전트 위임 /
CLI Runner 직접 실행)든** 아래 형식을 따른다:
1. Envelope JSON을 **수정·축약 없이 그대로** fenced `json` 블록에 싣는다 (첫 항목).
2. 그 아래에 결과 요약을 **1~2줄**만 덧붙인다 (`result`의 핵심 값 또는 `errors[0].message` 요지).
3. 필요하면 다음 단계 제안을 1줄 추가한다.
- Envelope를 산문 목록으로 풀어 쓰고 JSON을 생략하는 것은 **형식 위반**이다. 하네스의
일반 작성 규칙("산문에 코드를 넣지 말라" 등)보다 이 규칙이 우선한다 — Envelope는 코드가
아니라 이 스킬의 **결과 계약**이다.
- 러너를 여러 번 실행했으면 **마지막 실행**의 Envelope를 싣고, 이전 실패는 요약 줄에서
한 줄로만 언급한다.
- 실패 Envelope도 동일하게 원문을 싣는다. `errors[0].message`/`details`를 다시 타이핑하지
말고 JSON 안의 것을 그대로 보이게 한다.
- `user_input_required` Envelope는 그대로 보여준 뒤 사용자에게 질문한다.
## Handoff
- **Single-task** (e.g., "모바일 플랫폼 다운로드해줘") → DONE. Report envelope, suggest next steps.
- **Multi-step** (e.g., "모바일 플랫폼 다운로드하고 에뮬레이터 만들어줘") → Continue to next step.
**Suggested next steps (only when user asks):**
- `tizen-download-emulator-package` (download emulator package)
- `tizen-create-emulator` (create a new emulator VM)
- `tizen-launch-emulator` (launch an existing emulator VM)
- `tizen-device-manager` (verify device/emulator connection)