본문으로 건너뛰기
cccskills
무료GitHub에 공개

typography

UI typography on Apple platforms — text styles and Dynamic Type, the San Francisco family (Pro/Rounded/Compact/Mono/New York + width axis), optical sizes, tracking vs kerning, leading adjustments, and custom-font scaling. Use when choosing fonts, building type hierarchy, fixing truncation/legibility, or making custom fonts respect Dynamic Type.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

설치 방법 보기

포함된 파일(1)

  • SKILL.md6.5 KB

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

Typography

Type is most of your UI. The system does the hard parts — optical sizes, tracking tables, Dynamic Type — if you use its APIs. This skill covers when to trust the system, how to build hierarchy deliberately, and what custom fonts owe you back.

When This Skill Activates

  • Choosing fonts or building a type hierarchy for a screen or app
  • Text truncating, cramping, or breaking under larger Dynamic Type sizes
  • Adopting a custom/brand font (and keeping accessibility)
  • Display typesetting: hero numbers, stats, editorial headlines

Rule 1: text styles first

Predefined styles (Large Title → Caption 2) are weight + size + leading combos with Dynamic Type support built in — and different styles scale differently (body grows more than footnote), which manual font sizes can't replicate.

  • Build hierarchy from 2–3 text styles + emphasized variants (bold trait — the actual weight varies per style: some go medium→semibold, others bold→heavy) before reaching for new fonts.
  • Semantic colors + text styles together give dark mode, contrast, and Dynamic Type for free.
  • macOS supports text styles (without Dynamic Type); design Mac type at 100% — no iOS-style scaling assumptions.

Rule 2: let optical sizes and tracking work

  • San Francisco blends Text→Display designs continuously between 17 and 28pt (below: sturdier letterforms, looser tracking for legibility; above: tighter, more refined). System font APIs do this automatically — hardcoded single-cut fonts don't.
  • Tracking, not kerning, for letterspacing — tracking is size-specific and lets the OS disable clashing features (ligatures). Override system tracking only in exceptional cases.
  • Truncation pressure? Use allowsTightening (default-tightening-for-truncation) instead of manually squeezing — and prefer wrapping to truncating (line limit 0 on labels that matter).
  • Line height moves only via leading traits: tight = −2pt, loose = +2pt (±1pt on watchOS); the system adds leading automatically for tall scripts (Arabic, Devanagari).

The Dynamic Type ladder (WWDC24 10074)

12 sizes: 7 default + 5 accessibility (AX1–AX5). .body runs 17pt at default up to 53pt at AX5 — roughly 3× taller, and layouts must expect that. Escalate in order:

  1. Text styles — .font(.title) / preferredFont(forTextStyle:) + adjusts-for-content-size, line count 0 so text wraps instead of truncating.
  2. @ScaledMetric for the non-text riding alongside (icon frames, spacing); SF Symbols scale via UIImage.SymbolConfiguration(textStyle:). Prioritize scaling essential content over decoration.
  3. Switch layout axis at accessibility sizes — branch on dynamicTypeSize.isAccessibilitySize with AnyLayout(HStackLayout()) / AnyLayout(VStackLayout()) (UIKit: flip the stack axis on preferredContentSizeCategory.isAccessibilityCategory); give text the full line width and relax lineLimit.
  4. Large Content Viewer — only for bars that legitimately can't grow: a tab bar takes under 10% of screen height, and scaled to accessibility sizes it would eat almost a quarter (WWDC24 10074). Scaling is always preferred; the viewer is the fallback, not the fix.

Test at all 12 sizes (Xcode Previews → Variants → Dynamic Type Variants), not just the biggest — mid-range accessibility sizes catch different wrap points.

The San Francisco family — pick by job

FaceJob
SF ProThe default; UI text everywhere
SF Pro RoundedFriendlier numerals/labels — widgets, health/fitness data
SF CompactwatchOS (space-efficient counterpart)
SF MonoCode, tabular alignment
New YorkSerif — reading experiences, editorial contrast
SF Arabic / SF Arabic RoundedArabic script with its own optical sizes

