WWDC24 - 개발자의 시선으로 ( Xcode )

cheshire0105·2024년 6월 11일

iOS

목록 보기
16/46
post-thumbnail

들어가며

Xcode도 새로운 기능이 많이 생겼다. 내가 기다렸던 MS의 코파일럿 같은 기능이 Swift Assist로 추가 되었고 Swift Testing를 통해 테스트를 통해 코드를 작성 할 수 있다. 좀 더 편하게 코드를 작성 할 수 있지만 더 디테일 하게 테스트 하고 컨트롤 할 수 있게 된 것이다.

Xcode 16 하이라이트

아이디어를 예측 코드 완성과 빠른 미리보기로 코드로 변환한다. 명시적 모듈로 빌드를 가속화하고, 개선된 진단 기능으로 앱 성능에 대한 깊은 통찰을 제공한다. 새로운 Swift Testing 프레임워크로 쉽게 테스트를 작성할 수 있다.

Predictive code completion

  • 새로운 코딩 모델은 Swift 및 Apple SDK를 위해 특별히 훈련되었다.
  • 이 모델은 Mac에서 로컬로 실행되어 코드를 비공개로 유지하며, 오프라인에서도 작동한다.
  • Xcode는 최신 SDK 및 언어 변경 사항과 함께 모델을 자동으로 다운로드하고 업데이트한다.

Swift Assist

  • Swift Assist는 자연어를 사용하여 코딩 질문에 답변하고 새로운 API 실험과 같은 작업을 도와준다.
  • Swift Assist는 Apple의 최신 SDK 및 Swift 언어 기능을 알고 있다.
  • 클라우드에서 실행되며, 개인정보 보호와 보안을 염두에 두고 설계되었다.
  • 사용자의 코드는 서버에 저장되지 않으며, Apple은 이를 기계 학습 모델 훈련에 사용하지 않는다.

Swift Testing

  • 표현력이 풍부한 API가 테스트를 쉽게 작성할 수 있게 하며, 테스트 결과는 코드와 인라인으로 표시되어 테스트 실패 위치를 쉽게 확인할 수 있다.
  • 태그를 사용하여 지정된 기준에 따라 선택적으로 테스트를 실행할 수 있다.
  • #expect와 같은 매크로를 사용하면 복잡한 표현식을 캡처하고 테스트 실패 시 풍부하고 자세한 출력을 제공할 수 있다.
  • 파라미터화를 통해 일련의 값에 대해 동일한 테스트를 쉽게 실행할 수 있다.

Additional features

  • 스택 프레임의 관련 코드를 한 화면에서 볼 수 있는 백트레이스 단일 뷰를 제공한다.
  • Instruments에서 프로파일링 데이터의 새로운 화염 그래프에 접근할 수 있다.
  • 문자열 카탈로그 개선이 지역화 작업을 돕는다.
  • 명시적으로 빌드된 모듈이 빌드 성능과 신뢰성을 향상시킨다.

주목할만한 지점, 활용 해볼 만한 지점

Swift Testing 는 적은 리소스로 테스트가 가능 하며 좀 더 빠르고 효율적으로 코드를 작성 할 수 있다.

Swift Testing 의 사용 예시

Swift Testing은 Swift 언어로 테스트를 쉽게 작성하고 실행할 수 있게 해주는 라이브러리이다. 아래는 Swift Testing을 사용하는 방법과 그 장점에 대해 쉽게 설명한 내용이다.

1. 간단한 테스트 작성

Swift Testing을 사용하면 복잡한 테스트 시나리오를 간단한 코드로 작성할 수 있다. 예를 들어, 문자열 비교 테스트를 작성해보자:

@Test 
func helloWorld() {
  let greeting = "Hello, world!"
  #expect(greeting == "Hello") // 테스트 실패: (greeting → "Hello, world!") == "Hello"
}

이 코드는 문자열 greeting이 "Hello"와 같은지 테스트한다. 결과가 다르면 어떤 값이 잘못되었는지 쉽게 알 수 있다.

2. 조건에 따라 테스트 실행

특정 조건이 충족될 때만 테스트를 실행할 수 있다. 예를 들어, 댓글 기능이 활성화된 경우에만 테스트를 실행할 수 있다:

@Test(.enabled(if: AppFeatures.isCommentingEnabled))
func videoCommenting() async throws {
  let video = try await videoLibrary.video(named: "A Beach")
  #expect(video.comments.contains("So picturesque!"))
}

이 코드는 AppFeatures.isCommentingEnabled가 참일 때만 실행된다.

3. 테스트 그룹화 및 태그

테스트를 그룹으로 묶거나 태그를 달아 관리할 수 있다. 예를 들어, 비디오 메타데이터를 테스트하는 경우:

@Test("Check video metadata", .tags(.metadata))
func videoMetadata() {
  let video = Video(fileName: "By the Lake.mov")
  let expectedMetadata = Metadata(duration: .seconds(90))
  #expect(video.metadata == expectedMetadata)
}

이 코드는 metadata 태그가 달린 테스트로, 비디오의 메타데이터를 검증한다.

4. 여러 입력값 테스트

같은 테스트를 여러 다른 입력값에 대해 반복할 수 있다. 예를 들어, 여러 비디오 이름을 테스트하는 경우:

@Test("Continents mentioned in videos", arguments: [
  "A Beach", "By the Lake", "Camping in the Woods"
])
func mentionedContinents(videoName: String) async throws {
  let videoLibrary = try await VideoLibrary()
  let video = try await videoLibrary.video(named: videoName)
  #expect(video.mentionedContinents.count <= 3)
}

이 코드는 세 가지 비디오 이름 각각에 대해 테스트를 실행한다.

장점 요약

  • 적은 코드: 복잡한 테스트를 간단한 코드로 작성할 수 있다.
  • 빠른 실행: 테스트가 자동으로 병렬로 실행되어 더 빨리 완료된다.
  • 확장성: 여러 플랫폼에서 일관된 테스트 결과를 제공한다.
  • 통합성: 최신 Swift 기능과 쉽게 통합된다.

참고 및 출처

swift-testing Git Hub
애플 WWDC24 swift-testing 비디오

0개의 댓글