View in English

  • Apple Developer
    • 시작하기

    시작하기 탐색

    • 개요
    • 알아보기
    • Apple Developer Program

    알림 받기

    • 최신 뉴스
    • Hello Developer
    • 플랫폼

    플랫폼 탐색

    • Apple 플랫폼
    • iOS
    • iPadOS
    • macOS
    • tvOS
    • visionOS
    • watchOS
    • App Store

    피처링

    • 디자인
    • 배포
    • 게임
    • 액세서리
    • 웹
    • 홈
    • CarPlay
    • 기술

    기술 탐색

    • 개요
    • Xcode
    • Swift
    • SwiftUI

    피처링

    • 손쉬운 사용
    • 앱 인텐트
    • Apple Intelligence
    • 게임
    • 머신 러닝 및 AI
    • 보안
    • Xcode Cloud
    • 커뮤니티

    커뮤니티 탐색

    • 개요
    • Apple과의 만남 이벤트
    • 커뮤니티 주도 이벤트
    • 개발자 포럼
    • 오픈 소스

    피처링

    • WWDC
    • Swift Student Challenge
    • 개발자 이야기
    • App Store 어워드
    • Apple 디자인 어워드
    • 문서

    문서 탐색

    • 문서 라이브러리
    • 기술 개요
    • 샘플 코드
    • 휴먼 인터페이스 가이드라인
    • 비디오

    릴리즈 노트

    • 피처링 업데이트
    • iOS
    • iPadOS
    • macOS
    • watchOS
    • visionOS
    • tvOS
    • Xcode
    • 다운로드

    다운로드 탐색

    • 모든 다운로드
    • 운영 체제
    • 애플리케이션
    • 디자인 리소스

    피처링

    • Xcode
    • TestFlight
    • 서체
    • SF Symbols
    • Icon Composer
    • 지원

    지원 탐색

    • 개요
    • 도움말
    • 개발자 포럼
    • 피드백 지원
    • 문의하기

    피처링

    • 계정 도움말
    • 앱 심사 지침
    • App Store Connect 도움말
    • 새로 추가될 요구 사항
    • 계약 및 지침
    • 시스템 상태
  • 빠른 링크

    • 이벤트
    • 뉴스
    • 포럼
    • 샘플 코드
    • 비디오
 

비디오

메뉴 열기 메뉴 닫기
  • 컬렉션
  • 전체 비디오
  • 소개

