74건의 항목
Fundamentals 사용처에 대한 “명료함”이 최우선이다. “간결함”보다 “명료함”이 보다 중요하다. 모든 선언에 대해 문서를 작성해라. ??? 클린코드와 대치된다.
Parameters 문서에 제공할만한 매개변수 이름을 선택하자. 파라미터 이름을 숨겨 보이지 않는 경우에도 설명에 있어서는 중요하다.
예전에 네트워크 처리를 하면서 맞닥들였던 문제를 다시한번 적어본다. 그리고 그 개념까지 간단하게 정리해본다.
Border는 바깥으로 그려질까 안쪽으로 그려질까? 오해와 삽질에 대해 정리해본다. Answer innerborder를 그리기 위해서는 현재 표현되는 frame을 border width만큼 줄여버리면 된다.
TableView dataSource에서 아이템을 가져오다 outOfIndex가 나서 crash가 났다. 이로부터 배운 점에 대해 적어본다. 어떤 상황인가? crash 로그를 확인해보니, tableView에서 indexPath를 벗어나 발생했음을 확인했다.
headerView가 있는 TableView에서 높이는 제대로 맞는데, 이상하게 셀수가 많아질 상황에서 끝까지 스크롤되지 않는 문제가 발생했다. headerView의 layout을 먼저 잡아주어야 한다.
이전에 앱의 실행 과정에 대해서 공부했을 때 제대로 이해하지 못했었다. 이번 기회에 제대로 이해하는 자리를 가져보려 한다. 조금 성장했는지 약간 더 이해가 되었다! 그럼 시작하자.
iOS 앱개발에서 화면을 담당한다면 피할 수 없는 autolayout! 공식 문서를 읽어보며 정리해보자.
이전 글에서 PresentationController가 무엇인지 배웠다. 그런데, Transition Animator를 제공하는 부분에서 UIViewControllerAnimatedTransitioning이라는 친구를 보았다. 오늘의 주제는 이녀석이다.
WWDC 2019 키노트를 확인해보며 알짜 정보를 쏙쏙 뽑아보자. Dark Mode iOS 13부터 지원되는 기능이다. 말 그대로 dark mode이다. 해당 기능을 만들면서 고민했던 것은 역시 Mode에 따라 변화하는 색상이었다.
맨날 헷갈리는 이것. 오늘은 뽑아버리겠다. Frame Super view의 좌표계를 기준으로 했을 때 본인의 좌표계를 말한다. 우리가 위치를 표시하기 위해서는 기준 좌표계가 있어야 한다.
Hit Testing 그럼 터치가 어디서 발생했는지는 어떻게 알 수 있을까? 즉, 터치가 발생한 시점에, 어떻게 내가 누른 가장 상위 객체(상단은 view 계층에서 top을 말함)를 판단할 수 있을까? 여기서 이벤트에 반응한 가장 상위 객체를 first Responder라 한다.
이미지 자체를 늘리고 싶은데. 특정 부분은 고정시키고 싶으면 어떻게 할까? Image Stretch a.k.a nine patch 이렇게 이미지의 특정 부분은 고정시키고 나머지만 늘릴 수 있도록 하게 만드는 것을 Image Stretch라 한다.
iOS Layout을 적용하는 것에는 여러가지 방법이 있다. autolayout만이 정답이라 생각했는데, 오산이었다. 이 부분은 주기적인 업데이트를 하도록 하겠다. Storyboard 장점으로는 UI 구성을 눈으로 확인할 수 있다는 점이다.
iOS 화면 업데이트는 어떻게 되는 걸까? draw, layoutIfNeeded, setNeedsLayout 등. 이해가 안가는 것들이 너무 많았다.
불투명한 뷰는 어떻게 만드는거지? 그게 바로 이거였다. Materials iOS는 깊이감을 느낄 수 있도록 하는 반투명 효과를 제공한다. Blur Effect 혹은 Material으로 부르는 친구다.
부분적으로 rounding 처리하는 방법을 알아보자.
앞 글에서 간단하게 소개했지만 Responder Chain은 간단하게 알고 넘어갈 만한 것이 아니다.
CollectionView나 TableView에서 특정 요소로 스크롤 시키는 방법에 대해 알아본다.
디자이너와 일을 하다보면, image의 색상 자체를 변경해주길 바라는 경우가 있다.
업무 하면서 Shadow에 대해 알게된 내용을 정리한다.
테이블 뷰의 reorder 버튼을 변경해야 하는데, API가 없어 고생했던 경험을 공유한다.
Target / Action은 사용자 interaction을 처리하는 주요 방법으로 알려져있다. 문서를 읽으며 알아보자. Target/Action Target/Action은 대표적인 비동기 이벤트이다. Action이 왔을 때, 처리되는 방식이기 때문이다.
TableView 리팩토링 하다가 레거시를 다르게 바꿀 수 있을까하면서 알아보았다. 이걸 배우면 이런게 가능하다. 자동으로 이렇게 애니메이션을 처리해준다! iOS 13에서부터 적용가능하다.
UILabel에 들어간 text를 모두 표현하고 싶다면 어떻게 해야할까? 쉬워보이지만 의외로 삽질을 하는 부분이다. 간단하게 알아보자.
ViewController는 계층을 이루면서 구성된다. 그 중 대표적으로 알려진 것이 NavigationController, TabBarController 이다.
입문하지 얼마 되지 않은 나는 여전히 기본 Transition만 사용하고 있다. 나도 화려한 UX를 만들어보고 싶다! 그 전에, 그 시작이 되는 UIPresentationController부터 알아보자.
Shadow를 보다가 scale에 대해서 알게된 내용을 적어본다. 정리 retina display가 나오면서 화면의 기본단위를 논리적으로 정의된 것을 사용하게 되었다. Point가 그것이다.
UIScrollView의 ContentInset, ContentOffset, ContentSize에 대해서 알아본다.
stack view는 autolayout을 적용하지 않고도 layout을 잡을 수 있는 신기한 친구다. 한번 알아보자. 이 글을 읽기 위해서는 이전글을 읽고 오는 것이 이해가 쉽다.
UITabBarController 위 그림에서 가운데 있는 것이 TabbarController이다. TabBarController의 경우 다음과 같은 특징을 갖는다.
tableView를 다루다보면 셀의 크기를 정하는 일이 상당히 귀찮을 때가 있다. 어떻게 하면 동적인 cell을 만들 수 있는지 확인해보자. Working with Self-Sizing Table View Cells 애플에서는 일단 이 옵션을 사용하지 말라고 한다.
UITableView의 Separator와 관련해 해결했던 것들을 적어둔다. 높이 늘리기 찾아본 결과 방법이 없다. 셀 안에 UIView를 만들어서 처리하는 것이 방법. Separator 길이 조정 self.tableView.
UITableView의 바닥을 어느정도 띄워야할 필요가 있었다. 어떻게 했는지 기록해둔다. Solution UIScrollView의 contentInset 동작을 이해했다면 쉽게 알아먹을 수 있다.
회전과 관련된 코드를 보다보니, compact, regular와 같은 용어들이 보였다. UITraitCollection은 무엇일까? Size Classes 먼저, Apple이 다양한 디바이스들의 스크린 모양을 어떻게 논리적으로 관리하는 지 부터 알아야 한다.
디자인 가이드를 읽다보면, Asset이 없는 경우가 있다. 이럴 경우 그냥 View를 만들고 Image화 해서 사용하면 좋겠는데.
View 화면을 구성하는데 기본이 되는 class NSObject를 상속한 UIResponder를 상속해서 구성됨 CustomView는 UIView를 상속함 UIImageView, UILable, UIScrollView… 가능한 것들 Drawing Animation Layout subview 관리 Event Handling UIResponder 상속하기 때문에, touch와 같은 event에 반응 가능 gesture 추가 초기화 형태 // code init(frame:) init() // default parameter = CGRe...
ViewController는 iOS 앱 개발에서 빼놓을 수 없는 요소이다. 구조적으로 어떻게 구성되었는지 알아보고, 어떤 life cycle을 가지는지 이해해보자. 그럼 시작하자.
code를 보다가 unwind segue라는 녀석을 보게 되었다. 처음 보는 친구라 정리해보려고 한다. Unwind Segue 일단 Unwind라는 뜻을 알아보자. 음. 무언가를 푼다는 개념같다.
UIViewController가 init 되는 시점에 특정 View를 설정하면 안되는가? 왜 안되는가? 핵심 요약 UIViewController의 init에 View를 설정하게 되면, 메모리 부족으로 인해 View가 해제되는 상황에 대응할 수 없다.
Accessibility 자체만 해도 상당히 방대한 개념이다. 이번에는 iOS 개발자가 실제로 많이 사용하는 Accessibility인 Voice Over를 UIKit에 적용하는 방법에 대해 알아보자.
앞으로 그림에서 나오는 Swift version은 가상이다. 이해를 위해서 가상으로 적었다.
접근성 개발에 있어 쉽게 도와주는 녀석이 있다! Accessibility Inspector!! Introduction 접근성 관련해서 반영해주려니까 테스트 기기가 없더라.
앱 배포에 있어 꼭 알아야 하는 App Thining중 App Slicing에 대해 알아본다. 해당글은 WWDC 2015를 기준으로 한다. App Distribution Today 이전의 App 배포 방법은 다음과 같은 방식으로 수행되었다.
iOS 내부 디바이스에 다양한 CPU 제품이 들어감에 따라 이를 대응할 수 있도록 Project setting을 해야한다. 내부 디바이스들이 어떤 특징을 가지고 있는지 알아보자. 이번 글은 CPU Architecture 글을 읽고 오면 좀 더 편하다.
앱 배포를 하다보면 bitcode enabled라는 flag가 있다. 이녀석을 체크하냐 마냐에 따라서 빌드 속도가 상당히 차이나는 것을 보았는데 도대체 왜 그런 건지 이해해보려 한다. bitcode 다음은 Distrubution Options에서 찾은 설명이다.
이전 글에서 Scheme에 대해서 알아보았다. 하지만 실제로 어떻게 사용하는 건지 잘 모른다. 이번 글에서 알아보도록 하자. Scheme 알아보기 프로젝트를 하나 만들어주고, Product -> Scheme -> Edit Scheme 들어가자.
Bundle 실행 가능한 코드(executble code) + 리소스 (Resources)를 가진 계층 어떻게 보면 이 개념은 개발자를 위한 개념이다. 결국 Package내부는 Bundle과 같이 구성되어 있다.
앱스토어에 실제 앱을 배포해본 사람은 알겠지만, 인증서, provisioning과 같은 개념은 생소하다. 정확하게 알아보자. 원칙 Apple 만이 자신들의 하드웨어(iOS, iPadOS, MacOS etc)에 특정 소프트웨어가 동작하도록 할 수 있다.
의존성 관리도구 주요 기능 Module 의존성을 알려주는 메타데이터로 라이브러리들이 관리됨 Manifest 명세서 역할 Lock 설치된 라이브러리의 버전과 의존 구조를 보여줌 라이브러리가 설치된 다음 적힘 Repository 모듈이 저장된 공간, 보통 github Dependency Constraint 모듈의 허용되는 버전, 보통 Manifest 파일에 적혀짐 Resolution Rule 모듈의 적합한 버전을 설치해 줌 도구세팅빌드속도-------------------------------CocoaPods간편함느림Carthage복잡...
DerivedData를 맨날 지우라는데 이녀석이 뭔지 간단하게 알아보자. DerivedData 빌드가 안되어 오류를 Google에 쳐보면 StackOverflow에서 “Clean DerivedData” 하라는 말이 많다. 이녀석은 도대체 무엇일까.
Library에 대해서는 알아보았다.
Xcode에 파일을 추가하다보면, Create groups, Create folder reference와 같은 선택지를 마주하게 된다. 이녀석의 의미는 무엇일까?? 바로 이녀석이다. Create groups Finder에 폴더가 생긴다. 회색 아이콘이다.
앞으로 진행할 긇에서는, Library와 Framework에 대해서 알아볼 것이다. 첫번째 순서로는 Library이다. Library & Framework 일단 간단하게 Library와 Framework에 대한 차이를 알아보고 가자.
맥에서 아이폰 콘솔 로그 확인하기. 맨날 까먹어서 기억용으로 적어둔다. 방법 맥 앱 중에서 console.app을 실행한다. 아래 이미지에서 콘솔 로그를 보고 싶은 기기를 선택한다. 로그 메시지 필터를 걸어 확인한다.
Module Stability는 무엇일까? 공식문서를 통해 알아보자. Module Swift에서 Module은 무엇을 말할까? Swift는 접근 제어의 기준으로 Module을 사용한다. 코드 배포의 단위로써 import 키워드를 통해 사용하는 것들이 모두 모듈이다.
앱 배포에 있어 꼭 알아야 하는 App Thining중 On-Demand Resource에 대해 알아본다. 해당글은 WWDC 2015를 기준으로 한다. Do Better 이전 글에서 App Slicing을 하면서 앱 크기를 많이 줄일 수 있다는 것을 확인했다.
Package Finder가 단일 파일인 것처럼 사용자에게 제공하는 디렉토리 가장 쉽게 알아볼 수 있는 것은 우리가 사용하는 Application에 있는 최종 Product! .app 이다.
간단하게 프로젝트 내부를 탐험해보았다면, 각각의 제대로된 정의를 알아야 한다. 앞의 글에서 이어지니, 이해가 안되면 보고 오는 것이 좋다.
Target Xcode의 빌드를 통해 생성된 최종 Product Framework Application 등등 일반적으로 하나의 모듈 또는 앱을 의미한다. 보통 프로젝트 생성시 하나만 생성되나, 목적에 따라 하나의 프로젝트에 여러개의 Target을 생성할 수 있다.
Test라는 과정은 사실 공학 어디에서든 등장하는 개념이다. 작업에 의존도가 있고, 복잡한 과정으로 넘어갈 수록 이전 단계의 오류는 치명적이기 때문이다. 이를 관리하는 방법이 Test라 할 수 있다. 소프트웨어에서 역시 이러한 개념이 적용된다.
Xcode에서 디버깅하는 방법을 알아보자.
내가 기존에 만들었던 강아지 밥주는 앱(DogFood …)를 기준으로 설명해보겠다. PROJECT_FILE_NAME.xcodeproj 이녀석의 정체는 파일이 아니다. 디렉토리다! 우클릭후 “패키지 내용보기”로 내부를 확인할 수 있다.
사용자 입력에 대한 Test, 단방향 흐름, 역할과 책임을 고려한 MVVM 구조를 채택하였습니다. 기획 분석 화면 이동이 복잡하지 않다. 사용자 입력에 대해 처리할 부분이 있어, 입력 테스트가 필요하다. 목표 단방향 흐름의 구조를 갖는 아키텍쳐를 사용한다.
다양한 의존성 주입 방법을 고려하고, 최종적으로 ViewController에 생성자 주입 방식을 통해 컴파일 타임에 주입 여부를 판단할 수 있도록 변경하였습니다. 초기에 작성한 의존성 주입이라고 착각한 코드입니다.
서로 다른 화면을 유기적으로 작업하고자, 충돌 문제가 다수 발생하는 스토리보드 사용을 하지 않았습니다. 프로젝트를 진행하기 전, 스토리보드 사용 여부에 대해 의사결정을 했습니다. 결과적으로 스토리보드 사용을 하지 않았는데, 그 이유는 다음과 같습니다.
Fruit Card Game OnBan StarBoost DogFeed Escaper .
사용자에게 나의 상품을 내놓을 때, 얼마나 메타 데이터가 중요한지 생각해보는 계기였습니다. 초기 배포 당시, 메타데이터를 제대로 작성하지 않아 유저가 해당 앱에 대한 정보를 알지 못한다는 의견을 받았습니다.
개밥줬어? Stack: Firebase, MVC, UIKit, iOS Team: 팀 프로젝트 Role: 개발 진행 기간: 2021/09/23 → 2021/09/24 About: 우리집 강아지 생존권을 확립하는 식사 여부 확인 애플리케이션 개요 GitHub - wansook0316/bookathon_G: 개밥줬어? 기획의도 개밥줬어? 모두가 바쁜 요즘 우리집 강아지 밥은 누가 챙겨?! 이제 편하게 앱으로 확인하세요 ✏ 한줄소개 우리집 강아지 생존권을 확립하는 식사 여부 확인 애플리케이션 💻 서비스 가족 구성원이 강아지 밥을 주었는지...
과일 카드 게임 Stack: MVC, UIKit, XCTest, iOS Team: 1인 진행 기간: 2021/08/30 → 2021/09/10 About: MVC 패턴에서 Model을 설계하는 것을 연습하고, 이를 View에 보여주는 간단한 카드게임을 만들었습니다.
비동기 네트워크 처리에 있어 순서대로 이미지 순서가 보장되어야 하는 문제를 해결했습니다. 방탈출 테마 세부페이지에서는 해당 방을 방문한 유저들의 Top 5 랭킹이 보여지도록 하였습니다.
현재 프로젝트에 적합한 간단한 이미지 캐시를 구현하여 사용하였습니다. 기본에 임시로 작업한 이미지 캐시의 경우, 네트워크 요청후 디스크에 저장이 되는 구조로 제작하였습니다.
onBan Stack: Caching, MVP, Network, UIKit, UserDefault, iOS Team: 1인 Role: 개발 진행 기간: 2021/09/27 → 2021/10/08 About: 반찬을 주문할 수 있는 간단한 애플리케이션입니다.
설명 실제 동작하는 스타벅스 앱을 클론 코딩하였습니다. 처음으로 팀플을 진행했으며, commit convention, 브랜치 전략등을 사용해보았습니다.