본문 바로가기
반응형

SWIFT37

Swift 5.7 변경사항 외 한 주간의 애플 소식들 업데이트 소식 iOS 16 release candidate developer beta watchOS 9 release candidate developer beta tvOS 16 release candidate developer beta macOS Ventura developer beta 7 iOS 15.7 beta: iOS 16 이전의 마지막 버전일 것으로 유추 애플은 차근차근 iOS 15에서 iOS 16 라인으로, macOS Monterey에서 macOS Ventura로 옮겨갈 준비를 하고 있다. 참고로 rc(release candidate) 버전은 베타 테스트 버전이긴 하지만 이대로 큰 문제가 없으면 그대로 릴리즈가 될 후보(candidate) 버전이라는 의미다. 대부분의 rc는 그대로 정식 버전이 .. 2022. 9. 11.
베타 업데이트 소식 외 한 주간의 애플 소식들 업데이트 소식 이번에는 공식적인 소프트웨어 업데이트가 하나 있다. Bootcamp 6.1.16 차기 OS에 대한 베타 테스트 버전도 준비되고 있다. macOS Ventura developer beta 6, public beta 4 iOS 16 developer beta 7, public beta 5 iPadOS 16 developer beta 7, public beta 5 tvOS 16 developer beta 7, public beta 5 watchOS 16 developer beta 7, public beta 5 차기 OS의 첫 마이너 업데이트도 일부 준비 중인 모양이다. iOS 16.1 developer beta, public beta iPadOS 16.1 developer beta, public.. 2022. 8. 28.
카플레이 주목 등 한 주간의 애플 소식 지난 한 주간 개인적으로 신경이 쓰이는 애플 기술 소식을 모아봤다. 카플레이 기대주? 주관적인 판단은 아니지만 WWDC22에서 발표된 카플레이(CarPlay)에 주목하는 블로그다. 물론 판단 근거는 있겠지만, 그전에 한국에서 애플맵을 쓸 모 있게 만드는 일이 우선시되지 않으면 한국에서는 일부 기능만 쓸 수 있는 "빛 좋은 개살구" 정도밖에 안 될 것 같다. 그러니 팀쿡 화이팅! 블로그 | '카플레이'가 WWDC 2022의 최고 기대작인 이유 WWDC 2022에서 애플은 아이폰 소프트웨어의 차기 버전인 iOS 16을 공개하고 시연했다. 잠금화면이 파격적으로 개선되고 메시지 편집 및 전송 취소 기능이 오랜 기다림 끝에 도입됐다. 이외에도 여러 www.ciokorea.com M1 vs M2 개인적으로 하드웨어.. 2022. 6. 19.
WWDC 버프(?)가 가득한 애플 소식 WWDC22가 성황리에 진행되면서 이 행사 버프가 잔뜩 묻은 소식이 넘쳐났는데 그중 개인적으로 의미를 두는 소식만 몇 가지 모아봤다. WeatherKit 애플에서 공식적으로 날씨 관련 프레임워크를 추가한 듯 하다. 이제 날씨를 알기 위해 굳이 크롤링을 만들지 않아도 된다는 것일까? WeatherKit - Apple Developer WeatherKit brings valuable weather information to your apps and services through a wide range of data that can help people stay up to date, safe, and prepared. developer.apple.com 패스키 오랜만에 애플이 표준 행보에 가세했다. FIDO .. 2022. 6. 12.
Swift에 어울리는 Objective-C 코드 작성하기 이 글은 Swift 호환성이 좋은 Objective-C 코드를 작성하는 방법에 관한 내용이다. Swift라는 언어가 워낙 쓰기 편하게 나와서 이제는 과연 얼마나 Objective-C 코드가 쓰일까 알 수 없는 요즘이다. 그래도 개인적으로는 쓸 수밖에 없는 상황이기도 하고 아직 쓰이는 곳이 분명 있으리라는 믿음으로 이런 글을 쓰게 되었다. 참고로 이 글의 핵심 키워드는 아마도 NS_SWIFT_NAME인 것 같다. C 함수 별명 Objective-C 코드로 작성한 C 함수의 인터페이스는 Swift 측에서 보면 좀 답답할 수도 있다. 예를 들어 아래 함수가 있다고 치자. int SuperGoodAdditionFeature(int a, int b) { return a + b; } 이 함수를 Swift에서 접근하.. 2022. 3. 6.
SwiftUI로 액션시트 띄우기 (iOS 15, macOS Monterey) 앞서 작성한 경고창을 띄우는 방법이 최신 SDK에서 변경된 점이 있었던 것과 비슷하게 액션시트(ActionSheet)도 최신 SDK에서 조금 바뀌었다. 그래서 바뀐 내용으로 사용법을 간략히 작성해본다. 당연하게도 Xcode 13 이상의 버전에서 개발해야 하며 iOS 15 혹은 macOS Monterey 등에서만 동작하는 내용이다. 기본 예제 iOS 14까지만 해도 .actionSheet(...) 식의 코드가 있었다. 그런데 이게 최신 SDK에서는 낡음(deprecated) 처리가 되었고 대신 .confirmationDialog(...)를 사용할 수 있게 된다. 아래는 바뀐 코드 예제다. struct ContentView: View { @State private var showingActionSheet =.. 2021. 10. 12.
SwiftUI에서 경고창(Alert Dialog) 띄우기(iOS 15, macOS Monterey) iOS 15와 macOS Monterey에서 구현할 수 있는 SwiftUI용 경고창(Alert Dialog)을 띄우는 방법이 새로 추가되었다. 새 방법이 아무래도 코드가 더 간결한 것 같아서 정리해본다. 가장 기본적인 경고창 예제 가장 기본적으로 제목과 메시지 그리고 확인 버튼 하나가 있는 경고창을 띄우는 예제 코드는 아래와 같은 식이다. struct ContentView: View { @State private var showingAlert = false var body: some View { Button("Show Alert") { showingAlert = true } .alert("Alert Title", isPresented: $showingAlert) { Button("Ok") {} } mes.. 2021. 10. 8.
SwiftUI에서 각 플랫폼의 배경색 사용하기 SwiftUI에서 색상을 지정하기 위해서는 Color라는 구조체를 사용한다. 여기에는 당연히 RGB 값을 넣어서 마음대로 색상을 만들 수 있지만 특별히 정해진 색상을 별도의 이름으로 정의해 두기도 했다. 예를 들자면 accentColor나 primary 혹은 secondary와 같은 일반적인 용도의 플랫폼 별 색상을 쉽게 사용할 수 있다. 그런데 모든 색상이 제공되는 것은 아니다. 예를 들어 윈도우의 배경색 종류가 몇 가지 있는데 이를 SwiftUI에서는 제공해 주지 않는다. 이를 위해서는 해당 플랫폼용, 즉 iOS의 경우 UIKIT 그리고 macOS의 경우 AppKit을 이용해 해당 색상을 가져오도록 코드를 작성할 수 있다. 아래와 같은 식으로 말이다. public extension Color { #i.. 2021. 10. 5.
Swift 5.5의 Continuation Swift 5.5의 동시성(Concurrency) 기능의 강화로 드디어 async와 await를 사용할 수 있게 되었다. 하지만 우리가 사용하게 될 기존의 프레임워크들은 여전히 이런 연속성 구현이 빠진 형태도 많을 것이고 레거시도 종종 사용하게 될 수도 있다. 다행히도 Swift 5.5에서 이런 동시성 인터페이스를 제공하기 힘든 코드를 동시성 코드에 어울리게 쓸 수 있는 방법이 제공된다. 이름하야 연속성(Continuation)이라 불리는 방법이다. 개발자가 약간 고생해서 감싸는(wrapping) 코드를 작성해야 되겠지만 말이다. 문제가 될 만한 예제 예를 들어 아래와 같은 인터페이스의 함수를 사용해야 한다고 생각해보자. func fetchResults(name: String, completion: ([.. 2021. 7. 16.
Swift 5.5의 async/await 살펴보기 Swift는 전통적(?)으로 GCD(Grand Central Dispatch)라 불리는 병렬 프로그래밍 패러다임을 제공해왔다. 하지만 이 방식은 GCD(Grand Central Dispatch)의 Dispatch Queue를 활용한 모델로 현재로 치자면 코딩하기가 귀찮은 좀 구식인 스타일이었다. 문법만 보면 사실상 Objective-C를 위한 기능이라고 생각될 정도였으니 말이다. 어쨌든 이를 개선하기 위한 여러 요구가 있어왔다. 그리고 드디어 Swift 5.5부터 새로운 비동기 프로그래밍 패턴으로 동시성(Concurrency) 개념이 지원되면서 (이제야) async와 await 키워드가 도입되었다. 내부에서는 여전히 GCD를 사용할 수는 있겠으나 표면적으로 이제는 동시성을 이용한다고 생각하면 될 것 같다.. 2021. 7. 13.
SwiftUI - self is immutable??? SwiftUI 프로그래밍 패러다임에 아직 익숙하지 않다 보니 삽질을 하면서 배우는 게 많은 것 같다. 이번 글의 주제는 제목처럼 가변적인 내(?)가 뭐가 문제인가 하는 내용이다. 우선 간단한 예제를 보자. 아래의 예는 특정 SwiftUI 뷰 구조체인데 뷰가 표시될 때 타이머를 돌려서 주기적으로 뭔가를 하기 위한 코드이다. struct SomeView: View { var timer: Timer? = nil var body: some View { VStack { Text("Timer!") } .onAppear { // compile error timer = Timer() } } } 위에서 timer = Timer() 코드 부분에서 아래와 같은 오류가 발생한다. Cannot assign to property.. 2021. 5. 18.
SwiftUI View Custom Initializer SwiftUI View 구조체는 자동으로 @Binding 프로퍼티를 초기화 매개변수로 지정하는 생성자를 만든다. 바인딩은 당연하게도 외부에서 값을 전달받아야 하는 프로퍼티이기 때문이다. 그런데 이렇게 하나라도 바인딩 프로퍼티가 있으면 나만의 생성자를 작성하는 것에서 난관이 있을 수 있다. 예를 보자. 아래는 CustomView 라는 View에 바인딩 프로퍼티가 하나 선언된 예다. struct CustomView: View { @Binding var name: String ... } 앞서 이야기했다시피 바인딩 프로퍼티는 자동으로 생성자에 매개변수로 값을 전달받는 인터페이스를 가진다. 그래서 위의 뷰는 아래와 같은 형태로 인스턴스를 생성해서 사용해야 한다. struct ContentView: View { @.. 2021. 5. 17.
앱스토어 업로드 시 ITMS-90034 문제 어느 날 앱 업데이트를 정리하고 업로드를 했다. 그런데 곧이어 아래와 같은 내용의 메일을 받게 되었다. 중요한 내용은 아래 한 줄이다. ITMS-90034: Missing or Invalid Signature - The bundle foo.bar at bundle path Foobar is not signed using an Apple submission certificate. Apple Submission Certificate라는 처음 듣는 인증서를 요구하는 듯한 오류다. 도대체 이 녀석은 뭘까? 해결 해결법은 아주 쉽다. 다시 빌드해서 올리면 된다. 다만 앞서 업로드된 바이너리와 동일한 빌드 번호를 쓰면 중복된 바이너리라며 업로드에 실패하니 빌드 번호를 증가시키거나 바꿔서 다시 시도해보자. 참 어이없.. 2021. 4. 9.
iOS 시뮬레이터의 이상한 노란색(?) 문제 Xcode 12.3을 설치한 이후 무슨 일이 있었는지는 모르겠는데 Title Bar나 Alert Popup 등의 배경색이 노랗게 보이는 문제가 발생하기 시작했다. 아래 스샷이 그 증거(?)다. 전부 문제가 있는 것도 아니고 유독 저런 제목이나 팝업 배경 같은 - 아마도 이게 Tint Color였던가? - 것들만 노랗게 이상하게 표시되고 있었다. 무슨 오줌 액정 문제도 아니고 참 거슬린다. Accessibility에서 뭔가 설정되었나 찾아봐도 다 꺼져 있었다. 이 문제는 시뮬레이터의 버그로 의심된다. 그리고 다행히도 수정이 가능했다. 고치는 방법은 메뉴에서 File - GPU Selection - Prefer Integrated GPU를 선택한 후 시뮬레이터를 재시동한다. 참고로 원래 설정되어 있던 값은 .. 2021. 1. 8.
SwiftUI에서 경고 팝업(Alert) 표시하기 SwiftUI에서는 경고 팝업(Alert Dialog)을 띄우는 방법이 좀 생소하다. 솔직히 말해서 좀 귀찮다. 어쨌든 방법을 찾았기에 글로 살짝 풀어서 정리해본다. 참고로 순수 SwiftUI 코드만 쓰기 때문에 모양은 좀 다르지만 macOS와 iOS 모두에서 동작한다. 경고 팝업을 띄우기 위해서는 Alert 구조체를 이용한다. 아래는 Alert 인스턴스를 생성하는 예제다. Alert(title: Text("Alert"), message: Text("Alert Dialog"), dismissButton: .default(Text("Close"))) 상상대로라면 이 코드를 특정 View의 body에 넣으면 될 것 같다. 그런데 그게 잘 안 된다. 아래와 같은 오류가 나면서 말이다. Return type o.. 2021. 1. 7.
Xcode 12.3에서 발생하는 Fat Framework 링크 오류 문제 Xcode를 12.3 버전으로 올린 이후부터 회사 프로젝트를 빌드할 때 아래와 같은 오류가 발생하기 시작했다. Building for iOS, but the linked and embedded framework 'Foobar.framework' was built for iOS + iOS Simulator. 이 프로젝트는 비공개 iOS용 라이브러리와 iOS 시뮬레이터용 라이브러리를 lipo를 이용해 합쳐서 만든 Fat Framework(혹은 Universal Framework)다. 이 프레임워크로 이전 버전의 Xcode에서는 빌드가 잘 되었는데 유독 12.3부터 이런 식의 오류가 발생하기 시작했다. 해결하기 이 문제의 해결은 의외로 쉽다. Target의 Build Settings에서 Validate Wor.. 2020. 12. 17.
728x90
반응형