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
복사
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 가 런타임 상황에 따라 유동적으로 특정 테스트를 스킵 할 수 있게 되었습니다. 예컨대 서버에서 특정 아이템을 받아와야 진행 할 수 있는 테스트가 있는데, 그 아이템이 서버에 현재 없는 상황이라면 테스트를 “실패”로 돌리는 것이 아니라 “스킵” 하는 것이 올바른 선택인 경우도 있죠. 스킵을 하기 위해선 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
Debugging
•
이제 View Debugger가 LayoutGuide ( UILayoutGuide , NSLayoutGuide ) 와 그것들이 참조하는 constraints들을 보여줍니다. (20387325)
•
ViewDebugging에서 이제 Show Layers 메뉴를 사용해 Layer들을 볼 수 있습니다. CoreAnimation관련해서 뭔가 업데이트 되는 것은 정말 오랜만이네요! (15775898))
•
Debug Navigator에서 uncaught exception의 backtrace를 통해 Exception 객체를 상세히 볼 수 있습니다. (8045587)
개인적 감상
Swift 5.2와 함께 아주 많은 것들이 바뀌었네요! 여기에 구체적으로 적지는 않았지만, 향상된 에러메시지 및 개선된 빌드 퍼포먼스 등, 개발경험에 중요한 요소들에서 많은 개선이 있었습니다. 특히 테스트 관련 개발플로우에서 개선사항이 많은 점이 아주 반갑네요. 빨리 정식 버전이 출시 되었으면 좋겠습니다!