목록모바일개발 (16)
Weekoding
Android Studio나 Xcode 등의 개발툴을 사용하게 되었을 때를 돌이켜보면, 바다에 무작정 입수하는 느낌이었던 것 같다. 여러 컴포넌트를 여러 레이아웃으로 만들어 보고, 여러 에러들과 직접 몸통박치기를 해보면서 배웠던 것 같다. 효율면에서 부족할 수는 있겠지만, 그렇기에 코딩에 흥미를 가질 수 있었다고 생각한다. 그런데 생각해보니 정작 디버깅에 대해서는 따로 깊게 공부해 본 적이 없었다.(???) 부딪히며 코딩하는 것이야 둘째 쳐도, 한 번의 디버깅을 할 때 제대로 한다면 좀 더 효율성 높은 개발자가 될 수 있을 것이란 생각에 정리해보기로 하였다. [ 목차 ] 📂 print? 📂 Breakpoint 📂 LLDB(Low-Level Debugger) - po 📂 Network Debugging 📂..
Placeholder : 자리 표시자. 앱 개발 시 사용자에게 보다 편리한 UX를 제공하기 위해, Text를 입력할 수 있는 컴포넌트에는 PlaceHolder가 보통 기본 속성으로 포함되어있다. 아래와 같은 모양의 UI를 많이 보았을 것이다. 내용을 입력하세요.. 이렇게 TextField / TextView를 그냥 두기보다, Placeholder를 이용하여 사용자에게 해당 컴포넌트의 역할을 알려주는 것이다. 근데 Swift의 TextView에는 Placeholder가 없다..?🫠 공부를 하다가 교묘하게 Placeholder 모양새를 낼 수 있는 방법을 알아내어 포스팅 하게 되었다. 뚝딱뚝딱 Snapkit으로 UI를 간단하게 구성해보았다.(SnapKit 코딩은 이전 포스팅 참고) 위에 있는 컴포넌트가 Te..
App Transport Security(ATS) : 기존의 HTTP에서 보안이 향상된 버전인 HTTPS의 등장으로, 현재 대부분의 웹들이 HTTPS를 사용하고 있다. 장단점이 존재하는 것이 아니라 상대적으로 보안이 취약하기 떄문에, iOS 9 이후로는 App Transport Security(ATS)를 이용하여 HTTP를 통한 접속을 기본적으로 차단하고 있다. 따라서, 이에 대한 설정을 하지 않은 채 http로 request를 시도하면 다음과 같은 에러를 발견하게 된다. Error Domain=NSURLErrorDomain Code=-1022 "The resource could not be loaded because the App Transport Security policy requires the u..
클로저를 사용할 때, [weak self]를 사용하게 된다. 그리고 때때로, 클로저 안에 guard let self = self로 self 캡처를 하는 경우를 보았을 것이다. {[weak self] in guard let self = self else {return} ... } 오늘은 이것들에 대해서 파헤쳐 보고자 한다. 🔍 시작하기 전에: capture: 클로저 내부에서 밖에 있는 scope의 instance를 참조하는 것 escaping: 클로저 외부에서 해당 클로저 자체를 참조하고 있는 것 1. [weak self] : 약한 참조(weak reference)를 의미한다. 써도 그만 안써도 그만일 것 같은 느낌이 드는데, 자세히 알아보자! 1) [weak self]를 쓰는 이유는? Swift는 ARC..
기기에 맞추어 constraint를 변경한다거나, 데이터를 불러와서 setting할 때, 화면 혹은 앱이 끝나서 데이터를 처리하거나 background에서 처리할 것이 있을 때(금융 앱들은 정보보호 차원으로 화면이 가려지는 등) 생명주기를 잘 알고 대응해야 적절한 타이밍에 작업을 할 수 있다. App과 ViewController의 LifeCycle에 대해 정리해 보자. 🔄 App LifeCycle 우선, App LifeCycle과 관련된 동작들은 SceneDelegate와 AppDelegate에서 이루어진다. Xcode Project를 생성하면 기본적으로 생성이 되어있는 파일들이다. Before start : iOS 12 이하 - AppDelegate가 모든 역할을 담당했다. iOS 13 이상 - Sce..
ViewController간 데이터를 주고받는 방법은 6가지가 있다. 1. 직접 프로퍼티에 접근 2. 함수를 통한 접근 3. Segue 4. Delegate 5. Closure 6. NotificationCenter 그 중 1, 4번을 간단한 예제를 통해 정리해보려고 한다. ( 나머지는 추후에..! ㅎㅎ ) 먼저 잠깐 알아보자면 1~3번의 방법들은 남발하게 되면 좋지 않은데, 이 방법들은 다른 ViewController에 직접적으로 의존하게 되므로 강한 결합이 되어있는 형태가 된다. 이는 객체 간 모듈화에도 좋지 않으며 스파게티 코드가 될 위험이 있다고 한다. 4~6번의 방법은 이러한 강한 결합 형태의 문제점을 벗어나 서로 의존하지 않는 구조로 전달할 수 있다. 이번 예제에서는 FirstViewContr..