The width axis (Condensed / Regular / Compressed / Expanded):

  • Default Regular; every non-Regular choice is a legibility decision — check it.
  • Condensed: fit more text comfortably (long headlines wrap one line fewer).
  • Compressed: display-only density, not body text.
  • Expanded: display typesetting AND small secondary labels (wide + loose tracking).
  • Width is a fourth hierarchy lever beside weight, size, color; all widths share identical vertical proportions, so mixing them never misaligns baselines. 2–3 styles are enough — pair one width with contrasting weights, one weight with contrasting widths, or oppose both for maximum display contrast.

Custom fonts: what you owe back

System fonts get Dynamic Type free; a brand font makes you the type engine:

  • Scale with UIFontMetrics(forTextStyle:).scaledFont(for:) + adjusts-for-content-size, or SwiftUI Font.custom(_:size:relativeTo:); scale layout constants with @ScaledMetric.
  • Test at the largest accessibility sizes — wrap to multiple lines rather than truncate.
  • Verify script coverage for your locales; have a fallback plan for writing systems the brand font doesn't cover (the system stacks: system-ui, ui-rounded, ui-serif, ui-monospace on the web).
  • Budget for the maintenance: tracking tables, optical sizing, and weight ramps are things SF does that a licensed font usually doesn't.

❌ Anti-patterns: hardcoded point sizes on user-facing text · kerning APIs for tracking jobs · custom font without relativeTo: (frozen size) · Compressed body text · truncation where wrapping was possible.

Output Format

Type review: Element | Current (font/size/style) | Issue (hierarchy/scaling/legibility) | Fix — check Dynamic Type at XXL + AX sizes before signing off; pairs with the contrast rules in generators/accessibility-generator.

References

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

Run a structured accessibility audit on an iOS/macOS app — automated XCUITest audits, Accessibility Inspector, manual VoiceOver/Dynamic Type passes, and App Store Accessibility Nutrition Label evaluation. Use before release, when preparing Nutrition Label declarations, or for EU Accessibility Act compliance.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

rshankras/claude-code-apple-skills8132026년 7월 24일 업데이트

Generate accessibility infrastructure for VoiceOver, Dynamic Type, and accessibility features. Use when improving app accessibility, adding accessibility labels and hints, or auditing compliance.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

rshankras/claude-code-apple-skills8132026년 7월 24일 업데이트

Generates an Apple-compliant account deletion flow with multi-step confirmation UI, optional data export, configurable grace period, Keychain cleanup, and server-side deletion request. Use when user needs account deletion, right-to-delete, or Apple App Review compliance for account removal.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

rshankras/claude-code-apple-skills8132026년 7월 24일 업데이트

Privacy-preserving ad measurement with AdAttributionKit (SKAdNetwork's successor) — install and re-engagement attribution, conversion-value strategy under crowd anonymity, and end-to-end postback testing. Use when running paid acquisition beyond Apple Ads, measuring re-engagement campaigns, designing conversion values, or migrating from SKAdNetwork.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

rshankras/claude-code-apple-skills8132026년 7월 24일 업데이트

alarmkit

무료

AlarmKit integration for scheduling alarms and timers with custom UI, Live Activities, and snooze support. Use when implementing alarm or timer features in iOS 26+ apps.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

rshankras/claude-code-apple-skills8132026년 7월 24일 업데이트

Interpret app metrics and make data-driven decisions. Covers DAU/MAU, retention, LTV, ARPU, App Store Connect analytics, AARRR funnel analysis, cohort analysis, and diagnostic decision trees. Use when user wants to understand their metrics, diagnose problems, or build a data-driven growth plan.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

rshankras/claude-code-apple-skills8132026년 7월 24일 업데이트

rshankras의 스킬 모두 보기

이 스킬의 문제 신고