728x90

분류 전체보기 290

View Identity와 transition 관계

안녕하세요. 이번에는 SwiftUI에서 View의 identity와 transition이 어떤 관계에 있으며 어떻게 화면이 렌더링 되는지에 대해 알아볼게요. SwiftUI View의 identity는 2가지가 있어요. structual identity: View 계층에서 type과 위치에 따라 구분되는 암시적인 identity explicit identity: id 수식어를 사용해서 명시적으로 identity 선언 이런 Identity는 transition과 밀접한 관계를 가지고 있습니다. (View의 identity가 바뀔 때, transition이 동작하게 됩니다.) structual identity와 explicit idenity 별로 transition이 어떻게 동작하는지 알아볼게요. ## Str..

SwiftUI 2022.06.17

TimelineView

안녕하세요. 이번에는 TimelineView에 대해 간단하게 알아볼게요. 스케줄에 따라 업데이트가 되는 뷰. 즉, TimelineView는 일정한 주기에 따라서 뷰가 업데이트되는 컨테이너 뷰입니다. 아래처럼 1초마다 뷰가 다시 그려지도록 구현할 수도 있죠. TimelineView의 클로저는 context라는 파라미터가 있는데, context는 업데이트를 트리거하는 스케쥴러에 대한 시간(date)을 가지고 있습니다. 그래서 아래처럼 context.date를 활용할 수도 있어요. context는 cadence라는 프로퍼티도 가지고 있어요. cadence는 TimelineView가 업데이트되는 속도를 나타냅니다. enum 타입으로 아래 같은 3가지 타입을 가지고 있어요. (실시간 업데이트, 약 1초마다 업데이..

SwiftUI 2022.06.17

천연가죽 팜레스트 제작기

안녕하세요. 요즘 뭔가 만드는거에 재미들린 것 같아요. 이번에는 가죽 팜레스트를 직접 만들어봤는데, 그 제작과정에 대해서 공유드리려고 합니다. 원래는 기성품인 레이저 팜레스트를 사용하고 있었습니다. 이것의 만족도도 상당히 높았는데요. 인조가죽 특유의 맨들거림과 적당한 쿠션감이 제 손목을 편안하게 해주었거든요. 다만 한가지 단점이라고 한다면, 인조가죽이라는 점이었어요. 쓰면서도 '언젠가는 갈라지겠지....'라는 생각이 있긴 했는데, 약 1년 6개월 정도 쓰니(오래도 썼네요...) 드디어(?) 갈라지기 시작하더라구요. '이참에 새로 사자!! 사는 김에 천연가죽으로 된 푹신한 팜레스트를 사야지.' 라고 마음을 먹고 고오오급 팜레스트를 찾아봤는데, 합리적인 가격의 천연가죽 팜레스트가 별로 없었고, 있다고 한들 ..

취미 2022.06.07

trim

안녕하세요. 이번에는 trim 수식어에 대해 알아볼게요. trim 수식어는 아래처럼 생겼어요. trim 수식어를 사용하면 Shape 뷰의 path를 일정 부분 잘라서 반환해줍니다. 정확하게는 Shape의 전체 경로를 1이라고 봤을 때, 1 x startFraction 지점부터 1 x endFraction 지점까지의 Shape을 반환해주는 것이에요. (당연히 startFraction과 endFraction은 0 ~ 1 사이의 값을 가집니다) 만약 시작 지점이 끝나는 지점보다 뒤에 있을 경우(즉, startFraction >= endFraction인 경우)에는 아무것도 출력되지 않습니다. 예를 들어서, 아래 같은 Shape이 있다고 했을 때 Path { path in path.addLines([ .init(..

SwiftUI 2022.06.06

2022/06/30부터 계정 삭제할 수 있도록 허용 (신규 요구사항 추가)

계정 생성을 지원하는 앱인 경우 2022년 6월 30일부터 사용자가 앱 내에서 계정을 삭제할 수 있도록 허용해야 한다고 이전에 소개를 했었는데요 [iOS] 인앱 구매 및 계정 삭제 사항의 기한 연장 ## 1. 온라인 그룹 이벤트 인앱 구매 App Store 리뷰 가이드라인 3.1.1 적용을 2022/06/30까지 연장했습니다. ## 2. 앱 내 계정 삭제 기능 제공 App Store 리뷰 가이드라인 5.1.1 적용을 2022/06/30까지 연장했.. phillip5094.tistory.com 요구 사항이 한 가지 더 추가되었으니 참고해주세요!! 앱 내에서 계정 삭제 옵션을 손쉽게 찾을 수 있어야 합니다. 앱에서 Apple로 로그인을 제공하는 경우, 계정을 삭제할 때 사용자 토큰을 취소하려면 Apple로 ..

News 2022.06.05

inout

안녕하세요. 이번에는 Swift의 inout 키워드에 대해 알아볼게요. Swift는 기본적으로 함수 파라미터를 상수값으로 취급해요. 그래서 아래와 같이 함수 안에서 파라미터 값을 수정하면 컴파일 에러가 발생합니다. func increase(_ count: Int) { count += 1 ❎ } // error: left side of mutating operator isn't mutable: 'count' is a 'let' constant // count += 1 // ~~~~~ ^ 즉, 개발자가 실수로 함수 안에서 값을 수정하는 것을 막기 위한 제약이라고 볼 수 있어요. 그럼에도 나는 꼭 함수 안에서 값을 바꿔야겠어!! 라는 경우라면 in-out 파라미터를 사용해주면 됩니다. 사용방법은 간단해요. 파..

Swift 2022.06.05

Private Pod 배포 방법

안녕하세요. 이번에는 Library를 private pod으로 배포하는 방법에 대해 알아볼게요. 우선 Private Pod을 배포하기 위해서는 2가지 repository(저장소)가 필요합니다. - Pod Repo - Spec Repo Pod Repo는 배포할 Library 프로젝트 저장소를 의미합니다. Spec Repo는 Library를 배포하기 위한 podspec이 들어가 있는 저장소를 의미합니다. Public Pod 배포할 때는 Spec Repo라는 걸 따로 안 만들었는데, Private Pod 배포할 때는 왜 필요할까요?? Public Pod을 배포하는 경우라면, pod trunk push 명령어를 사용해서 podspec을 CocoaPods/Specs 저장소에 제출하고, (CocoaPods/Spec..

iOS 2022.06.01

구독 알림 관련 업데이트

Auto-renewable subscription(자동 갱신 구독) 관련해서 Apple은 구독자들에게 향후 변경 상항 및 구독 관리 방법에 대해서 이메일, 푸시 알림 등으로 정보를 제공합니다. 자동 갱신 구독이란, 사용자가 일정 기간 동안 동적 콘텐츠를 구입할 수 있게 하는 제품입니다. 이 구독 유형은 사용자가 취소하지 않는 한 자동으로 갱신됩니다. 기존에는 자동 갱신 구독 가격이 인상되었을 경우, 구독자에게 인상 동의를 무조건 받아야 했습니다. 그래서, 가격이 올랐어도 구독을 꾸준히 하고 싶지만 어떤 이유로 동의를 못했을 경우, 자동으로 구독이 취소가 되어서 다시 구독해야 하는 번거로움이 있었어요. 그런데, 앞으로는 특정 조건을 만족할 경우 별도의 동의를 받지 않아도 구독이 유지되도록 정책이 바뀌었고,..

News 2022.05.30

PreferenceKey

안녕하세요. 이번에는 SwiftUI의 PreferenceKey에 대해 알아볼게요. ## PreferenceKey A view with multiple children automatically combines its values for a given preference into a single value visible to its ancestors. PreferenceKey는 자식 뷰에서 상위 뷰 계층으로 데이터를 전달하고 싶을 때 사용합니다. 즉, 하위에서 값을 수정하고 이를 상위 계층에 알려줘야 할 때 사용되는 게 PreferenceKey입니다. 하위 -> 상위 계층으로 데이터를 전달하는 개념도 생각보다 간단해요. 1. PreferenceKey 프로토콜을 준수한 Key를 하나 만들고, 2. 상위 뷰에서..

SwiftUI 2022.05.30

Environment

안녕하세요. 이번에는 Environment에 대해 알아볼게요. ## Environment Environment property wrapper를 사용하면 SwiftUI 뷰의 환경에 저장된 값을 읽을 수 있어요. Environment 프로퍼티를 선언할 때 아래처럼 EnvironmentValues key path를 사용해서 어떤 값을 읽을지 결정합니다. 뷰 환경 또는 앱 환경에 따라 다른 뷰를 그리고 싶은 경우 아래처럼 조건문을 달아줄 수도 있어요. 만약 Environment 값이 변경이 되면, SwiftUI가 알아서 이와 관련된 모든 뷰를 업데이트해주니 크게 걱정할 필요 없습니다. 그럼 Environment 프로퍼티는 언제 사용하면 좋을까요?? 뭐... 여러 관점이 있겠지만, 애플은 앱 전체에 값을 배포..

SwiftUI 2022.05.29