iOS
-
[SwiftUI] - GeometryReaderiOS/SWIFTUI 2024. 7. 26. 20:57
오늘은 어려운 GeometryReader를 가져와봤다. 솔직히 GeometryReader는 거의 모르는 상태로 왜 쓰는지도 모르고 사용해 왔던 것 같다. 하지만 이번 기회에 개념을 확실히 잡아 내 마음대로 자유자재로 사용하고자 하는 취지로 포스팅하게 되었다. GeometryReader OverView를 해석하자면 부모뷰의 레이아웃 정보를 불러오는 데 사용된다고 한다.GeometryReader는 GeometryProxy를 파아미터로 받는 클로져를 반환하는데, 여기서 GeometryProxy는 GeometryReader 내부에서 사용되는 뷰의 기하학적 정보를 포함하고 있다. 여기서 말하는 정보는 GeometryProxy의 attribute를 살펴보면 되는데, size : 뷰의 크기 정보safeAreaIns..
-
[SwiftUI] - @ViewBuilderiOS/SWIFTUI 2024. 7. 16. 22:29
오랜만이다. 요즘 프로젝트를 하면서 뷰 관련코드를 최적화 하려고 노력중이다.뷰의 재사용성을 높이기 위해 연구를 하던 중 @ViewBuilder라는 키워드를 알게 되었다.사실 우리도 모르게 우리는 ViewBuilder를 사용하고 있었는데, 과연 이 녀석은 무슨 녀석일까? @ViewBuilder일반적으로 ViewBuilder는 closure를 통해 여러 자식 뷰를 제공할때 사용할 수 있다. 예를 들자면, contextMenu 함수는 ViewBuilder를 통해 하나 이상의 뷰를 생성하는 closure를 허용한다. @ViewBuilder는 SwiftUI에서 사용되는 특수한 속성 래퍼(attribute wrapper)로, 여러 뷰를 하나의 클로저로 묶어서 반환할 수 있게 해주며 이를 여러 개의 뷰를 조합해 하..
-
[iOS] - 직렬과 동시(4/4)iOS/iOS 2024. 3. 16. 18:03
이전 포스팅 [iOS] - 비동기와 동기(3/4) 이전 포스팅 [Swift] - GCD에 대해서(2/4) 이전 포스팅을 읽고 읽어주길 바란다. https://quarang.tistory.com/71 [Swift] - GCD를 알아야하는 이유(1/4) 오늘은 최근에 했던 컴퓨터구조 스터디를 기반으로 포스팅 quarang.tistory.com 저번에 이어서 바로 직렬괃 동시에 대해서 설명하겠다. 직렬과 동시 우리 모두 비동기와 동기의 차이를 숙지했다. 바로 메인스레드가 작업의 완료를 기다리냐 안기다리느냐의 차이였다. 근데 여기서 근본적인 문제는 바뀌지 않았다. 바로 이렇게 했다 하더라도 모든 작업을 각자에 맞는 스레드로 할당하지 않았다는 말이다. 이래서 우리는 스레드를 할당하는 방식 중 직렬과 동시에 대해..
-
[iOS] - 비동기와 동기(3/4)iOS/iOS 2024. 3. 16. 16:59
이전 포스팅 [Swift] - GCD에 대해서(2/4) 이전 포스팅을 읽고 읽어주길 바란다. https://quarang.tistory.com/71 [Swift] - GCD를 알아야하는 이유(1/4) 오늘은 최근에 했던 컴퓨터구조 스터디를 기반으로 포스팅을 해보겠다. 스터디의 내용은 메인스 quarang.tistory.com 동기와 비동기 자 이제 메인스레드도 못참겠다. 밀린 작업들을 처리해줄 스레드를 찾아야 겠다 메인스레드에서 GCD에게 밀린작업을 보내줄 것이다. 그럼 GCD가 queue를 통해 작업을 다른 스레드에게 context switcing을 할것이다. 자 근데, 여기서 방식이 나뉜다. 동기(synchronuos) 동기방식을 쓰게 되면, 메인스레드는 작업을 보내고 그 작업이 끝날때까지 다음 작..
-
[iOS] - GCD에 대해서(2/4)iOS/iOS 2024. 3. 16. 15:07
이전 포스팅 [Swift] - GCD를 알아야하는 이유(1/4) 오늘은 최근에 했던 컴퓨터구조 스터디를 기반으로 포스팅을 해보겠다. 스터디의 내용은 메인스레드에 관한 내용이였고, 그중 swift에서 사용하는 GCD를 자세하게 공부했다. 자 한번 가보자 메인 quarang.tistory.com GCD(Grand Central Dispatch) 전 포스팅에서 스레드는 개발자가 생성하고 관리한다고 얘기했는데, 물론 이것을 수동으로 추가하는 언어가 있지만 swift는 그렇지가 않다. 오늘의 주인공인 GCD라는 것이 존재하기 때문이다. GCD는 다중 스레딩 환경에서 비동기 작업을 조율하기 위한 시스템이다. iOS, macOS 및 기타 Apple 플랫폼에서 비동기적인 작업을 효율적으로 관리하는 데 사용된다. 하는일..
-
[iOS] - GCD를 알아야하는 이유(1/4)iOS/iOS 2024. 3. 16. 14:13
오늘은 최근에 했던 컴퓨터구조 스터디를 기반으로 포스팅을 해보겠다. 스터디의 내용은 메인스레드에 관한 내용이였고, 그중 swift에서 사용하는 GCD를 자세하게 공부했다. 자 한번 가보자 메인스레드란? 프로그램이 시작될때 기본적으로 실행되는 스레드이다. 우리가 작성한 코드는 빌드되어 앱에서 실행되고, 앱의 전체적인 생명주기 제어와 여러 이벤트를 실행시키는 역할을 한다. iOS에선 메인스레드는 사용자의 UI를 처리하거나 입력을 받는 등의 처리는 모두 메인스레드에서 진행되는데, 그 이유는 일관성을 유지하기 위해서라고 생각한다. 만약 여러 스레드에서 동시에 UI에 관한 작업이 실행될 경우 각 컴포넌트 혹은 그보다 더 작은 단위로 따로따로 작동해 시각적인 혼란이 올 것이다. 간혹 코드를 짜다보면 이런 경고가 뜰..
-
[Swift] - mutatingiOS/SWIFT 2024. 2. 6. 15:08
오늘은 mutating에 대해서 포스팅 해보겠다. SwiftUI의 경우에는 보통 @State, @Binding, @EnvironmentObject 등등 속성래퍼를 사용하여 뷰의 상태를 관리한다. 하지만 그런것들을 쓰지 않는 UIkit의 경우 어떨까? mutating은 함수나 클로져 내에서 해당 구조체나 열거형 내의 인스턴스 프로퍼티를 변경하려 할때 사용된다. 구조체나 열거형은 값 타입이므로 인스턴스의 프로퍼티를 변경하려면 메서드도 해당 인스턴스를 변경 가능하도록 선언되어야 한다. 이때 메서드 선언 앞에 mutating 키워드를 사용하여 해당 메서드가 해당 인스턴스를 변경할 수 있음을 나타낸다. 구조체 사용을 예시를 들어보자 struct MyStruct:Struct { var myProperty: Int ..
-
[CI-CD] fastlane - Export compliance is required to submitiOS/CI-CD 2024. 2. 1. 01:01
[22:54:04]: Export compliance is required to submit Add information to the :submission_information option... Docs: http://docs.fastlane.tools/actions/deliver/#compliance-and-idfa-settings Example: submission_information: { export_compliance_uses_encryption: false } Example CLI: --submission_information "{\"export_compliance_uses_encryption\": false}" This can also be set in your Info.plist with ..