더 많은 비디오

  • 소개
  • 코드
  • Prepare your app for Accessibility Nutrition Labels

    Learn how to prepare your app for Accessibility Nutrition Labels by supporting essential accessibility features. Discover how you can enhance interaction methods like VoiceOver and Voice Control by properly configuring accessibility labels, traits, and values for custom controls and gestures. Find out how you can support larger text sizes using Dynamic Type, and prevent content truncation with flexible layouts. And learn how to make your app design more inclusive by adopting Dark Mode, responding to preferences like Differentiate Without Color, and ensuring sufficient contrast.

    챕터

    • 0:01 - Welcome
    • 2:18 - Interaction methods
    • 18:04 - Larger text
    • 26:27 - Color
    • 32:55 - Next steps

    리소스

    • Overview of Accessibility Nutrition Labels
    • Accessibility
    • Learn more about designing for accessibility
      • HD 비디오
      • SD 비디오

    관련 비디오

    WWDC25

    • 손쉬운 사용 취급 개요표로 앱 평가하기

    WWDC24

    • Dynamic Type 시작하기
    • SwiftUI의 손쉬운 사용 관련 업데이트
  • 비디오 검색…
    • 6:39 - Add descriptive accessibility labels

      // Add descriptive accessibility labels
      
      // SwiftUI
      Image(landmark.backgroundImageName)
        .accessibilityLabel("Vibrant cherry blossoms frame a snow-capped mountain rising in the background.")
      
      
      // UIKit
      let imageView = UIImageView(image: UIImage(named: landmark.backgroundImageName))
      imageView.isAccessibilityElement = true
      imageView.accessibilityLabel = "Vibrant cherry blossoms frame a snow-capped mountain rising in the background."
    • 7:43 - Add alternate labels for Voice Control

      // Add alternate labels for Voice Control
      
      Button {
        addFavorite()
      } label: {
        Image(systemName: "heart")
      }
      .accessibilityLabel("Favorite")
      .accessibilityInputLabels(["Favorite", "Heart", "Like", "Love"])
    • 8:23 - Set accessibility traits to match an element’s role

      // Set accessibility traits to match an element’s role
      
      // SwiftUI
      Text("Accessibility Nutrition Labels")
        .font(.title)
        .accessibilityAddTraits(.isHeader)
      
      
      // UIKit
      let label = UILabel()
      /*...*/
      label.accessibilityTraits = .header
    • 9:29 - Implement custom adjustable behavior

      // Implement custom adjustable behavior
      
      // SwiftUI
      MySliderView()
        .accessibilityAdjustableAction { direction in
          switch direction {
          case .increment:
            // Increase value
          case .decrement:
            // Decrease value
          }
        }
      
      
      // UIKit
      class MySliderView: UIView {
        override var accessibilityTraits: UIAccessibilityTraits { get { .adjustable } set {} }
        override func accessibilityIncrement() { /* Increase value */ }
        override func accessibilityDecrement() { /* Decrease value */ }
      }
    • 9:54 - Set an accessibility value

      // Set an accessibility value
      
      // SwiftUI
      MyView()
        .accessibilityValue("Value")
      
      
      // UIKit
      myView.accessibilityValue = "Value"
    • 12:26 - Hide decorative images from VoiceOver

      // Hide decorative images from VoiceOver
      
      // SwiftUI
      Image(decorative: landmark.thumbnailImageName)
      /* or */
      Image(landmark.thumbnailImageName)
        .accessibilityHidden(true)
      
      
      // UIKit
      imageView.isAccessibilityElement = false
    • 12:59 - Combine elements to improve VoiceOver navigation

      // Combine elements to improve VoiceOver navigation
      
      HStack {
        HStack {
          Text("SFO")
          Image(systemName: "airplane.departure")
            .accessibilityLabel("to")
          Text("HND")
        }
        .font(.title3.bold())
        Spacer()
        VStack {
          Text("Arriving in")
          Text("15").font(.title.bold())
          Text("minutes")
        }
      }
      .accessibilityElement(children: .combine)
    • 15:03 - Make a custom component accessible

      // Make a custom component accessible
      
      HStack {
        ForEach(1...5, id: \.self) { index in
          Image(systemName: index <= Int(badgeProgress.rating) ? "star.fill" : "star") 
        }
      }
      .accessibilityElement()
      .accessibilityLabel("Rating")
      .accessibilityValue("\(Int(badgeProgress.rating))")
      .accessibilityAdjustableAction { direction in
        switch direction {
        case .increment:
          badgeProgress.rating = min(5, badgeProgress.rating + 1)
        case .decrement:
          badgeProgress.rating = max(0, badgeProgress.rating - 1)
        }
      }
    • 15:37 - Make a custom component accessible

      // Make a custom component accessible
      
      HStack {
        ForEach(1...5, id: \.self) { index in
          Image(systemName: index <= Int(badgeProgress.rating) ? "star.fill" : "star")
        }
      }
      .accessibilityRepresentation {
        Slider(value: $badgeProgress.rating, in: 0...5, step: 1.0) {
          Text("Rating")
        }
      }
    • 16:30 - Add accessibility traits for tap gestures

      // Add accessibility traits for tap gestures
      
      HStack {
        Text("Learn more")
        Image(systemName: "chevron.forward")
      }
      .foregroundColor(.blue)
      .onTapGesture {
        /*...*/
      }
      .accessibilityAddTraits(.isButton)
    • 17:13 - Add accessibility actions for custom gestures

      // Add accessibility actions for custom gestures
      
      Image(landmark.backgroundImageName)
        .accessibilityLabel(landmark.imageDescription ?? landmark.name)
        .onTapGesture(count: 2) {
          modelData.addFavorite(landmark)
        }
        .accessibilityAction(named: "Favorite") {
          modelData.addFavorite(landmark)
        }
    • 20:07 - Adopt system text styles for automatic scaling

      // Adopt system text styles for automatic scaling
      
      // SwiftUI
      Text("Hello World")
        .font(.body)
      
      
      // UIKit
      label.font = UIFont.preferredFont(forTextStyle: .body)
      label.adjustsFontForContentSizeCategory = true
    • 20:33 - Make custom fonts scale proportionally with system font styles

      // Make custom fonts scale proportionally with system font styles
      
      // SwiftUI
      Text("Hello World")
        .font(.custom("MyFont", size: 17, relativeTo: .body))
      
      
      // UIKit
      guard let customFont = UIFont(name: "MyFont", size: 17) else { return }
      label.font = UIFontMetrics(forTextStyle: .body).scaledFont(for: customFont)
      label.adjustsFontForContentSizeCategory = true
    • 22:57 - Embed content in ScrollView to avoid truncation

      // Embed content in ScrollView to avoid truncation
      
      ScrollView {
        VStack(spacing: 24) {
          EarnedBadgeView(badge: badge)
          Text("Congratulations!")
          Text("...")
        }
      }
      .scrollBounceBehavior(.basedOnSize)
      .safeAreaBar(edge: .bottom) {
          VStack {
              Button("Share badge") { }
              Button("Close") { }
          }
      }
    • 25:17 - Set number of lines to 0 to avoid truncation

      // Set number of lines to 0 to avoid truncation
      
      // SwiftUI
      
      Text("Some longer text that takes up multiple lines.")
        .lineLimit(nil)
      
      
      // UIKit
      
      label.numberOfLines = 0
    • 26:53 - Check the differentiate without color setting

      // Check the differentiate without color setting
      
      // SwiftUI
      
      @Environment(\.accessibilityDifferentiateWithoutColor) var differentiateWithoutColor
      
      
      // UIKit
      
      let differentiateWithoutColor = UIAccessibility.shouldDifferentiateWithoutColor
      NotificationCenter.default.addObserver(self, selector: #selector(diffWithoutColorDidChange), name: UIAccessibility.differentiateWithoutColorDidChangeNotification, object: nil)
    • 27:42 - Differentiate without color alone in Swift Charts

      // Differentiate without color alone in Swift Charts
      
      Chart(visitorData) { data in
        LineMark(
          x: .value("Month", data.month),
          y: .value("Visitors", data.numVisitors)
        )
        .foregroundStyle(by: .value("Landmark", data.landmark))
      
        PointMark(
          x: .value("Month", data.month),
          y: .value("Visitors", data.numVisitors)
        )
        .foregroundStyle(by: .value("Landmark", data.landmark))
        .symbol(by: .value("Landmark", data.landmark))
      }
    • 30:36 - Check the preference for Reduce Transparency

      // Check the preference for Reduce Transparency
      
      // SwiftUI
      
      @Environment(\.accessibilityReduceTransparency) var reduceTransparencyEnabled
      
      
      // UIKit
      
      let reduceTransparencyEnabled = UIAccessibility.isReduceTransparencyEnabled
      NotificationCenter.default.addObserver(self, selector: #selector(reduceTransparencyDidChange), name: UIAccessibility.reduceTransparencyStatusDidChangeNotification, object: nil)
    • 31:22 - Check the preference for Increase Contrast

      // Check the preference for Increase Contrast
      
      // SwiftUI
      
      @Environment(\.colorSchemeContrast) var colorSchemeContrast
      
      
      // UIKit
      
      let increaseContrastEnabled = view.traitCollection.accessibilityContrast == .high
      registerForTraitChanges([UITraitAccessibilityContrast.self], action: #selector(accessibilityContrastDidChange))

Developer Footer

  • 비디오
  • Tech Talks
  • Prepare your app for Accessibility Nutrition Labels
  • 메뉴 열기 메뉴 닫기
    • iOS
    • iPadOS
    • macOS
    • tvOS
    • visionOS
    • watchOS
    메뉴 열기 메뉴 닫기
    • Swift
    • SwiftUI
    • Swift Playground
    • TestFlight
    • Xcode
    • Xcode Cloud
    • SF Symbols
    메뉴 열기 메뉴 닫기
    • 손쉬운 사용
    • 액세서리
    • Apple Intelligence
    • 앱 확장 프로그램
    • App Store
    • 오디오 및 비디오(영문)
    • 증강 현실
    • 디자인
    • 배포
    • 교육
    • 서체(영문)
    • 게임
    • 건강 및 피트니스
    • 앱 내 구입
    • 현지화
    • 지도 및 위치
    • 머신 러닝 및 AI
    • 오픈 소스(영문)
    • 보안
    • Safari 및 웹(영문)
    메뉴 열기 메뉴 닫기
    • 문서(영문)
    • 튜토리얼
    • 다운로드
    • 포럼(영문)
    • 비디오
    메뉴 열기 메뉴 닫기
    • 지원 문서
    • 문의하기
    • 버그 보고
    • 시스템 상태(영문)
    메뉴 열기 메뉴 닫기
    • Apple Developer
    • App Store Connect
    • 인증서, 식별자 및 프로파일(영문)
    • 피드백 지원
    메뉴 열기 메뉴 닫기
    • Apple Developer Program
    • Apple Developer Enterprise Program
    • App Store Small Business Program
    • MFi Program(영문)
    • Mini Apps Partner Program
    • News Partner Program(영문)
    • Video Partner Program(영문)
    • Security Bounty Program(영문)
    • Security Research Device Program(영문)
    메뉴 열기 메뉴 닫기
    • Apple과의 만남
    • Apple Developer Center
    • App Store 어워드(영문)
    • Apple 디자인 어워드
    • Apple Developer Academy(영문)
    • WWDC
    최신 뉴스 읽기.
    Apple Developer 앱 받기.
    Copyright © 2026 Apple Inc. 모든 권리 보유.
    약관 개인정보 처리방침 계약 및 지침