RSS 사용하여 당신의 빵을 사용하세요 - iOS 개발 뉴스 및 팁 팔로우 Useyourloaf.com/blog은 Michelle Roux가 작성한 제빵 및 음식 블로그로 다양한 레시피, 제빵 팁, 음식 모험 등을 다루고 있습니다. Use Your Loaf - iOS Development News & Tips useyourloaf.com RSS useyourloaf.com
WWDC 2026 시청 가이드 WWDC 2026은 Platforms State of the Union을 시작점으로 하여 Liquid Glass와 Apple Intelligence에 중점을 둡니다. 100개 이상의 세션이 자신의 속도에 맞춰 제공되므로 즉시 모든 것을 배울 필요는 없습니다. 세션 시청은 일반적으로 간결하고 핵심적인 내용을 담고 있으므로 Apple Developer 앱 또는 YouTube를 이용하는 것이 좋습니다. Swift 6.4는 편의성 개선과 FilePath, Swift-C 상호 운용과 같은 새로운 기능을 도입합니다. SwiftUI는 필수적인 Liquid Glass 변경, 최소한의 메뉴 아이콘, 눈에 띄는 탭 역할과 함께 새로운 문서 API 및 재정렬 가능한 컨테이너를 지원합니다. UIKit 앱 현대화는 크기 조절 가능한 환경 및 필수 UIScene 라이프사이클에 적응하는 것을 포함하며, AppKit 앱은 컨트롤 이벤트 및 키보드 탐색을 활용해야 합니다. Xcode 27은 사용자 정의 가능한 도구 모음, 현지화 및 프로토타이핑과 같은 작업을 위한 코딩 에이전트, 개선된 장치 허브를 제공합니다. Instruments는 Swift 실행기 도구 및 에이전트 앱 디버깅을 위한 Foundation Models 도구를 포함한 프로파일링을 위한 새로운 모드를 제공합니다. MetricKit은 앱 성능 메트릭 수집을 위한 Swift 우선 API로 재구축되었습니다. 개발자는 Swift Testing으로 마이그레이션할 수 있으며, Xcode의 코딩 도우미가 이 과정을 지원합니다. Xcode Cloud는 빌드, 배포 및 자동화 워크플로우를 간소화합니다. SwiftData는 섹션별 가져오기 요청 및 Codable 유형 저장 기능과 같은 업데이트를 받았습니다. 디자인 원칙은 목적, 단순성, 명확한 명명 규칙을 강조하며 직관적인 검색 경험을 만드는 방법에 대한 지침을 제공합니다. 접근성 향상에는 앱 읽기를 위한 개선된 VoiceOver 탐색 및 AI 생성 자막이 포함됩니다. Apple Intelligence는 Foundation Models 프레임워크를 확장하여 오픈 소스로 만들고 온디바이스 및 Private Cloud Compute 옵션을 제공합니다. WWDC 2026 Viewing Guide useyourloaf.com
Git 커밋 훅을 포함한 포맷 스위프트 Git 커밋 시 자동 Swift 코드 서식 지정은 swift-format 도구와 Git pre-commit 훅을 사용하여 구현할 수 있습니다. Xcode 16은 swift-format을 툴체인에 포함하고 있으며, swift format MyFile.swift와 같이 명령줄을 통해 실행할 수 있습니다. swift-format의 구성은 .swift-format 파일을 통해 관리되며, 이 도구는 현재 디렉토리와 상위 디렉토리를 순차적으로 검색합니다. 기본 구성은 swift format dump-configuration을 사용하여 생성하고, 사용자 정의 코드 스타일을 정의하도록 수정하여 원하는 위치에 저장할 수 있습니다. Git 훅은 특정 작업 시 사용자 정의 스크립트를 실행할 수 있게 해주며, pre-commit 훅은 커밋이 완료되기 전에 실행됩니다. 제공된 pre-commit 스크립트는 git diff를 사용하여 스테이징된 Swift 파일(추가, 복사, 수정 또는 이름 변경)을 식별합니다. 그런 다음, 이러한 파일에 대해 swift format --in-place --parallel을 실행하여 직접 수정합니다. 포맷터가 파일을 변경하기 때문에, 스크립트는 이후 git add를 사용하여 새롭게 서식이 지정된 파일을 다시 스테이징하여 커밋합니다. 이 pre-commit 스크립트는 각 저장소의 .git/hooks 디렉토리에 복사하고 실행 가능하게 만들어야 합니다. 이는 클라이언트 측 훅이므로, 모든 새 저장소 또는 복제된 저장소에 대해 설치가 필요합니다. git commit --no-verify 명령을 사용하여 pre-commit 검사를 우회할 수 있습니다. Format Swift with a Git Commit Hook useyourloaf.com
아이폰 17 화면 크기 애플의 차기 아이폰 17 시리즈는 라인업을 간소화하여 플러스 모델을 없애고 아이폰 에어를 도입했습니다. 기본 아이폰 17과 프로 모델은 6.3인치 디스플레이를 공유합니다. 프로 맥스 모델은 6.9인치 화면을 유지하여 명확한 크기 옵션을 제공합니다. 아이폰 에어는 6.5인치 디스플레이를 자랑하며 얇은 디자인을 우선시합니다. 기본 아이폰 17과 아이폰 17 프로는 A19 칩을 탑재할 예정이며, 프로 모델에는 프로 버전이 탑재됩니다. 기본 아이폰 17에는 프로모션과 항상 켜진 디스플레이와 같은 기능이 포함됩니다. 아이폰 에어의 얇은 디자인은 단일 48MP 후면 카메라를 특징으로 합니다. USB-3 전송 속도는 프로 모델에서만 제한됩니다. 문서에는 화면 해상도, 안전 영역 삽입 및 기타 주요 사양이 자세히 설명되어 있습니다. 앱 스토어 스크린샷 가이드라인은 이전 연도와 일관성을 유지할 예정입니다. iPhone 17 Screen Sizes useyourloaf.com
Swift 문자열 보간에서의 기본값 Swift 6.2는 선택적 값의 문자열 보간 기능을 향상시켜 이전의 제한 사항을 해결합니다. 이전 버전에서는 선택적 값을 보간할 때 경고가 발생했으며, 기본값이나 String(describing:)을 사용할 것을 권장했습니다. 기본값을 사용하는 경우 종종 임의적이고, 잠재적으로 의미 없는 대체 값을 사용해야 했습니다. String(describing:)은 null 값에 대해 "nil"을 표시하는데, 이는 바람직하지 않습니다. Swift 6.2는 보간 내에 기본 문자열 매개변수를 도입하여 이러한 문제를 해결합니다. 새로운 구문을 사용하면 선택적 값의 유형에 관계없이 기본 문자열을 지정할 수 있어 출력을 개선합니다. 예를 들어, (count, default: "not set")는 null 값을 우아하게 처리합니다. 그러나 지역화된 문자열과의 통합은 여전히 지원되지 않습니다. 이 새로운 기능은 SE-0477에 문서화되어 있습니다. 이 개선 사항은 문자열 보간에서 선택적 값을 처리하는 것을 단순화합니다. 지역화된 문자열과의 제한 사항은 추가 조사가 필요합니다. Swift Default Value in String Interpolations useyourloaf.com
Swift 패키지에서 경고를 오류로 처리하기 "Swift 6.2는 Swift 패키지 내에서 컴파일러 경고를 더욱 세밀하게 제어할 수 있게 해줍니다. 이전에는 Xcode에서 모든 경고를 오류로 처리하거나 사용자 정의 플래그를 통해 모든 경고를 억제할 수 있었습니다. 그러나 Swift 6.1에서는 "-Werror DeprecatedDeclaration"과 같이 특정 진단 그룹을 경고 또는 오류로 처리하는 옵션을 도입했습니다. 결정적으로, 이러한 세밀한 제어는 Swift 6.2 이전에는 Swift 패키지에서 지원되지 않았습니다.이러한 새로운 기능을 활용하려면 개발자는 Package.swift 파일에서 Swift 도구 버전을 6.2로 업데이트해야 합니다. Swift 6.2는 treatAllWarnings(as:) 및 treatWarning("group", as:)와 같은 새로운 swiftSettings를 제공합니다. 이러한 설정을 통해 예를 들어 "DeprecatedDeclaration"과 같은 특정 그룹을 제외한 모든 경고를 오류로 처리하는 것과 같이 정확한 구성을 할 수 있습니다. 이러한 경고 제어 설정은 패키지가 직접 빌드될 때만 적용되며 원격 종속성으로 사용될 때는 무시된다는 점에 유의해야 합니다. 개발자는 패키지의 모든 타겟에 이러한 제어를 적용하기 위해 타겟을 반복하고 원하는 설정을 swiftSettings에 추가할 수 있습니다. 이러한 개선 사항은 빌드 시간 경고 및 오류 관리에 더 큰 유연성을 제공합니다." Treating Warnings As Errors In Swift Packages useyourloaf.com
Swift 원시 식별자 Swift 6.2는 원시 식별자를 도입하여 이전에 식별자 이름에 금지되었던 문자를 사용할 수 있게 했습니다. SE-0451을 통해 구현된 이 기능은 식별자를 백틱으로 묶을 수 있도록 합니다. 한 가지 주요 적용 사례는 Swift Testing입니다. 여기서 원시 식별자는 테스트 함수 이름의 중복을 제거할 수 있습니다. @Test 속성에 대한 설명 문자열과 별도의 일반 함수 이름을 작성하는 대신, 원시 식별자가 둘 다 역할을 할 수 있습니다. 이를 통해 테스트 함수 이름을 설명적이고 Test Navigator 및 보고서에 보이도록 만들 수 있습니다. 또 다른 유용한 시나리오는 자연스럽게 숫자에 해당하는 열거형 케이스입니다. 이전에는 숫자로 시작하는 식별자를 피하기 위해 접두사가 필요했습니다. 원시 식별자를 사용하면 24 또는 30과 같은 열거형 케이스를 백틱을 사용하여 직접 표현할 수 있습니다. 이는 숫자 열거형 케이스에 대한 인위적인 접두사를 피함으로써 코드를 단순화합니다. 백틱의 사용이 다소 번거롭게 느껴질 수 있지만, 코드의 명확성과 표현력을 크게 향상시킵니다. Swift Raw Identifiers useyourloaf.com
스위프트 관찰 AsyncSequence를 통한 상태 변경 관찰 Swift 6.2는 Observable 타입의 상태 변경을 스트리밍하는 새로운 Observations 타입을 도입합니다. 이는 장면의 검색 쿼리 및 탐색 경로와 같은 애플리케이션 상태를 유지하는 데 유용합니다. 저자는 이전에 이 상태를 Codable 클래스인 SceneModel에서 관리했으며, 이를 JSON으로 인코딩하여 유지할 수 있었습니다.이 SceneModel은 루트 뷰의 @SceneStorage를 사용하여 저장 및 복원되었습니다. 그러나 상태 저장은 scenePhase를 모니터링하는 데 의존했는데, 이는 장면이 백그라운드로 전환되기 전에 종료될 수 있기 때문에 신뢰할 수 없었습니다. Swift 6.2 이전에는 @Published 속성을 가진 ObservableObject를 사용하여 Combine의 buffer와 values를 활용해 상태 변경을 저장하기 위한 AsyncSequence를 생성할 수 있었습니다.iOS 26 및 Swift 6.2와 함께 Observations 타입은 Observable 타입에 대한 유사한 AsyncSequence를 제공합니다. 이를 통해 SceneModel의 JSON 표현과 같은 계산된 속성을 관찰할 수 있습니다. Observations 타입은 관찰될 값을 반환하는 클로저를 사용합니다.변경 사항은 트랜잭션적이어서, 관찰 가능한 속성에 대한 여러 동기식 업데이트가 단일 시퀀스 값으로 일괄 처리됩니다. 업데이트 추적은 관찰 가능한 속성의 willSet으로 시작하여 다음 일시 중단 지점에서 완료됩니다. 이를 통해 scenePhase에 의존하지 않고 장면 모델의 상태가 변경될 때마다 자동으로 저장할 수 있습니다. Observations의 AsyncSequence는 구독 시 관찰된 속성의 초기 값을 방출합니다. Swift Observations AsyncSequence for State Changes useyourloaf.com
Swift 패키지에서의 접근 가능한 동시성 "Xcode 26에서는 Swift 6.2에서 '접근 가능한 동시성'을 도입하여 Swift 동시성을 단순화합니다. 이 접근 방식은 초기에 메인 스레드에서 코드를 실행하고 필요에 따라 백그라운드에서 작업을 이동하는 것을 우선시합니다. 기존 프로젝트에서는 Xcode 내의 빌드 설정을 조정하여 이를 채택할 수 있습니다. 새로운 프로젝트에서는 이 기능이 기본적으로 활성화되어 있으며 기본 액터 격리도 포함됩니다. '접근 가능한 동시성'을 활성화하면 InferIsolatedConformances 및 NonisolatedNonsendingByDefault와 같은 향후 기능을 잠금 해제할 수 있습니다. Swift 패키지도 이 기능을 사용할 수 있습니다. 이를 위해 swift-tools-version을 업데이트하고 대상 설정을 구성해야 합니다. Package.swift 내의 새로운 swiftSettings 옵션을 사용하여 기본 액터 격리를 설정할 수도 있습니다. 모든 기능을 활성화하려면 swift 설정에 "enableUpcomingFeature" 플래그를 추가해야 합니다. Swift 패키지의 모든 대상에 이러한 설정을 적용하려면 Package.swift 파일에 특정 구성 추가가 필요합니다. 초기 채택에서는 프로토콜과 관련된 컴파일러 경고, 예를 들어 CodingKey와 관련된 문제가 발생할 수 있습니다. 이러한 격리와 관련된 문제는 향후에 해결될 것으로 예상되며, 일단의 해결 방법이 있습니다." Approachable Concurrency in Swift Packages useyourloaf.com
Xcode에 Icon Composer 아이콘 추가 Icon Composer는 Xcode 26의 새로운 도구로, Liquid Glass 디자인 시스템의 아이콘을 구축하는 데 도움이 됩니다. Icon Composer를 사용하려면, 선호하는 디자인 도구에서 아이콘의 전경 레이어를 설계하고, 완전히 불투명한 SVG 레이어로 내보내어 Icon Composer에 가져옵니다. Icon Composer에서 배경을 추가하고, 레이어 크기 및 위치를 조정하고, 불투명도, 색상, 그라디언트, 그림자 및 유리 효과를 설정할 수 있습니다. Xcode는 지원되는 플랫폼에 대한 모든 아이콘 변형을 생성하는 데 단일 .icon 파일을 사용합니다. Xcode 프로젝트에 아이콘을 추가하려면, .icon 파일을 프로젝트 탐색기 사이드바에 끌어옵니다. 추가되면, Xcode에서 직접 Icon Composer에서 아이콘 파일을 열고 편집할 수 있습니다. 대상 설정의 App Icon Set Name이 .icon 확장자 없이 Icon Composer 아이콘 파일 이름과 일치하는지 확인하세요. 불행하게도, Icon Composer는 대체 앱 아이콘을 지원하지 않으며, 이미지 파일을 자산 카탈로그에 수동으로 추가해야 합니다. 이는 대체 앱 아이콘에 대한 Icon Composer의 유용성을 줄입니다. Apple은 Icon Composer 및 앱 아이콘 디자인에 대해 더 알아보기 위해 Human Interface Guidelines 및 WWDC 비디오와 같은 리소스를 제공합니다. Adding Icon Composer icons to Xcode useyourloaf.com
2025 WWDC 시청 가이드 WWDC 2025 시청 가이드는 원하는 세션을 계획하는 데 도움이 되며, 두 가지 큰 테마가 있습니다. 올해의 새로운 기능을 요약하는 Platforms State of the Union부터 시작하세요. 100개 이상의 세션이 있으므로 압도당하지 마세요 - 아직 배울 시간이 있습니다. Apple Developer 앱을 사용하여 재생, 트랜스크립트 및 코드 복사를 지원합니다. Swift 6.2가 출시되었습니다. Swift 동시성 채택의 고통을 완화하는 업데이트를 포함하여 싱글 스레드 기본 및 메인 액터 추론에 대한 옵트인입니다. 다른 필수 시청 세션에는 SwiftUI, UIKit, iPadOS, AppKit, watchOS 및 개발자 도구가 포함됩니다. 이 해의 Liquid Glass 디자인 세션은 필수 시청입니다. 테스트, SwiftData, WidgetKit 및 디자인 세션도 포함됩니다. 디자인 세션에서는 포괄적 앱 디자인, SF 심볼, 인터랙티브 스니펫 디자인 등에 대한 주제를 다룹니다. 플랫폼별 세션도 디자인을 높이는데 도움이 됩니다. WWDC 2025 Viewing Guide useyourloaf.com
CloudKit과 TipKit 동기화 애플은 iOS 17에서 사용자에게 상황에 맞는 팁을 보여주는 TipKit을 도입했으며, 팁 빈도와 제어 이벤트 추적을 유지합니다. iOS 18에서는 CloudKit을 사용하여 TipKit 상태를 동기화하여 각 기기에서 동일한 팁이 표시되는 것을 방지할 수 있습니다. CloudKit 동기화를 활성화하려면 Xcode에서 앱 대상을 선택하고 iCloud 기능을 추가한 다음 CloudKit을 선택합니다. 그런 다음 ".tips"로 끝나는 컨테이너 식별자를 추가하고 원격 알림과 함께 Background Modes 기능을 활성화합니다. TipKit은 기본적으로 CloudKit과 동기화되지 않으므로 Tips 데이터 저장소를 구성할 때 CloudKit 컨테이너를 활성화해야 합니다. .automatic 옵션을 사용하거나 특정 식별자를 전달하여 CloudKit 컨테이너를 구성할 수 있습니다. Core Data/SwiftData 데이터베이스를 CloudKit과 동기화할 때 잘못된 컨테이너 식별자를 사용할 수 있으므로 주의하십시오. 애플은 팁 동기화를 위해 별도의 컨테이너를 사용하는 것을 권장하며, 권한 파일에 Core Data/SwiftData 식별자를 먼저 나열하거나 영구 저장소를 로드하기 전에 명시적으로 설정할 수 있습니다. TipKit과 CloudKit의 동기화는 WWDC24에서 도입되었습니다. 또한, WWDC25 세일 기간 동안 Modern Auto Layout 책을 할인된 가격으로 구매할 수 있습니다. Syncing TipKit with CloudKit useyourloaf.com
"선택 사항이 있는 SwiftUI Picker" 또는 "선택적 선택이 가능한 SwiftUI Picker" SwiftUI 피커는 프로젝트 ID와 같은 선택 항목에 대한 바인딩을 필요로 합니다. 피커 내의 ForEach 루프는 자동으로 각 항목에 프로젝트 ID를 사용하여 태그를 적용합니다. 피커 항목이 선택되면 피커의 바인딩은 선택된 항목의 ID로 설정됩니다. 때로는 피커가 선택하지 않도록 옵셔널 바인딩으로 작동해야 할 때도 있습니다. 이를 달성하려면 각 피커 항목에 옵셔널 식별자를 사용하여 수동으로 태그를 지정해야 합니다. tag 수정자에는 태그가 옵셔널인지 여부를 나타내는 매개변수가 있으며, 기본값은 true입니다. "없음(None)" 옵션을 포함하려면 nil 값을 옵셔널 프로젝트 ID로 캐스팅한 Text 뷰를 피커에 추가할 수 있습니다. 옵셔널 선택 항목이 있는 전체 프로젝트 피커에는 "없음(None)" 옵션과 각 항목을 해당 프로젝트 ID로 수동으로 태깅하는 기능이 포함됩니다. 선택 바인딩은 옵셔널 프로젝트 ID로 선언됩니다. 피커의 본문에는 레이블과 "없음(None)" 옵션이 있는 피커 선택 항목, 그리고 수동 태깅이 포함된 ForEach 루프가 포함됩니다. SwiftUI Picker With Optional Selection useyourloaf.com
SwiftData의 부모 관계를 위한 Predicate 이 텍스트는 SwiftData의 Predicate를 사용하여 부모-자식 관계를 쿼리하는 방법에 대해 논의합니다. Project 모델 ( topics 배열 포함)과 Topic 모델 (선택적 project 속성 포함)을 소개합니다. 특정 프로젝트 내의 토픽을 쿼리하려면, Predicate가 topic.project?.persistentModelID가 프로젝트의 ID와 일치하는지 확인합니다. 여러 프로젝트에서 토픽을 쿼리할 때는 topic.project?.persistentModelID에 대해 직접 projects.contains를 사용하는 것이 작동하지 않습니다. 제안된 해결책은 flatMap을 사용하여 선택적 값을 안전하게 언래핑한 다음 포함 여부를 확인하는 것입니다. 또는 if-let 문을 사용하여 동일한 결과를 얻을 수 있지만, 덜 간결하다고 여겨집니다. 또한, 텍스트는 #Predicate 매크로가 다중 구성 요소가 있는 키 경로를 통해 속성에 직접 접근할 수 없다는 경고를 제공합니다. 해결 방법은 키 경로의 값을 Predicate에서 사용하기 전에 임시 변수에 할당하는 것입니다. 이러한 기술은 SwiftData 내에서 Predicate를 사용하여 관련 데이터를 효율적으로 쿼리하는 데 필수적입니다. SwiftData Predicates For Parent Relationships useyourloaf.com
SwiftUI 레이블 및 버튼 스타일 뷰 수정자 이 글은 SwiftUI의 Button과 Label 스타일을 사용자 정의하는 방법을 설명합니다. 여기에는 컴팩트한 가로 크기 클래스에서는 세로 레이아웃으로 전환되는 적응형 레이블 스타일과 채워진 노란색 캡슐과 고정폭 글꼴 디자인을 가진 사용자 지정 캡슐 버튼 스타일이 포함됩니다. 이러한 스타일은 .labelStyle 및 .buttonStyle 수정자를 사용하여 뷰에 적용할 수 있습니다. 하지만 LabelStyle이나 ButtonStyle에 편의성 확장을 추가하는 것은 덜 일반적인데, 이를 통해 수정자를 더욱 간결하게 작성할 수 있습니다. 이를 위해 이 글에서는 Apple이 기본 스타일을 정의하는 방식과 유사하게 ButtonStyle과 LabelStyle을 확장하는 것을 제안합니다. 여기에는 사용자 지정 스타일의 인스턴스를 반환하는 정적 속성이나 함수를 확장에 추가하는 것이 포함됩니다. 예를 들어, 캡슐 버튼 스타일은 CapsuleButtonStyle 인스턴스를 반환하는 정적 속성 capsule로 확장할 수 있습니다. 이를 통해 .buttonStyle(.capsule)과 같은 간결한 형태로 스타일을 적용할 수 있습니다. 사용자 지정 스타일에 구성 가능한 색상과 같은 매개변수가 있는 경우, 매개변수를 받아 사용자 지정 스타일의 인스턴스를 반환하는 함수를 확장에 추가할 수 있습니다. 이를 통해 .buttonStyle(.capsule(.orange))과 같이 매개변수와 함께 스타일을 적용할 수 있습니다. 이 글에서는 편리한 사용자 지정 스타일을 만들기 위해 ButtonStyle과 LabelStyle을 확장하는 방법의 예시를 제공합니다. SwiftUI Label and Button Style View Modifiers useyourloaf.com
SwiftUI 키보드 단축키 범위 iOS 14에 도입된 SwiftUI의 .keyboardShortcut 수정자는 컨트롤에 키보드 단축키를 할당할 수 있게 해줍니다. 이러한 단축키는 컨트롤의 주요 동작을 트리거합니다. 이 수정자는 기본 Command 키 외에 다른 보조 키를 사용자 정의할 수 있습니다. 주요 예시는 버튼에 단축키를 적용하여 뷰 간의 탐색을 보여줍니다. 놀랍게도 단축키는 연결된 컨트롤이 화면 밖에 있을 때도 활성 상태를 유지합니다. 이러한 동작은 단축키 대상을 찾기 위해 SwiftUI가 뷰 계층 구조를 깊이 우선 탐색하는 방식에서 비롯됩니다. 시스템은 가시성과 관계없이 첫 번째로 일치하는 컨트롤을 찾는 것을 우선시합니다. 이로 인해 화면 밖에 있는 컨트롤이 여전히 단축키에 반응하는 예상치 못한 동작이 발생할 수 있습니다. 해결 방법은 뷰 상태에 따라 .disabled 수정자를 사용하여 컨트롤을 비활성화하는 것입니다. 이렇게 하면 관련 컨트롤이 표시될 때만 단축키가 활성화됩니다. Curt Clifton의 코멘트는 추가적인 맥락을 제공합니다. SwiftUI Keyboard Shortcut Scope useyourloaf.com
SwiftUI 접근성 언어 SwiftUI로 언어 학습 앱을 만들 때, VoiceOver가 기기의 로케일과 다른 언어로 된 텍스트를 정확하게 발음하지 못할 수 있습니다. 이 문제를 해결하려면 VoiceOver에서 사용하는 접근성 언어를 변경해야 합니다. UIKit에서는 텍스트 레이블의 accessibilityLanguage 속성을 설정할 수 있지만, SwiftUI에서는 사용할 수 없습니다. 한 가지 제안된 해결책은 accessibilitySpeechLanguage 속성이 있는 AttributedString을 사용하는 것이지만, 작동하지 않습니다. 또 다른 해결책은 environment modifier를 사용하여 각 뷰의 로케일 환경을 변경하는 것입니다. 그러나 이는 Text 뷰에 verbatim 이니셜라이저를 사용하는 경우에만 작동합니다. 왜냐하면 기본적으로 텍스트를 지역화된 문자열 키로 취급하기 때문입니다. 이 해결책은 Text 뷰에서는 작동하지만, Label과 같은 뷰에서는 더 긴 형식이 필요합니다. 레이블 또는 자식 텍스트 뷰에 로케일을 적용할 수 있지만, 아이콘이 있는 Label을 사용하는 경우, Button에 적용해야만 로케일이 적용됩니다. 이는 VoiceOver가 "button"이라는 단어를 수정된 로케일로 발음하지만, 메인 텍스트는 올바르게 발음된다는 의미입니다. 결론적으로, SwiftUI에서 VoiceOver가 사용하는 접근성 언어를 변경하려면 각 뷰의 로케일 환경을 변경하는 것이 해결책입니다. SwiftUI Accessibility Language useyourloaf.com
SwiftUI 기본 스크롤 앵커 이 기사는 SwiftUI에서 스크롤 뷰 내 콘텐츠의 수직 정렬을 관리하는 방법, 특히 동적 타입 크기에 적응할 때의 방법을 논의합니다. 처음에는 화면 높이를 초과할 수 있는 콘텐츠를 수용하기 위해 간단한 스크롤 뷰가 사용됩니다. 하지만 이로 인해 콘텐츠가 스크롤 뷰보다 작을 때 콘텐츠가 상단에 정렬되는 바람직하지 않은 결과가 발생합니다. iOS 17에서는 defaultScrollAnchor 수정자가 도입되었지만, 스크롤 뷰 내에 콘텐츠가 들어갈 때만 중앙에 배치하는 섬세함이 부족합니다. iOS 18은 role 매개변수를 포함하는 새로운 defaultScrollAnchor 수정자를 통해 이 문제를 해결합니다. 이 매개변수를 통해 개발자는 .alignment를 사용하여 컨테이너보다 작은 콘텐츠를 정렬하는 것을 포함하여 다양한 상황에 대한 앵커 포인트를 사용자 정의할 수 있습니다. .alignment 역할에 대해 앵커를 .center로 설정하면 콘텐츠가 들어갈 때는 중앙에 배치되고 컨테이너 높이를 초과할 때는 상단에 정렬됩니다. 두 가지 변형의 뷰 수정자를 함께 사용하여 기본값을 변경하고 특정 역할에 대한 앵커를 재정의할 수 있습니다. 새로운 수정자는 컨테이너에 대한 크기에 따라 스크롤 뷰 콘텐츠 정렬을 관리하는 보다 정교한 접근 방식을 제공합니다. 이는 콘텐츠의 수직 위치를 동적으로 조정하여 더 나은 사용자 경험을 보장합니다. SwiftUI Default Scroll Anchor useyourloaf.com
Swift 테스트 완료 핸들러 작가는 XCTest 케이스를 Swift Testing으로 마이그레이션하고 있지만, 완료 핸들러에 의존하는 테스트 코드에서 문제가 발생했습니다. 코드는 커스텀 NSPersistentContainer 하위 클래스를 사용하여 코어 데이터 저장소를 비동기적으로 로드하고 완료 핸들러를 사용합니다. XCTest에서 작가는 비동기 작업을 테스트하기 위해 기대 메커니즘을 사용했습니다. XCTest 프레임워크는 기대를 생성하고, 이를 충족시킨 것으로 표시하고, 타임아웃 내에 충족되기를 기다리는 방법을 제공합니다. 그러나 Swift Testing은 기대를 사용하지 않으며, 확인은 완료 핸들러를 테스트하는 데 적합하지 않습니다. 테스트를 마이그레이션하기 위해 작가는 Swift 연속성을 사용하여 완료 핸들러 호출을 비동기 호환 호출로 변환합니다. 이 접근 방식은 XCTest에서도 사용할 수 있으며, 기대를 사용할 필요가 없습니다. 그러나 이 접근 방식의 단점은 연속성 메서드를 호출하지 않으면 테스트가 중단될 수 있으며, 연속성은 정확히 한 번 호출되어야 합니다. 테스트는 XCTest 어설션을 #expect으로 대체하여 Swift Testing으로 쉽게 마이그레이션할 수 있습니다. 결과 테스트는 Swift 연속성을 사용하여 비동기 작업을 테스트하고 예상 결과를 어설션합니다. Swift Testing Completion Handlers useyourloaf.com
스택 뷰를 탭하는 것 SwiftUI의 VStack과 HStack 뷰는 자동으로 자신의 경계 내의 빈 공간에서 탭을 등록하지 않는다. 이 문제는 컨테이너 뷰에 제스처를 연결할 때 발생하며, 탭은 포함된 뷰에서만 등록된다. 일반적인 해결 방법은 빈 공간을 채우기 위해 배경 뷰를 추가하는 것이다. 그러나 더 효율적인 해결 방법은 contentShape 수정자를 사용하는 것이다. contentShape 수정자는 제스처 히트 테스트에 사용되는 모양을 지정할 수 있다. 외부 VStack에 .contentShape(Rectangle())를 적용하면 전체 영역이 탭 대상이 된다. 이렇게 하면 VStack의 경계 내에서 어디서나 탭을 하면 관련된 제스처가 트리거된다. 이것은 컨테이너 뷰에서 빈 공간에서 탭에 반응하지 않는 제스처의 문제를 해결한다. 이 접근 방식은 불필요한 배경 뷰가 필요 없게 한다. contentShape 수정자는 컨테이너 뷰 내에서 제스처 상호 작용을 처리하는 더 깨끗하고 직접적인 해결책을 제공한다. Tapping on Stack Views useyourloaf.com
임시 사용자 알림 승인 로컬 사용자 알림을 보내는 데 필요한 권한을 요청하려면 사용자의 명시적인 승인을 얻어야 하며, 이는 원하는 옵션과 함께 requestAuthorization 메서드를 호출하여 수행할 수 있습니다. 그러나 이렇게 하면 사용자에게 권한 프롬프트가 표시되어 사용자에게 방해가 될 수 있습니다. iOS 12에서 도입된 예비 승인은 사용자에게 방해하지 않고 조용히 알림을 전달할 수 있는 대안을 제공합니다. 예비 승인을 요청하려면 승인 요청에 .provisional 옵션을 추가하세요. 예비 승인을 사용할 때 알림은 알림 센터에 버튼과 함께 전달되며 사용자는 알림을 유지하거나 끌 수 있습니다. 사용자는 즉시 알림을 전달하거나 조용히 전달하거나 예약된 요약의 일부로 전달할 수 있습니다. 예비 승인은 앱 아이콘에 배지 표시나 경고 표시를 허용하지 않으며, 이는 사용자가 알림 설정을 변경해야 합니다. 승인을 확인하려면 승인 상태를 확인할 때 예비 상태를 고려하세요. 예비 승인은 대부분의 앱에 적절한 타협이지만, 최종적으로는 특정 사용 사례에 따라 다를 수 있습니다. 알림을 전달하기 전에 승인 상태를 확인하는 것은 알림이 올바르게 전달되도록 하는 데 중요합니다. Provisional Authorization of User Notificatons useyourloaf.com
SwiftUI에서 버튼 이미지가 눌렸을 때 사용자가 버튼을 누를 때 SwiftUI 버튼이 표시하는 이미지를 변경하려면 기본 상태와 눌린 상태에 대한 두 개의 이미지를 허용하는 제목과 함께 사용자 지정 버튼 스타일을 생성할 수 있습니다. 이 사용자 지정 스타일은 ButtonStyle 프로토콜에 따라 구현되는 구조체를 생성하여 달성할 수 있습니다. ButtonStyleConfiguration에서는 버튼 레이블, isPressed 상태 및 버튼 역할에 액세스할 수 있으며, 표시할 이미지를 결정하는 데 사용할 수 있습니다. makeBody 메서드에서는 버튼 구성에 따라 isPressed 상태에 따라 올바른 이미지를 표시하는 레이블을 반환할 수 있습니다. 그런 다음 이 사용자 지정 스타일을 사용하여 특정 유형의 버튼, 예를 들어 InfoButton을 구축할 수 있습니다. 이 InfoButton은 눌렸을 때 수행할 액션과 함께 호출할 수 있습니다. 또한 눌렸을 때 이미지를 확대하는 애니메이션을 추가하여 symbolEffect 수정자를 사용할 수도 있습니다. 이 접근 방식으로 UIKit의 버튼 상태 구성과 유사한 효과를 SwiftUI에서 달성할 수 있습니다. 사용자 지정 버튼 스타일은 앱의 다른 버튼에 재사용할 수 있는 편리한 솔루션입니다. 전반적으로, SwiftUI 버튼의 모양을 사용자 지정하려면 사용자 지정 버튼 스타일을 생성하는 것이 좋은 방법입니다. 특히 기본 스타일이 요구 사항을 충족하지 않을 때입니다. SwiftUI Button Image When Pressed useyourloaf.com
애니메이션의 동작 감소 애플의 인간 인터페이스 가이드는 목적 없이 사용자 인터페이스에 애니메이션을 추가하는 것을 권장하지 않습니다. 이는 사용자에게 방해가 되고 불편할 수 있기 때문입니다. 애니메이션은 선택 사항이어야 하며 중요한 정보를 전달하는 유일한 방법이 되어서는 안 됩니다. 진동 애니메이션과 같은 특정 유형의 애니메이션은 사용자에게 문제가 될 수 있습니다. 사용자는 장치의 접근성 설정에서 애니메이션을 줄일 수 있으며, 이는 표준 뷰 전환에 영향을 줄 수 있습니다. 그러나 사용자 지정 애니메이션의 경우 개발자가 직접 문제가 되는 애니메이션을 비활성화하거나 대체해야 합니다. 애니메이션 감소를 위한 설정은 SwiftUI 뷰에서 @Environment 속성을 사용하여 감지할 수 있습니다. 문서에서는 애니메이션 감소 설정이 활성화된 경우 3차원 효과를 시뮬레이션하는 큰 애니메이션을 피하는 것을 권장합니다. 애니메이션을 비활성화하려면 개발자는 애니메이션 감소 상태를 고려하여 계산된 속성을 만들 수 있습니다. 이는 애니메이션 감소 설정이 활성화된 경우 애니메이션에 null을 반환하여 애니메이션을 비활성화하는 방식으로 수행할 수 있습니다. 개발자는 자신의 애니메이션에 대해 애니메이션 감소 설정에 반응하는 방법과 시기를 결정해야 합니다. Reducing Motion of Animations useyourloaf.com
Swift 매개변수화 테스트 애플이 WWDC24에서 @Test 매크로의 arguments 매개 변수를 사용하여 테스트 함수에 인수를 전달할 수 있는 Swift Testing을 소개했습니다. 이 기능은 매개 변수화된 테스트를 가능하게 합니다. 매개 변수화된 테스트에서는 각 값마다 arguments 컬렉션에서 테스트 함수가 한 번 호출됩니다. Test Navigator에는 각 테스트 실행 결과가 표시됩니다. 인수가 두 개 전달되면 Swift Testing은 두 인수의 모든 조합에 대한 테스트 케이스를 생성합니다. 그러나 인수는 최대 두 개로 제한되며 모든 조합이 필요하지 않은 경우 인수를 zip하여 짝을 지을 수 있습니다. 이 기능은 동일한 결과가 예상되는 입력 인수 컬렉션을 테스트할 때 유용합니다. 특히 CaseIterable 열거형을 사용하여 테스트를 구동할 때 특히 편리할 수 있습니다. 저자는 이 기능을 XCTest 기반 유닛 테스트를 Swift Testing으로 마이그레이션할 때 유용하게 사용할 수 있었는데, 특히 Core Data 관리 객체 클래스의 속성을 확인할 때 그렇습니다. Swift Testing 접근 방식은 병렬로 실행될 수 있는 독립적인 테스트 케이스와 더 명확한 실패 보고를 포함하여 for 루프를 사용하는 것보다 여러 가지 이점이 있습니다. 전반적으로 Swift Testing에서의 매개 변수화된 테스트는 테스트를 단순화하고 결합할 수 있으므로 실제로 유용한 기능입니다. Swift Parameterized Testing useyourloaf.com
XCTest를 Swift 테스트로 마이그레이션 스위프트 테스팅은 애플이 WWDC24에서 소개하고 Xcode 16에 포함된 스위프트용 오픈 소스 테스팅 프레임워크입니다. 이 프레임워크는 동시성과 매크로 gibi 현대적인 기능을 사용하며, 애플 플랫폼 외에도 윈도우와 리눅스를 지원합니다. XCTest에서 마이그레이션할 필요는 없지만, 스위프트 테스팅은 스위프트 동시성을 사용하여 프로세스 내에서 테스트를 실행할 수 있는 기능을 포함하여 몇 가지 이점을 제공합니다. 이는 물리적 장치에서 병렬 테스팅을 허용합니다.스위프트 테스팅을 시작하려면 테스트 대상에서 XCTest와 스위프트 테스팅 유닛 테스트를 혼합할 수 있지만, 테스트 내에서 테스팅 프레임워크를 혼합해서는 안 됩니다. 테스트 파일에 "import Testing"을 추가하여 스위프트 테스팅 프레임워크를 가져올 수 있습니다. 애플은 테스트를 그룹화하고, 구조체 또는 클래스에 추가하여 init 메서드를 사용하여 설정 및 해제하는 것을 권장합니다.스위프트 테스팅 테스트는 @Test 매크로를 추가하여 유닛 테스트가 되는 일반적인 스위프트 메서드입니다. 테스트 메서드를 async 또는 throws로 표시하고, 필요한 경우 액터로 분리할 수 있습니다. @Test 속성은 구현을 볼 수 있도록 확장할 수 있는 매크로입니다.스위프트 테스팅은 #expect 및 #require 매크로를 사용하여 AssertionError를 제공하며, 이는 XCTest의 XCTAssert보다 더 유연하고 정보가 풍부한 오류 메시지를 제공합니다. #expect 매크로는 실패한 기대를 로깅하고 테스트를 계속하고, #require 매크로는 오류가 발생하면 테스트 실행을 중지하는 throwing 버전입니다.또한 Issue.record를 사용하여 조건을 평가하지 않고 테스트를 실패시키는 것이 가능합니다. 이는 XCTest의 XCTFail과 유사합니다. 전반적으로, 스위프트 테스팅은 개선된 동시성 지원 및 더 유연한 AssertionError를 포함하여 XCTest보다 몇 가지 이점을 제공합니다. Migrating XCTest to Swift Testing useyourloaf.com
SwiftUI 차트 플로팅 함수 iOS 18의 SwiftUI 차트 프레임워크는 이제 LinePlot과 AreaPlot을 사용한 함수 플로팅을 지원합니다. 이러한 차트는 Double을 Double로 매핑하는 함수를 받아들입니다. 함수는 Double.nan 또는 Double.infinity를 반환하여 정의되지 않은 값을 처리할 수 있습니다. AreaPlot의 단일 함수는 함수와 x축 사이의 영역을 채웁니다. 두 개의 함수는 그들 사이의 영역을 정의할 수 있습니다. 함수 플로팅은 예상 함수 근사에 대한 데이터를 시각화하는 데 도움이 됩니다. 막대 차트와 함수 플롯을 결합하면 직접 비교할 수 있습니다. 예제는 AreaPlot과 LinePlot을 모두 사용하여 파라볼라와 막대 차트를 비교하는 것을 보여줍니다. 이 새로운 기능은 WWDC24에서 발표되었습니다. 이 정보는 원래 useyourloaf.com에 게시되었습니다. SwiftUI Charts Plotting Functions useyourloaf.com
자동 특성 추적 iOS 18에서 UIKit는 자동 트레이트 추적을 도입하여 레이아웃 업데이트에 대한 메소드에서 트레이트 변경 알림을 수동으로 등록할 필요를 제거했습니다. 이 기능은 UIView의 layoutSubviews, updatesConstraints, draw와 같은 다양한 뷰 및 뷰 컨트롤러 메소드에서 지원되며, UIViewController의 viewWillLayoutSubviews 및 updateViewConstraints도 포함됩니다. UIKit가 이러한 메소드 중 하나를 호출할 때, 액세스된 트레이트를 기록하고 해당 트레이트가 변경되면 뷰를 자동으로 무효화합니다. 이는 setNeedsLayout, setNeedsUpdateConstraints, setNeedsDisplay 또는 setNeedsUpdateConfiguration와 같은 메소드를 사용하여 수행됩니다. 예를 들어, draw를 재정의하는 UIView 하위 클래스에서 preferredContentSizeCategory 트레이트에 액세스하면 트레이트가 변경될 때 자동으로 setNeedsDisplay를 호출합니다. iOS 18 이전에는 개발자가 트레이트 변경을 수동으로 등록하고 setNeedsDisplay를 호출하여 draw를 다시 호출해야 했습니다. 그러나 자동 트레이트 추적을 사용하면 이 프로세스는 UIKit에 의해 처리됩니다. 이 기능은 트레이트 변경에 응답하는 프로세스를 단순화하고 필요한 코드의 양을 줄입니다. 자동 트레이트 추적은 iOS 18에서 중요한 개선으로, 개발자가 적응형 및 반응형 사용자 인터페이스를 만들기 더 쉽게 해줍니다. Automatic Trait Tracking useyourloaf.com
SwiftUI 자체 크기 조정 흐름 레이아웃 이 기사는 UICollectionView와 UICollectionViewFlowLayout을 사용하여 SwiftUI에서 카드 레이아웃을 만드는 방법에 대해 설명합니다. 카드의 이상적인 크기를 계산하는 방법, 행과 열에 있는 카드의 수를 결정하는 방법 및 컨테이너에 하위 뷰를 배치하는 방법을 설명합니다. 또한 캐싱과 사용자 지정 레이아웃을 수직 스크롤 뷰에서 사용하는 방법에 대해서도 다룹니다. SwiftUI Self-Sizing Flow Layouts useyourloaf.com
조건부 SwiftUI 접근성 레이블 iOS 18에서 애플은 SwiftUI의 다양한 접근성 수정자에 선택적 isEnabled 매개변수를 도입했습니다. 이 매개변수를 통해 개발자는 특정 조건에 따라 접근성 수정자를 조건부로 적용할 수 있습니다. isEnabled 매개변수는 .accessibilityLabel, .accessibilityInputLabels, .accessibilityValue 및 .accessibilityHint와 같은 수정자에 사용할 수 있습니다. 이 기능은 개발자가 기본 접근성 동작을 조건부로 재정의해야 할 때 유용합니다. 예를 들어, 좋아요 상태를 토글하는 버튼이 있는 항목 목록에서 버튼 동작에 대한 기본 접근성 레이블은 좋아요 상태에 따라 변경될 수 있습니다. 개발자는 조건부 접근성 레이블을 제공하는 대신 수정자의 isEnabled 변형을 사용하여 특정 조건이 충족될 때만 사용자 지정 레이블을 적용할 수 있습니다. 이 방법은 기본 레이블을 반복하고 지역화하는 것을 방지합니다. 제공된 예에서 .accessibilityLabel 수정자는 isEnabled 매개변수와 함께 사용되어 항목이 좋아요 상태일 때만 "좋아요 취소"라는 사용자 지정 레이블을 적용합니다. 이는 코드를 단순화하고 지역화 노력을 줄이는 작은 개선 사항입니다. iOS 18에서 isEnabled 매개변수를 도입함으로써 SwiftUI의 접근성 수정자의 유연성이 향상되었습니다. Conditional SwiftUI Accessibility Labels useyourloaf.com
아이폰 16 화면 크기 애플은 iPhone 15 Pro 모델을 단종하고 기본 iPhone 16 시리즈를 강화된 기능으로 확장하여 iPhone 16 라인업을 공개했습니다. Pro 모델은 화면 크기가 커져 iPhone 16 Pro는 6.3인치 디스플레이, iPhone 16 Pro Max는 6.9인치 화면을 탑재했습니다. Pro 모델은 화면 크기가 커졌음에도 불구하고 베젤 크기 감소로 인해 여전히 컴팩트한 형태를 유지합니다. 모든 모델은 이제 A18 칩과 함께 액션 버튼과 카메라 제어 버튼을 자랑합니다. 기본 iPhone 16 모델은 화면 크기를 유지하지만 여전히 ProMotion과 항상 켜져 있는 디스플레이가 없고 알루미늄 바디를 유지합니다. iPhone 16 Plus는 iPhone 16과 동일한 사양을 공유하지만 화면이 더 크고 배터리 수명이 향상되었습니다. Pro 모델은 USB-3 지원, ProMotion 디스플레이, 항상 켜져 있는 디스플레이와 함께 티타늄 바디와 같은 독점 기능을 계속 제공합니다. 화면이 커졌음에도 불구하고 Pro 모델은 이전 모델에 비해 크기가 약간 커졌습니다. App Store Connect는 이제 iPhone용 스크린샷을 한 세트만 요구하여 프로세스를 간소화하며, 이는 6.9인치 또는 6.5인치 디스플레이용일 수 있습니다. 전반적으로 iPhone 16 시리즈는 더 큰 화면, 향상된 기능, 세련된 디자인으로 점진적인 개선을 제공합니다. iPhone 16 Screen Sizes useyourloaf.com
SwiftData 표현식 iOS 18의 SwiftData에서의 Predicate Expressions: Core Data의 NSExpression과 유사한 기능iOS 18의 SwiftData는 Core Data의 NSExpression과 유사한 Predicate Expressions를 지원합니다.Predicate Expressions는 Foundation의 #Expression 매크로를 사용하여 복잡한 쿼리와 계산을 가능하게 합니다.Core Data에서 NSExpression은 최소값과 최대값 찾기와 같은 집계 쿼리를 허용합니다.SwiftData의 Predicate Expressions는 Predicate의 일부로 임의의 유형을 평가할 수 있습니다.예를 들어, 점수가 90점 이상인 레코드가 2개 이상 있는 항목을 찾을 수 있습니다.SwiftData의 Predicate Expressions는 다양한 메서드를 제공하는 PredicateExpressions를 사용합니다.하지만 최대값 찾기와 같은 일부 메서드는 일관성 있게 작동하지 않습니다.현재 SwiftData의 Predicate Expressions는 직접 Predicate를 작성하는 것에 비해 제한적인 장점만 제공합니다.SwiftData의 새로운 기능에 대한 문서는 Apple 개발자 웹사이트에서 확인할 수 있습니다.향후 업데이트를 통해 SwiftData의 Predicate Expressions 기능이 개선될 수 있습니다. SwiftData Expressions useyourloaf.com
SwiftUI 미리보기 가능 매크로 iOS 18의 Previewable 매크로: SwiftUI 미리보기 개선1. iOS 18의 Apple Previewable 매크로는 SwiftUI 미리보기의 상태 바인딩을 위한 기본 래퍼 뷰를 생성합니다. 2. SwiftUI 미리보기는 뷰 생성 경험을 향상시키지만, 종종 상태 바인딩이 있는 컨테이너 뷰를 요구합니다. 3. Previewable 매크로는 미리보기에서 직접 @State 속성을 선언하여 수동 래퍼 뷰의 필요성을 없애줍니다. 4. 매크로는 필요한 상태 속성을 포함하는 래퍼 뷰를 생성합니다. 5. Previewable 매크로를 사용하려면 미리보기 루트에서 @State 속성에 @Previewable 매크로를 표시합니다. 6. 매크로는 상태 속성과 미리보기 뷰를 포함하는 래퍼 뷰로 변환됩니다. 7. Previewable 매크로로 생성된 래퍼 뷰는 수동으로 생성된 래퍼 뷰와 유사합니다. 8. Previewable 매크로는 상태 바인딩을 사용하는 대화형 SwiftUI 미리보기 생성을 단순화합니다. 9. 래퍼 뷰에 필요한 기본 코드를 줄여 개발 프로세스를 간소화합니다. 10. WWDC24의 "SwiftUI의 새로운 기능"에서 Previewable 매크로와 다른 SwiftUI 발전에 대한 자세한 내용을 확인하세요. SwiftUI Previewable Macro useyourloaf.com
Xcode 자산 심볼 생성 비활성화 Xcode 16의 자산 심볼 기능 소개Xcode 16에서는 자산 카탈로그에 "자산 심볼" 속성을 추가하여 심볼 생성을 제어할 수 있게 되었습니다.이 속성을 통해 Swift 패키지는 이전에는 불가능했던 심볼 생성을 선택적으로 비활성화할 수 있습니다.기본 설정은 "상속"으로 프로젝트/타겟 설정을 상속받습니다."확장 켜기"는 심볼 생성을 활성화하고, "확장 끄기"는 Swift 패키지 내 개별 자산 카탈로그에서 심볼 생성을 비활성화합니다.심볼 생성은 자산 카탈로그 내 색상 및 이미지에 대한 Swift 및 Objective-C 심볼을 생성합니다.기본적으로 새 프로젝트에서는 심볼 생성이 활성화되어 있지만 프로젝트 설정에서 사용자 지정할 수 있습니다.생성된 색상 심볼은 ColorResource의 정적 속성이고 이미지 심볼은 ImageResource의 정적 속성입니다.SwiftUI, UIKit 및 AppKit 유형에 대한 프레임워크 확장도 생성되지만 프레임워크 지원을 제한할 수 있습니다.생성된 심볼의 첫 글자는 자산 카탈로그 이름이 대문자로 시작하더라도 소문자로 표시됩니다.이러한 선택적 비활성화 기능을 통해 Swift 패키지는 심볼 생성 충돌을 방지하고 자산 심볼 사용을 더욱 효과적으로 제어할 수 있습니다. Disabling Xcode Asset Symbol Generation useyourloaf.com
사용자 지정 SwiftUI 환경 값을 위한 진입 매크로 Entry 매크로는 보일러플레이트 코드를 줄여 SwiftUI 환경의 사용자 지정을 간소화합니다. 환경 키를 만들고 getter와 setter로 환경을 확장할 필요성을 없앱니다. 사용자는 @Entry 매크로를 사용하여 환경을 직접 확장할 수 있으며, 원하는 경우 기본값을 제공할 수 있습니다. 매크로는 내부 키와 값 저장을 처리하는 코드를 생성합니다. Transaction, ContainerValues 및 FocusedValues를 지원하며 iOS 13 이상과 호환됩니다. 매크로의 사용 사례는 사용자 지정 환경 값을 만드는 것이며, 수동 구현에 비해 더 간결하고 간소화된 접근 방식을 제공합니다. Entry Macro for Custom SwiftUI Environment Values useyourloaf.com
SwiftData 인덱스 iOS 17에서 도입된 SwiftData는 처음에는 데이터베이스 색인 기능이 부족했습니다. iOS 18에서는 이러한 누락을 수정하여 데이터베이스 조회를 향상시키는 페치 색인을 허용했습니다. Core Data는 오랫동안 페치 색인을 추가하는 기능을 지원해 왔으며, 이는 특정 속성을 기반으로 데이터베이스 조회를 가속화합니다. Xcode Core Data 모델 편집기에서 엔터티를 선택하고 "페치 색인 추가" 옵션을 사용하여 페치 색인을 추가할 수 있습니다.하지만 iOS 18에서 SwiftData에 페치 색인 지원을 도입했음에도 불구하고 Xcode 16은 여전히 페치 색인이 지원되지 않는다는 경고를 표시합니다. SwiftData 페치 색인을 추가하려면 각 색인의 키 경로를 지정하기 위해 #Index 매크로를 사용하십시오. 각 모델 클래스에 #Index 매크로를 한 번만 사용할 수 있으므로 모든 색인은 단일 매크로에 나열해야 합니다. 중복 속성을 가진 항목을 정렬하는 데 유용한 복합 색인도 추가할 수 있습니다. 자세한 내용은 "SwiftData의 새로운 기능"이라는 WWDC24 문서를 참조하십시오. SwiftData Indexes useyourloaf.com
Swift 스위치 및 if 표현식 Swift 5.9에서는 if 및 switch 문을 표현식으로 사용할 수 있습니다.이를 통해 이러한 문에서 값을 반환하거나 변수에 할당할 수 있습니다.예를 들어, switch 표현식을 사용하여 열거형 상태와 연결된 URL의 마지막 경로 구성 요소를 결정할 수 있습니다.하지만 if의 각 분기 또는 switch의 각 케이스는 단일 표현식이어야 합니다.또한 if 문에는 else가 포함되어야 하고 모든 분기에서 동일한 유형을 반환해야 합니다.이러한 제한 사항으로 인해 if 및 switch 표현식의 유용성이 다소 제한될 수 있습니다.컴파일러는 경우에 따라 유형 지정을 요구할 수 있습니다.이러한 표현식에 대한 자세한 내용은 SE-0380을 참조하십시오. Swift Switch And If Expressions useyourloaf.com
Xcode 명시적 빌드 모듈 Xcode 16의 명시적 모듈 빌드: 빌드 속도 향상을 위한 새로운 접근 방식Xcode 16은 암시적 모듈 빌드로 인해 빌드 작업이 지연되는 문제를 해결하기 위해 "명시적 모듈 빌드"를 실험적으로 도입했습니다. 이 새로운 접근 방식은 Xcode가 소스 파일을 스캔하여 모든 모듈에 대한 종속성 그래프를 구축하는 방식으로, 의존성이 준비된 모듈을 지연 없이 빌드할 수 있도록 합니다.현재 C 및 Objective-C 코드의 경우 명시적 모듈 빌드가 기본적으로 활성화되어 있지만, Swift 코드는 실험 설정이 필요합니다. 빌드 타임라인을 보면 명시적 모듈 빌드가 모듈 컴파일을 더 빨리 시작하지만, 초기 테스트 결과 암시적 빌드보다 속도가 느릴 수 있습니다. 명시적 모듈 빌드는 또한 빌드된 모듈을 디버거와 공유하여 표현식을 평가할 때 발생하는 지연을 줄일 수 있습니다.이 기능은 Xcode 16에서 아직 실험 단계이며, 향후 베타 버전에서 변경될 수 있습니다. 자세한 내용은 Apple의 WWDC24 세션 및 명시적 모듈 종속성을 사용한 빌드에 대한 문서를 참조하십시오. Xcode Explicitly Built Modules useyourloaf.com
WWDC 2024 시청 가이드 WWDC 2024 세션 탐색 가이드WWDC 2024 세션을 탐색하려면 먼저 플랫폼 현황 보고서를 통해 올해의 업데이트를 개괄적으로 살펴보세요. 주요 업데이트:- Swift 6: 언어 개선 및 새로운 정적 Linux SDK를 도입했습니다. - SwiftUI: 부동 탭 바, 사용자 정의 컨트롤 등 새로운 기능이 추가되었습니다. - UIKit: 문서 실행 경험, 새로운 애니메이션 등이 향상되었습니다. - iPadOS: 탭 및 사이드바 경험 개선에 중점을 두었습니다. - AppKit: Writing Tools API, 창 타일링 등 새로운 기능이 추가되었습니다. - watchOS: 라이브 활동 기능을 도입했습니다. - tvOS: TVML 앱을 SwiftUI로 마이그레이션하도록 권장합니다. - 크로스 플랫폼 세션: UI 애니메이션, 새로운 문서 실행 경험 등을 다룹니다. - Xcode 16: 기기 모델을 사용한 코드 완성, 미리 볼 수 있는 매크로 등이 추가되었습니다. - 개발자 지원: Swift 테스트 프레임워크, Xcode Cloud 워크플로우 등을 활용할 수 있습니다. - 로컬라이징 및 접근성: 다국어 키보드 지원, 개선된 동적 유형 조정 등이 제공됩니다. - StoreKit 및 앱 내 구매: 거래 기록 개선, AdAttributionKit을 통한 새로운 개인 정보 보호 기능을 갖춘 광고 속성 등이 포함됩니다. WWDC 2024 Viewing Guide useyourloaf.com
2024년 아이패드 화면 크기 애플은 13인치 및 11인치 iPad Pro(M4)와 13인치 및 11인치 iPad Air(M2)의 네 가지 새로운 iPad 모델을 출시했습니다.iPad Pro는 M4 칩, 새로운 울트라 레티나 XDR OLED 화면 및 가로 방향 얼굴 ID 카메라를 탑재했습니다.iPad Air는 M2 칩을 탑재하지만 IPS 리퀴드 레티나 디스플레이와 터치 ID는 유지합니다.13인치 모델은 새로운 명명 규칙에도 불구하고 이전 12.9인치 및 10.9인치 모델과 동일한 디스플레이 크기를 갖습니다.Pro 모델은 Air 모델보다 얇으며, 13인치 모델은 5.1mm, 11인치 모델은 5.3mm입니다.모든 네 가지 모델은 Apple Pencil Pro 및 Apple Pencil(USB-C)을 지원하며, 1세대/2세대 Apple Pencil은 더 이상 호환되지 않습니다.Pro 모델의 경우 최소 1TB 저장 용량을 갖춘 모델에만 4개의 성능 코어가 있는 10코어 CPU와 16GB RAM을 사용할 수 있습니다.엔트리 레벨 iPad(10세대) 및 iPad mini(6세대)는 변경되지 않았습니다.개발자는 13인치 iPad와 12.9인치 iPad Pro(2세대) 모두에 대한 앱 스토어 스크린샷을 업로드해야 합니다. 13인치 스크린샷은 동일한 디스플레이 크기를 가진 Pro 또는 Air 모델을 모두 나타낼 수 있습니다. iPad 2024 Screen Sizes useyourloaf.com
SwiftUI 파이 차트 SwiftUI에서 파이 차트 사용하기: iOS 17 가이드1. 애플은 iOS 17에서 SwiftUI에 파이 차트를 도입했습니다. 2. "angle" 파라미터를 사용하여 각 부문의 크기를 나타내는 SectorMark 뷰를 사용하여 파이 차트를 만듭니다. 3. 데이터는 고정 범위 또는 동적 값으로 표시할 수 있습니다. 4. SectorMark는 내부 및 외부 반지름, 그리고 각도 인셋으로 사용자 지정할 수 있습니다. 5. SwiftUI 차트는 모서리 반지름과 범례 구성을 포함한 광범위한 사용자 지정 옵션을 제공합니다. 6. 차트 배경은 파이 차트 중앙에 뷰를 표시하는 데 사용할 수 있습니다. 7. .chartAngleSelection 뷰 수정자를 사용하고 선택된 부문을 찾아 상호 작용을 추가할 수 있습니다. 8. 선택된 부문의 불투명도를 조정하여 강조 표시할 수 있습니다. 9. 선택된 부문에 대한 세부 정보를 표시하는 사용자 지정 제목 뷰를 배경에 표시할 수 있습니다. 10. 애플은 SwiftUI에서 파이 차트를 탐색하기 위한 추가 리소스와 예제를 제공합니다. SwiftUI Pie Charts useyourloaf.com