Skip to content →

Xcode 11.4 ReleaseNotes 중 특별히 관심가는 내용들

Xcode 11.4 Release Note의 내용 중 저에게 의미있는 내용들을 추려보았습니다. 가급적 직역하려 노력했지만, 중간중간 의역 및 개인적 감상이 포함되어 있습니다. 각 항목별로 고유번호를 첨부해 놓았으니, 원문이 궁금하신 분들은 Xcode 11.4 Release Note 에서 해당 고유번호로 검색하시면 빠르게 원문을 확인 하실 수 있습니다

Swift

  • Subscripts 가 default 값을 가질 수 있게 되었습니다! IndexOutOfError를 이제 좀 덜 보게 되려나요? (59012048)`
struct Subscriptable {
    subscript(x: Int, y: Int = 0) {
      ...
    }
}

let s = Subscriptable()
print(s[0])
  • Type선언부에 callAsFunction 메소드를 추가해서, 타입을 함수처럼 쓸 수 있게 되었습니다. (59014791)
struct Adder {
    var base: Int

    func callAsFunction(_ x: Int) -> Int {
      return x + base
    }
}

var adder = Adder(base: 3)
adder(10) // returns 13, same as adder.callAsFunction(10)

예를 들어, Decoder는 기본적으로 decode를 해야 합니다. 이를 위해 기존에는

let decoder = Decoder()
let decodedValue = decoder.decode(with: json)

요런 식으로 코드를 짰었지요. 하지만 이제 아래와 같이 짤 수 있다는 겁니다

let decodedValue = Decoder(json:json)

자세한 Motivation 및 UseCase는 SE-0253 를 참고해주세요.

Swift Package Manager

  • Dynamic Library로 만들어진 Swift Package로 구성된 iOS, tvOS, watchOS앱이 AppStore에 제출 될 수 있습니다. (FB7303066)

Test

  • XCTAssertEqualWithAccuracyXCTAssertNotEqualWithAccuracy API가 모든 floating type들을 지원합니다. (57523034)
  • XCUIApplication 에 새 메소드가 추가되었습니다. resetAuthorizationStatus(for:) 인데요, XCUIProtectedResource 를 인자로 받습니다. 이 녀석들로 “접근 권한” 설정들을 초기화 할 수 있습니다. 따라서 “앱 최초 설치시의 권한 팝업 뜰 때의 시나리오“를 더 쉽게 테스트 할 수 있습니다. (56628656)
  • XCTest 에서 에러를 뱉을 수 있는 setUpWithError() tearDownWithError() 메소드가 추가되었습니다. (42069831)
  • XCTest 가 런타임 상황에 따라 유동적으로 특정 테스트를 스킵 할 수 있게 되었습니다. 예컨대 서버에서 특정 아이템을 받아와야 진행 할 수 있는 테스트가 있는데, 그 아이템이 서버에 현재 없는 상황이라면 테스트를 “실패”로 돌리는 것이 아니라 “스킵” 하는 것이 올바른 선택인 경우도 있죠. 스킵을 하기 위해선 XCTSkip* 메소드를 아래와 같이 test메소드나 setup메소드에서 실행해 주세요. (13696693)
func test_canAuthenticate() throws {
    XCTSkipIf(AuthManager.canAccessServer == false, "Can't access server")

    // Perform test…
}
  • 이전에는 새 테스트 돌아갈 때마다 앱을 재설치했는데, 이제는 그러지 않습니다!! 테스트 속도가 훨씬 빨라지겠네요! (24776269)

Simulator

  • Simulator에서 이제 remote push notifications를 지원합니다! APNs파일을 원하는 시뮬레이터에 드래그&드랍하세요. 이 파일은 “aps”키 및 valid한 애플 push notification service payload가 포함된 json 파일이어야 합니다. 또한 탑레벨에 “Simulator Target Bundle”이라는 String 값이 있어야 하는데, 앱 BundleID와 같은 값이어야 합니다. (8164566)

Devices

  • Devices and Simulator화면에서, iOS 13.0이 올라간 기기들의 OS이름과 기기명이 제대로 반영되지 않을 수 있습니다. (55044395)
    • Workaround: Mac을 재부팅하세요 😓

Preview

  • Preview에서 ForEach 를 사용하면 프리뷰가 깨질 수 있습니다. (58985849)
    • Workaround: Group 을 쓰세요. 😓

Debugging

  • 이제 View Debugger가 LayoutGuide ( UILayoutGuide , NSLayoutGuide ) 와 그것들이 참조하는 constraints들을 보여줍니다. (20387325)
  • ViewDebugging에서 이제 Show Layers 메뉴를 사용해 Layer들을 볼 수 있습니다. CoreAnimation관련해서 뭔가 업데이트 되는 것은 정말 오랜만이네요! (15775898))
  • Debug Navigator에서 uncaught exception의 backtrace를 통해 Exception 객체를 상세히 볼 수 있습니다. (8045587)

개인적 감상

Swift 5.2와 함께 아주 많은 것들이 바뀌었네요! 여기에 구체적으로 적지는 않았지만, 향상된 에러메시지 및 개선된 빌드 퍼포먼스 등, 개발경험에 중요한 요소들에서 많은 개선이 있었습니다. 특히 테스트 관련 개발플로우에서 개선사항이 많은 점이 아주 반갑네요. 빨리 정식 버전이 출시 되었으면 좋겠습니다!

Published in 프로그래밍

Comments

댓글 남기기

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.

%d 블로거가 이것을 좋아합니다: