티스토리 뷰

반응형

 

안녕하세요 :) Zedd입니다.

Xcode 13.3 Beta가 또 고새 나왔네요.

릴리즈노트를 보니 New Feature들도 좀 있는 것 같아서 New Feature위주로 호다닥 보겠습니다.

Xcode 13.3부터는 반드시 macOS Monterey 12 or later가 필요하네요. (Xcode 13.2.1까지는 빅서여도 ㄱㅊ)

저는 원래 빅서였는데, 이거 때문에 올림 ㅎ;;

 

# Build System

빌드 시스템과 Swift 컴파일러 -> 사용 가능한 코어를 더 잘 활용하는 새로운 모드가 나옴

=> Swift 프로젝트의 빌드 속도가 빨라진다.

모드는 옵트인이며 전역적으로 활성화할 수 있음. 

shell
defaults write com.apple.dt.XCBuild EnableSwiftBuildSystemIntegration 1

응 안속아~ (제발.. 🙏🏻) 

 

# Build System > Resolved Issues

- ASCII가 아닌 문자가 있는 파일 경로가 포함된 프로젝트를 빌드할 때 발생하는 충돌을 수정했습니다.

 

# Debugging

최적화(optimizations)를 끈 상태에서 컴파일할 때 Swift 컴파일러와 Clang은 더 이상 ARM64 타겟에서 중복 분기 명령어를 제거하지 않음.

이는 -Onone으로 컴파일할 때 약간 더 큰 바이너리를 생성하는 대신 더 많은 중단점 위치를 활성화하여 디버그 가능성을 향상.

 

# Documentation

Xcode는 이제 apps && 커맨드라인 툴과 같은  executable targets의 Swift 코드에서 documentation을 빌드할 수 있음.

(DocC말하는거겠죠?!)

 

# Instruments

Xcode memory graph debugger 및 leaks command line의 정확도 개선 

객체 참조를 더 정확하게 스캔 -> 더 정확한 메모리 누수 분석, strong, weak, unowned reference types 식별 가능.

 

# Organizer

이제 10개 이하의 앱이 있고 이전에 어떤 앱도 구독하지 않은 경우, 앱에 대한 Smart Insights 알림을 자동으로 보냄.

이 기능을 활성화 하려면 Organizer에서 Regressions item 또는 any of the Metrics items 을 클릭.

(위에껄 클릭하라는데 어디서 클릭하라는지는 모르겠음..) 

Organizer에 Regressions Section이 생기긴 했네요. 

 

# Source Editor

- Code completion은 이제 if case..에 대한 enum 인스턴스를 제안함.

- 액세스할 수 없는 symbol를 완성할 때 Code completion은 더 이상 모듈을 자동으로 가져오지 않음

 

# Source Editor > Resolved Issues

- 프로젝트를 닫을 때 Xcode가 멈추는 문제를 수정

- import문이 많은 프로젝트에서 Xcode가 중단될 수 있는 문제 수정

- 처음으로 code completion을 표시할 때 Xcode가 중단될 수 있는 문제 수정

- generic function의 optional type으로 인해 들여쓰기 문제가 발생하는 문제 수정

- 확장자가 없는 대용량 파일이 포함된 Swift 패키지를 열 때 Xcode가 중단되는 문제 수정

 

# Swift

릴리즈노트에 딱히 Swift 5.6기능이다~ 라고 나오진 않았지만, Proposal을 봤을 때 Swift 5.6들의 기능이 나와있네요.

 

1. 잠재적인 data races를 나타내는 경고 생성

이제 Swift는 non-Sendable types이 actor 또는 task boundaries를 넘어 전달될 때 잠재적인 data races를 나타내는 경고를 생성함 

class MyCounter {
  var value = 0
}

func f() -> MyCounter {
  let counter = MyCounter()
  Task {
    counter.value += 1  // warning: capture of non-Sendable type 'MyCounter'
  }
  return counter
}

(Xcode 13.3 Beta 1로 해봤는데 Warning안뜸 ㅎ;)

 

2.  #unavailable 키워드 사용가능

새로운 #unavailable 키워드를 사용하여 역가용성 조건을 작성할 수 있음

if #unavailable(iOS 15.0) {
    // Old functionality
} else {
    // iOS 15 functionality 
}

 

3. type placeholders 포함 가능

이제 type expressions  및 annotations에 type placeholders를 포함할 수 있음.

type placeholders는 컴파일러가 일반적인 타입 유추 규칙에 따라 해당 위치에 대한 타입을 설정하도록 지시한다.

type placeholders를 사용하려면 타입 이름 대신 _(underscore)를 입력. 

let zedd: _ = "Zedd"

이게 가능해짐. 

근데 원래 변수명에는 _ 가 가능했던 부분이니까

let _: _ = "Zedd"

이것도 가능 ㅎ;

