Hig Components Content
raintree-technology/hig-doctor
Apple Human Interface Guidelines for content display components.
3D chart visualization with Swift Charts using Chart3D, SurfacePlot, interactive pose control, and surface styling — plus a 2D Swift Charts construction reference (marks, axes, selection…
$ npx skills add rshankras/claude-code-apple-skills --skill charts-3d -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install rshankras/claude-code-apple-skills charts-3d --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/rshankras/claude-code-apple-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/swiftui/charts-3d .claude/skills/charts-3d && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "charts-3d" agent skill from https://github.com/rshankras/claude-code-apple-skills/tree/main/skills/swiftui/charts-3d into .claude/skills/charts-3d/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "charts-3d", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/rshankras/claude-code-apple-skills/tree/main/skills/swiftui/charts-3dType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add rshankras/claude-code-apple-skills --skill charts-3d -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install rshankras/claude-code-apple-skills charts-3d --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/rshankras/claude-code-apple-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/swiftui/charts-3d .agents/skills/charts-3d && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "charts-3d" agent skill from https://github.com/rshankras/claude-code-apple-skills/tree/main/skills/swiftui/charts-3d into .agents/skills/charts-3d/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "charts-3d", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add rshankras/claude-code-apple-skills --skill charts-3d -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install rshankras/claude-code-apple-skills charts-3d --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/rshankras/claude-code-apple-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/swiftui/charts-3d .cursor/skills/charts-3d && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "charts-3d" agent skill from https://github.com/rshankras/claude-code-apple-skills/tree/main/skills/swiftui/charts-3d into .cursor/skills/charts-3d/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "charts-3d", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/rshankras/claude-code-apple-skills.git --path skills/swiftui/charts-3d--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add rshankras/claude-code-apple-skills --skill charts-3d -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install rshankras/claude-code-apple-skills charts-3d --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/rshankras/claude-code-apple-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/swiftui/charts-3d .gemini/skills/charts-3d && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "charts-3d" agent skill from https://github.com/rshankras/claude-code-apple-skills/tree/main/skills/swiftui/charts-3d into .gemini/skills/charts-3d/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "charts-3d", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install rshankras/claude-code-apple-skills charts-3dInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add rshankras/claude-code-apple-skills --skill charts-3d -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/rshankras/claude-code-apple-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/swiftui/charts-3d .github/skills/charts-3d && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "charts-3d" agent skill from https://github.com/rshankras/claude-code-apple-skills/tree/main/skills/swiftui/charts-3d into .github/skills/charts-3d/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "charts-3d", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add rshankras/claude-code-apple-skills --skill charts-3d -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install rshankras/claude-code-apple-skills charts-3d --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/rshankras/claude-code-apple-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/swiftui/charts-3d .opencode/skills/charts-3d && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "charts-3d" agent skill from https://github.com/rshankras/claude-code-apple-skills/tree/main/skills/swiftui/charts-3d into .opencode/skills/charts-3d/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "charts-3d", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
charts-3d3D chart visualization with Swift Charts using Chart3D, SurfacePlot, interactive pose control, and surface styling — plus a 2D Swift Charts construction reference (marks, axes, selection…
Charts 3D is an agent skill from rshankras/claude-code-apple-skills. 3D chart visualization with Swift Charts using Chart3D, SurfacePlot, interactive pose control, and surface styling — plus a 2D Swift Charts construction reference (marks, axes, selection, SectorMark, scrollable charts). Use when creating data visualizations with Swift Charts.
Its SKILL.md is about 5.4k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Mobile, covering iOS development, Data visualization and Accessibility. It works with SwiftUI, iOS and macOS. The repository describes itself as: Claude Code skills for Apple platform development (iOS, macOS, iPadOS) — product validation, code generation, App Store optimization, and more. The licence is MIT.
Read from SKILL.md and the folder at commit 9ffb831. It shows what the files ask for, not the result of running them.
Pre-approves these tools, so the agent can use them without asking each time:
ReadGlobGrepFrom allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are swift).
From the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
developer.apple.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Charts 3D loads about 5.4k tokens when it runs. Until then it costs about 72 tokens; SKILL.md has 1,285 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from rshankras/claude-code-apple-skills at commit 9ffb831, republished under its MIT licence (© rshankras). 1,285 words, ~5,355 tokens.
.claude/skills/charts-3d/SKILL.md (or your agent's skills folder).Create 3D data visualizations using Chart3D and SurfacePlot. Covers math-driven surfaces, data-driven surfaces, interactive camera pose control, surface styling, and camera projection modes.
Use this skill when the user:
Chart3D, SurfacePlot, or 3D surface plotsWhat 3D chart feature do you need?
|
+-- Visualize a math function f(x, y) -> z
| +-- Use SurfacePlot(x:y:z:function:)
|
+-- Visualize data points as a surface
| +-- Use Chart3D(data) { point in SurfacePlot(...) }
|
+-- Interactive drag-to-rotate
| +-- Bind pose: .chart3DPose($pose) with @State var pose: Chart3DPose
|
+-- Fixed viewing angle (no interaction)
| +-- Read-only pose: .chart3DPose(Chart3DPose.front) or custom
|
+-- Style the surface color
| +-- Solid color -> .foregroundStyle(Color.blue)
| +-- Gradient -> .foregroundStyle(LinearGradient(...))
| +-- Height-based -> .foregroundStyle(.heightBased(gradient, yRange:))
| +-- Normal-based -> .foregroundStyle(.normalBased)
|
+-- Camera projection
| +-- Perspective (depth) -> .chart3DCameraProjection(.perspective)
| +-- Orthographic (flat) -> .chart3DCameraProjection(.orthographic)
| +-- System default -> .chart3DCameraProjection(.automatic)
|
+-- Multiple surfaces in one chart
+-- Place multiple SurfacePlot calls inside a single Chart3D { }| API | Minimum Version | Import | Notes |
|---|---|---|---|
Chart3D | iOS 26 / macOS 26 | Charts | Main 3D chart container |
SurfacePlot | iOS 26 / macOS 26 | Charts | 3D surface mark |
Chart3DPose | iOS 26 / macOS 26 | Charts | Viewing angle control |
Chart3DCameraProjection | iOS 26 / macOS 26 | Charts | .automatic, .perspective, .orthographic |
Chart3DSurfaceStyle | iOS 26 / macOS 26 | Charts | .heightBased, .normalBased |
Render a surface from a function f(x, y) -> z:
import SwiftUI
import Charts
struct WaveSurfaceView: View {
var body: some View {
Chart3D {
SurfacePlot(
x: "X",
y: "Height",
z: "Z",
function: { x, z in
sin(x) * cos(z)
}
)
.foregroundStyle(.blue)
}
}
}Render a surface from an array of data points:
import SwiftUI
import Charts
struct DataPoint: Identifiable {
let id = UUID()
let x: Double
let y: Double
let z: Double
}
struct DataSurfaceView: View {
let points: [DataPoint]
var body: some View {
Chart3D(points) { point in
SurfacePlot(
x: .value("X", point.x),
y: .value("Height", point.y),
z: .value("Z", point.z)
)
}
}
}Allow the user to drag to rotate the chart:
import SwiftUI
import Charts
struct InteractiveChartView: View {
@State private var pose = Chart3DPose.default
var body: some View {
Chart3D {
SurfacePlot(
x: "X",
y: "Height",
z: "Z",
function: { x, z in
sin(x) * cos(z)
}
)
.foregroundStyle(.blue)
}
.chart3DPose($pose)
}
}SurfacePlot(x: "X", y: "Y", z: "Z", function: { x, z in x * z })
.foregroundStyle(.blue)SurfacePlot(x: "X", y: "Y", z: "Z", function: { x, z in x * z })
.foregroundStyle(
LinearGradient(
colors: [.blue, .green, .yellow],
startPoint: .bottom,
endPoint: .top
)
)Color the surface based on height values, mapping a gradient across the y-axis range:
SurfacePlot(x: "X", y: "Y", z: "Z", function: { x, z in sin(x) * cos(z) })
.foregroundStyle(
Chart3DSurfaceStyle.heightBased(
Gradient(colors: [.blue, .cyan, .green, .yellow, .red]),
yRange: -1...1
)
)Color based on surface normals, giving a lighting-aware appearance:
SurfacePlot(x: "X", y: "Y", z: "Z", function: { x, z in sin(x) * cos(z) })
.foregroundStyle(Chart3DSurfaceStyle.normalBased)Control surface shininess (0 = reflective, 1 = matte):
SurfacePlot(x: "X", y: "Y", z: "Z", function: { x, z in sin(x) * cos(z) })
.foregroundStyle(.blue)
.roughness(0.3)Chart3DPose provides built-in presets for common viewing angles:
.chart3DPose(.default) // Standard 3/4 angle
.chart3DPose(.front) // Viewing from front
.chart3DPose(.back) // Viewing from back
.chart3DPose(.top) // Top-down view
.chart3DPose(.bottom) // Bottom-up view
.chart3DPose(.right) // Right side view
.chart3DPose(.left) // Left side viewSpecify exact azimuth (horizontal rotation) and inclination (vertical tilt):
.chart3DPose(
Chart3DPose(azimuth: .degrees(45), inclination: .degrees(30))
)// ❌ Passing a literal where a binding is needed for interactivity
.chart3DPose(.default) // This is read-only; drag gestures will not work
// ✅ Use a @State binding for interactive rotation
@State private var pose = Chart3DPose.default
// ...
.chart3DPose($pose)Control how 3D depth is rendered:
Chart3D {
SurfacePlot(x: "X", y: "Y", z: "Z", function: { x, z in sin(x) * cos(z) })
.foregroundStyle(.blue)
}
.chart3DCameraProjection(.perspective) // Objects farther away appear smaller
// .chart3DCameraProjection(.orthographic) // No perspective distortion
// .chart3DCameraProjection(.automatic) // System decidesRender multiple surfaces in a single chart for comparison:
import SwiftUI
import Charts
struct ComparisonChartView: View {
@State private var pose = Chart3DPose.default
var body: some View {
Chart3D {
SurfacePlot(
x: "X",
y: "Wave A",
z: "Z",
function: { x, z in sin(x) * cos(z) }
)
.foregroundStyle(.blue.opacity(0.8))
SurfacePlot(
x: "X",
y: "Wave B",
z: "Z",
function: { x, z in cos(x) * sin(z) }
)
.foregroundStyle(.red.opacity(0.8))
}
.chart3DPose($pose)
.chart3DCameraProjection(.perspective)
}
}A full-featured 3D chart with height-based coloring, interactive rotation, and perspective projection:
import SwiftUI
import Charts
struct TerrainView: View {
@State private var pose = Chart3DPose(
azimuth: .degrees(30),
inclination: .degrees(25)
)
var body: some View {
VStack {
Text("Terrain Visualization")
.font(.headline)
Chart3D {
SurfacePlot(
x: "Longitude",
y: "Elevation",
z: "Latitude",
function: { x, z in
let distance = sqrt(x * x + z * z)
return sin(distance) / max(distance, 0.1)
}
)
.foregroundStyle(
Chart3DSurfaceStyle.heightBased(
Gradient(colors: [
.blue, .cyan, .green, .yellow, .orange, .red
]),
yRange: -0.5...1.0
)
)
.roughness(0.4)
}
.chart3DPose($pose)
.chart3DCameraProjection(.perspective)
}
.padding()
}
}These apply to every chart you build — 2D or 3D. The pillars: focused, approachable, accessible.
The design fundamentals above apply to every chart; this is the API layer for standard 2D charts (iOS 16+ unless noted; selection, SectorMark, and scrolling are iOS 17+).
A Chart is a composition of marks — BarMark, LineMark, PointMark, AreaMark, RuleMark, RectangleMark. The .value("Label", v) factory arguments do double duty: they bind data AND drive the automatic axes and legend, so label them meaningfully:
Chart(salesData) { sale in // Identifiable data — no explicit ForEach needed
BarMark(
x: .value("Day", sale.day, unit: .day), // unit: .day buckets temporal values per day
y: .value("Sales", sale.count)
)
}unit: (.day, .month, .hour) controls temporal bucketing; omit it and every timestamp is its own position..foregroundStyle(by:) splits marks into series; pair it with .symbol(by:) so series stay distinguishable without color (WWDC22):
Chart(data) { point in
LineMark(x: .value("Day", point.day), y: .value("Sales", point.sales))
.foregroundStyle(by: .value("City", point.city))
.symbol(by: .value("City", point.city))
}.chartForegroundStyleScale(["Cupertino": .indigo, "San Francisco": .teal])..position(by: .value("City", point.city)) converts stacked bars into grouped bars.Pin scales so a filtered dataset doesn't make the whole chart jump:
.chartYScale(domain: 0...maxExpectedSales)
.chartXScale(domain: startDate...endDate)Marks compose freely, so summary statistics are just more marks:
Chart {
ForEach(data) { point in
AreaMark( // min–max band
x: .value("Day", point.day),
yStart: .value("Min", point.min),
yEnd: .value("Max", point.max)
)
.opacity(0.3)
LineMark(x: .value("Day", point.day), y: .value("Average", point.average))
}
RuleMark(y: .value("Overall", overallAverage)) // overall average line
.foregroundStyle(.secondary)
.annotation(position: .top, alignment: .leading) {
Text("Avg: \(overallAverage, format: .number.precision(.fractionLength(0)))")
.font(.caption)
.foregroundStyle(.secondary)
}
}.chartXAxis {
AxisMarks(values: .stride(by: .month)) { value in
AxisGridLine()
AxisTick()
AxisValueLabel(format: .dateTime.month(.narrow))
}
}
.chartYAxis {
AxisMarks(position: .leading) // move the value axis to the leading edge
}value.as(Date.self) in the closure to, say, bold only the first month of each quarter..chartXAxis(.hidden) removes an axis entirely; .chartPlotStyle { $0.frame(height: 200).background(.gray.opacity(0.05)).border(.quaternary) } sizes and styles the plot area itself.Prefer the built-in selection binding over hand-rolled overlay gestures (iOS 17):
@State private var selectedDay: Date?
Chart(data) { ... }
.chartXSelection(value: $selectedDay)Render the selection as marks — a RuleMark with zIndex(-1) so it draws behind the data, and an annotation that stays inside the plot:
if let selectedDay {
RuleMark(x: .value("Selected", selectedDay, unit: .day))
.foregroundStyle(.gray.opacity(0.3))
.zIndex(-1)
.annotation(
position: .top, spacing: 0,
overflowResolution: .init(x: .fit(to: .chart), y: .disabled)
) {
SelectionDetailCard(day: selectedDay)
}
}For fully custom hit-testing, drop to ChartProxy inside .chartOverlay with a GeometryReader: proxy.value(atX:) converts gesture locations to data values, proxy.position(forX:) converts back.
Chart(data) { item in
SectorMark(
angle: .value("Sales", item.sales),
innerRadius: .ratio(0.62), // donut hole
angularInset: 1.5 // 1.5 per side = 3pt gaps between sectors
)
.cornerRadius(4)
.foregroundStyle(by: .value("Name", item.name))
}
.chartBackground { proxy in
GeometryReader { geo in // headline metric in the donut hole
if let anchor = proxy.plotFrame {
let frame = geo[anchor]
Text("Best: \(topSellerName)")
.position(x: frame.midX, y: frame.midY)
}
}
}Don't cram a year into one screen — show a window and scroll (WWDC23):
Chart(yearOfData) { ... }
.chartScrollableAxes(.horizontal)
.chartXVisibleDomain(length: 3600 * 24 * 30) // 30-day window
.chartScrollPosition(x: $scrollDate) // read/write the scroll offset
.chartScrollTargetBehavior(
.valueAligned(
matching: DateComponents(hour: 0), // land on day boundaries
majorAlignment: .matching(DateComponents(day: 1)) // snap paging to month starts
)
)Auto-generated VoiceOver descriptions read raw values; per-mark labels beat them:
BarMark(x: .value("Day", sale.day, unit: .day), y: .value("Sales", sale.count))
.accessibilityLabel(sale.day.formatted(date: .abbreviated, time: .omitted))
.accessibilityValue("\(sale.count) pancakes sold")With hundreds or thousands of points, bucket into reasonable intervals and expose one accessibility element per interval rather than per point (WWDC21 10122).
Audio Graphs let VoiceOver play a data series as a continuous tone — pitch = Y value,
time = X position — with an explorer view (rotor → "Audio Graph" → Chart Details) that
plays the sonification, scrubs it (double-tap-and-hold; pausing speaks the value at the
current position), and shows automatically computed summary statistics. Swift Charts
generates a default descriptor; custom-drawn charts conform to AXChart (UIKit) or use
the .accessibilityChartDescriptor(_:) modifier with an AXChartDescriptorRepresentable
(SwiftUI, iOS 15+):
var accessibilityChartDescriptor: AXChartDescriptor? {
let xAxis = AXNumericDataAxisDescriptor(
title: "Cups of coffee",
range: 0...10,
gridlinePositions: [], // gridlines render as haptics during playback
valueDescriptionProvider: { "\(Int($0)) cups" }) // "5 cups", never a bare "5"
let yAxis = AXNumericDataAxisDescriptor(
title: "Lines of code",
range: 0...100,
gridlinePositions: [],
valueDescriptionProvider: { "\(Int($0)) lines of code" })
let series = AXDataSeriesDescriptor(
name: "Productivity",
isContinuous: true, // line → one continuous tone; false for bars/points → discrete tones
dataPoints: model.points.map { AXDataPoint(x: $0.x, y: $0.y) })
return AXChartDescriptor(
title: model.title,
summary: model.summary, // 1–2 sentence alt text; spoken in the explorer view
xAxis: xAxis,
yAxis: yAxis,
additionalAxes: [],
series: [series])
}AXCategoricalDataAxisDescriptor; localize and pluralize the
valueDescriptionProvider output in production.| # | Mistake | Fix |
|---|---|---|
| 1 | Forgetting to import Charts | Both SwiftUI and Charts imports are required |
| 2 | Using .chart3DPose(.default) and expecting drag-to-rotate | Use a @State binding: .chart3DPose($pose) for interactive rotation |
| 3 | Setting yRange that does not cover actual function output | Match the yRange in .heightBased() to the actual min/max of your function output |
| 4 | Applying .roughness() without .foregroundStyle() | Roughness modifies existing surface appearance; set a foreground style first |
| 5 | Using orthographic projection for presentation/demo contexts | Prefer .perspective for visual appeal; use .orthographic for precise data reading |
import SwiftUI and import Charts are presentChart3D wraps all SurfacePlot contentx:, y:, z:) are descriptive and meaningfulforegroundStyle applied to each SurfacePlot for clear visual distinctionyRange in .heightBased() matches the actual output range of the functionroughness value makes sense for the use case (0 = reflective, 1 = matte)@State binding if drag-to-rotate is intended.perspective for visual, .orthographic for precision).automatic, verified the system choice looks acceptableAXChartDescriptor (Audio Graphs) — or keep Swift Charts' default intact© rshankras, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in skills/swiftui/charts-3d of rshankras/claude-code-apple-skills.
Open the folder on GitHubat commit 9ffb831
Charts 3D next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Charts 3D this skillrshankras/claude-code-apple-skills | 787 | — | ~5.4k | Automated safety check: Pass | MIT | |
| Hig Components Contentraintree-technology/hig-doctor | 143 | 5 repos | ~1.3k | Automated safety check: Pass | MIT | |
| iOS Accessibilitydpearson2699/swift-ios-skills | 1.2k | — | ~4.6k | Automated safety check: Pass | Custom licence | |
| Swiftui Expert Skillomarshahine/HomeClaw | 175 | 4 repos | ~2.8k | Automated safety check: Pass | MIT | |
| Hig Project Contextraintree-technology/hig-doctor | 143 | 5 repos | ~1.2k | Automated safety check: Pass | MIT | |
| Swiftui Expert SkillEslzzyl/Pixiv-SwiftUI | 111 | 1 repos | ~2.9k | Automated safety check: Pass | AGPL-3.0 |
raintree-technology/hig-doctor
Apple Human Interface Guidelines for content display components.
dpearson2699/swift-ios-skills
Build and audit SwiftUI, UIKit, and AppKit accessibility for VoiceOver, Voice Control, Switch Control, Full Keyboard Access, Dynamic Type, focus restoration, labels/traits/actions, traversal, custom…
omarshahine/HomeClaw
A skill your agent uses when writing, reviewing, or refactoring SwiftUI code for iOS or macOS, including state management, view composition, performance, Liquid Glass adoption, or Instruments .trace…
raintree-technology/hig-doctor
Create or update a shared Apple design context document that other HIG skills use to tailor guidance.
Eslzzyl/Pixiv-SwiftUI
A skill your agent uses when writing, reviewing, or refactoring SwiftUI code for iOS or macOS, including state and @Observable data flow, view composition, resizable layouts, safe areas, display…
Wholiver/swiftui-design-skill
Guides the agent to design distinctive SwiftUI interfaces for iOS and macOS, with six anti-generic rules, a design direction workflow and a five-dimension review.
rshankras/claude-code-apple-skills
Generate accessibility infrastructure for VoiceOver, Dynamic Type, and accessibility features.
rshankras/claude-code-apple-skills
SwiftUI animation patterns including springs, transitions, PhaseAnimator, KeyframeAnimator, SF Symbol effects, scroll-driven effects, mesh gradients, text renderers, and shader effects.
rshankras/claude-code-apple-skills
Generate compelling App Store descriptions that convert browsers into users.
rshankras/claude-code-apple-skills
Generates an app icon for macOS or iOS — a fast CoreGraphics placeholder and/or flat layered source art to finish in Icon Composer (the Liquid Glass / iOS 26+ standard).
rshankras/claude-code-apple-skills
Turn an app idea into validated, App-Store-ready name candidates.
rshankras/claude-code-apple-skills
Revenue beyond the single-app price tag — own-app bundles, Family Sharing as a conversion lever, cross-developer bundles & suites, and institutional licensing via Group Purchases / Apple School &…
Categories
3D chart visualization with Swift Charts using Chart3D, SurfacePlot, interactive pose control, and surface styling — plus a 2D Swift Charts construction reference (marks, axes, selection…. Charts 3D is an agent skill from rshankras/claude-code-apple-skills. 3D chart visualization with Swift Charts using Chart3D, SurfacePlot, interactive pose control, and surface styling — plus a 2D Swift Charts construction reference (marks, axes, selection, SectorMark, scrollable charts).
Charts 3D fits situations like: creating data visualizations with Swift Charts; tasks that involve iOS development; tasks that involve Data visualization.
Run `npx skills add rshankras/claude-code-apple-skills --skill charts-3d -a claude-code`. Or copy the skill folder (skills/swiftui/charts-3d in rshankras/claude-code-apple-skills) into .claude/skills/charts-3d in your project. Claude Code loads it when a task matches its description.
Run `npx skills add rshankras/claude-code-apple-skills --skill charts-3d -a codex`. Or copy the skill folder (skills/swiftui/charts-3d in rshankras/claude-code-apple-skills) into .agents/skills/charts-3d in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add rshankras/claude-code-apple-skills --skill charts-3d -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/charts-3d, .gemini/skills/charts-3d, .github/skills/charts-3d and .opencode/skills/charts-3d in your project.
SKILL.md names no scripts, command-line tools or credentials: Charts 3D is instructions for the agent only. Its frontmatter pre-approves these tools: Read, Glob, Grep.
SKILL.md names 1 domain. As links in the text: developer.apple.com. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Charts 3D is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 5.4k tokens (SKILL.md is roughly 21k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Charts 3D: Hig Components Content (raintree-technology/hig-doctor, 143 stars), iOS Accessibility (dpearson2699/swift-ios-skills, 1.2k stars), Swiftui Expert Skill (omarshahine/HomeClaw, 175 stars) and Hig Project Context (raintree-technology/hig-doctor, 143 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
rshankras (a GitHub user) maintains it in rshankras/claude-code-apple-skills, which has 787 GitHub stars. The repository holds 41 skills in this directory. The repository was last updated on July 24, 2026.
Source: rshankras/claude-code-apple-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.