Search
Duplicate
🛠️

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

Created
2020/02/06
Tags
Programming
Tools
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])
Swift
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)
Swift
예를 들어, Decoder는 기본적으로 decode를 해야 합니다. 이를 위해 기존에는
let decoder = Decoder() let decodedValue = decoder.decode(with: json)
Swift
요런 식으로 코드를 짰었지요. 하지만 이제 아래와 같이 짤 수 있다는 겁니다
let decodedValue = Decoder(json:json)
Swift
자세한 Motivation 및 UseCase는 SE-0253 를 참고해주세요.

Swift Package Manager

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

Test

XCTAssertEqualWithAccuracy 및 XCTAssertNotEqualWithAccuracy 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… }
Swift
이전에는 새 테스트 돌아갈 때마다 앱을 재설치했는데, 이제는 그러지 않습니다!! 테스트 속도가 훨씬 빨라지겠네요! (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와 함께 아주 많은 것들이 바뀌었네요! 여기에 구체적으로 적지는 않았지만, 향상된 에러메시지 및 개선된 빌드 퍼포먼스 등, 개발경험에 중요한 요소들에서 많은 개선이 있었습니다. 특히 테스트 관련 개발플로우에서 개선사항이 많은 점이 아주 반갑네요. 빨리 정식 버전이 출시 되었으면 좋겠습니다!