let dict: [_: String] = [0: "zero", 1: "one", 2: "two”]

이런것도 가능.

위 예제로 보면, 이제 컴파일러가 key type이 Int구나~를 유추할 수 있게됨.

물론

let dict: [_: _] = [0: "zero", 1: "one", 2: "two"]

이것도 당연히 가능 

 

근데 

let dict = [0: "zero", 1: "one", 2: "two”]

이거랑 뭐가 다르지...

 

4. 포인터 타입 불일치를 허용

이제 Swift 컴파일러는 C언어에서 해당 포인터 타입을 alias로 허용하는 한 C에서 가져온 함수를 직접 호출 할 때 제한된 포인터 타입 불일치를 허용함. 

결과적으로 모든 Swift Unsafe[Mutable]Pointer<T> 또는 Unsafe[Mutable]RawPointer는 [signed|unsigned] char *로 선언된 C 함수 argument에 전달할 수 있게된다. 

Swift Unsafe[Mutable]Pointer<T>는 T와 부호만 다른 정수 유형을 사용하여 C 함수 argument에 전달할 수 있음. 

long long decode_int64(const char *ptr_to_int64);

또한, raw pointer를 함수 argument로 직접 전달할 수 있다. 

func decodeAsInt64(data: Data) -> Int64 {
    data.withUnsafeBytes { (bytes: UnsafeRawBufferPointer) in
        decode_int64(bytes.baseAddress!)
    }
}

 

5. "Self requirements"에 대한 참조가 nested type의 부모에서 올바르게 감지

protocol members의 type signatures에서 Self 또는 소위 "Self requirements"에 대한 참조가 nested type의 부모에서 올바르게 감지됨.

결과적으로 protocol에서 다음과 같은 protocol members를 선언할 수 없음.

struct Outer<T> {
  struct Inner {}
}

protocol P {}
extension P {
  func method(arg: Outer<Self>.Inner) {}
}

func test(p: P) {
  // error: 'method' has a 'Self' requirement and cannot be used on a value of
  // protocol type (use a generic constraint instead).
  _ = p.method
}

 

# Swift Package Manager

1.  SE-0303SE-0325에 정의된 build tool plugins을 지원.

이로써 소스코드 생성과 같이 빌드 작업중에 실행되어야 하는 도구를 지정할 수 있음.

 

2. SE-0332 에 정의된 command plugins을 지원

이로써 Package는 Package에 대한 custom actions을 수행하기 위해 swift package command line을 사용하여 호출할 수 있는 명령을 정의할 수 있음. 

 

이렇게 Xcode 13.3 Beta 릴리즈노트에 있는 New Feature들을 살펴봤는데, 

생략한것도 있으니.. 자세한 내용은 릴리즈 노트를 참고해주세요 ㅎㅎ

 


# iOS 15.4

iOS 15.4 Beta도 나왔는데요. 살짝 보도록 하겠습니다. 

iOS 15.4의 가장 큰 신기능은...

 

1. Face ID With a Mask

https://www.macrumors.com/2022/01/27/face-id-mask-ios-15-4/

1. 아이폰 12 이상 지원

2. 왼쪽 사진 처럼 설정가서 켜야함. (얼굴을 재스캔한다고...^^...)

3. 오른쪽 사진처럼 안경을 쓴 사람이면 Add Glasses도 가능

참고 : https://www.macrumors.com/2022/01/27/face-id-mask-ios-15-4/

 

2. 120Hz 애니메이션

AS-IS

120Hz ProMotion이 적용된 아이폰 13이 출시된 후에 third-party 애니메이션이 60Hz로 제한되었었음.

(== 120Hz쓸 수 있는 디바이스인데 못씀;;;) 

사람들 : 왜 안되지?
Apple : Core Animation쪽에 버그가 있네ㅋ.,, 업데이트 할게~~~!!! 

 

TO-BE ✅

iOS 15.4에서는 ProMotion을 지원하는 아이폰의 모든 애니메이션에 대해 앱이 자동으로 120Hz를 제공함.

https://twitter.com/ChristianSelig/status/1486847470223118337?s=20&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;t=HdfLmgAfozp3w8yURXWLlQ

참고 : https://www.macrumors.com/2022/01/27/ios-15-4-apps-120-hz-promotion/

 

+ iOS 15.4에 추가된 새로운 이모지들

많이 쓰게될 이모티콘들이 보인다.. 😝


 

+ 릴리즈노트에는 안나와있지만...

제가 Combine → Swift Concurrency(async/await)로 바꾸기 (feat. 느낀점)에서

2. URLSession.shard.data가 iOS 15부터 사용가능한건 좀 ㅠ... 
여기가 async로 깔끔하게 안풀리면 끔찍한 혼종이 발생할 것 같다는 생각이 들었습니다. 
아직 해보진 않음...


라고 했었는데요.

Xcode 13.3에서는 iOS 13부터 사용가능하도록 바뀌었네요 🥳

‼️ Xcode 13.4.1 이상에서는 또 iOS 15부터 가능하네요...‼️

[Xcode 13.2.1]

 

[Xcode 13.3 Beta 1] 🎉

 

[Xcode 13.4.1]

뭐야 돌려줘요

 

새해 복 많이 받으세요~~ 🧧🌕

반응형

'Xcode' 카테고리의 다른 글

Xcode 15 톺아보기  (4) 2023.06.11