전체 글 161

[iOS] View를 Image로 Rendering하기

이번 포스트에서는 UIView를 Image로 Rendering하여 앨범에 저장하는 방법에 대해 살펴보도록 하겠습니다. 권한 추가 우선 앨범에 접근을 해야 하므로 접근 권한을 요청하여야 합니다. info.plist에 아래와 같이 "App Transport Security~", "Allow Arbitrary Loads = YES"항목을 추가해주시기 바랍니다. Storyboard 생성 및 레이아웃 구성 Sample로 뷰를 스토리보드에 배치하도록 합니다. 저는 중첩된 View도 이미지로 변환할 수 있는지 검증하기 위하여 2개의 View를 겹쳐 구성하였으며 각 View에는 다른 배경색상을 적용하였습니다. Image Rendering하고 앨범에 저장하기 실제로 View를 이미지로 렌더링하고 앨범에 저장하는 기능을 ..

클라이언트 2020.03.15

[Swift] Delegate 패턴 사용하기

이번 포스트에서는 Delegate 패턴을 사용하여 View와 View Controller 간의 이벤트 전달 및 데이터 전달 방법에 대해 살펴보겠습니다. Delegate 패턴은 Protocol을 사용하여 구현하게 됩니다. Protocol에 대해 간단하게 정리해보자면, 사람이라는 Protocol을 정의했다고 가정해봅시다. protocol Person { func sayHello() func eat() } 위 예시 코드를 보면 인사를 하다와 먹다 라는 두 function이 정의되어 있습니다. 그러면 저 Person이라는 Protocol을 구현하는 Class를 하나 만들어 보겠습니다. class DennyKim: Person { func sayHello() { print("Hello My name is den..

[iOS] UINavigation Controller에서의 Status Bar Tint Color 해결

이번 포스트에서는 UINavigation Controller를 사용하는 경우에 Status Bar의 Style이 제대로 적용되지 않는 문제에 대해 정리해보도록 하겠습니다. 보통 View Controller에서 StatusBar Style을 설정하는 메소드는 override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent } 와 같이 사용할 수 있었는데요, iOS 13.0부터는 이 방법이 절대적인 방법이 아니게 되었습니다. iOS 13.0 이상에서 UINaviation Controller를 사용할 경우에는 위와 같이 설정한 lightContent가 적용이 되다가, Navigation Controller로 인해 새로 변경되는 현상을 ..

클라이언트 2020.03.08

[watchOS] Apple Watch Life Cycle

이번 포스트에서는 Apple Watch의 Life Cycle에 대해 알아보도록 하겠습니다. Watch OS Extension의 상태 Watch OS Extension의 상태는 크게 5가지가 있습니다. Not Running, In Active, Active, Background, Suspended Not Running Watch App이 실행되고 있지 않은 상태, 사용자가 Watch App을 종료했거나 시스템이 App을 종료한 상태 In Active Watch App이 현재 Foreground에서 실행 중인 상태이나 어떠한 제어나 제스쳐가 발생하지 않고 있는 상태 이 상태에서 Watch App은 별도의 다른 코드를 실행하고 있을 수도 있습니다. 새로 시작된 App이 일반적으로 Active 상태로 전환될 때..

클라이언트 2020.03.03

[watchOS] iPhone과 애플 워치 데이터 주고 받기

이번 포스트에서는 아이폰과 애플 워치 간 데이터를 주고 받는 방법에 대해 살펴보도록 하겠습니다. 애플 워치의 경우 단독으로 동작하는 앱도 있지만 대부분은 Host App과 통신하면서 동작하는 App이 많습니다. 심박수, 걸음 수 등 각종 건강 정보 역시 Host App (iPhone)으로 데이터를 전송하면서 동작합니다. 이렇듯 애플 워치와 아이폰 간 데이터를 주고 받는 방법을 아는 것은 굉장히 중요합니다. XCode 프로젝트 생성하기 iOS App with Watch App 을 선택하여 아이폰과 함께 동작하는 (독립적이지 않은) App을 개발하도록 선택해줍니다. 프로젝트 이름을 적절하게 입력해주시고 기타 설정은 기본 값을 유지하도록 합니다. 레이아웃 구성하기 프로젝트 생성이 완료되었다면 레이아웃을 구성할..

클라이언트 2020.03.02

[watchOS] 간단한 Watch OS 앱 만들기

2020년 3월 1일 애플워치 4를 구매하게 되면서 애플 워치용 App을 개발하는 데에 관심을 가지게 되었습니다. 저는 애플워치 4 44mm GPS 모델을 구입하였습니다. 현재 개발중인 Notissu라는 앱에 Watch OS App을 추가하여 보다 나은 환경을 제공해주고자 합니다. 이번 포스트에서는 기본 예제를 바탕으로 간단한 App을 만들어보도록 하겠습니다. 만들어 볼 앱은 Counter 앱으로써 카운트 버튼을 누르면 숫자가 하나씩 증가하고 초기화 버튼을 누르면 카운트 숫자가 다시 0으로 변경되는 간단한 App입니다. XCode Project 생성하기 watchOS Tab을 선택한 다음 Watch App을 선택합니다. 그 다음 프로젝트 이름을 설정하면 되는데 원하는 이름으로 설저한 다음 기타 설정은 기..

클라이언트 2020.03.02

[iOS] 내 앱에 Google AdMob iOS 연동하기

이번 포스트에서는 내 iOS 앱에 Google AdMob을 붙여 광고를 넣어보는 방법에 대해 살펴보도록 하겠습니다. 광고를 넣는 방법은 굉장히 다양한 방법이 있습니다. 그 중에 가장 간편하게 할 수 있는 방법이 Google AdMob 입니다. 흔히 무료 어플리케이션을 다운로드 받아 실행하다보면 다양한 광고들이 뜨게 되는데요 이중 대부분이 Google AdMob이라고 보시면 될 것 같습니다. Google AdMob 가입 및 광고 단위 생성 계정 생성 및 가입 본격적인 광고 탑재에 앞서 Google AdMob에 계정을 생성하고 광고 단위를 생성해야 합니다. https://apps.admob.com/ 에 들어가서 Google 계정으로 로그인 합니다. 처음 로그인을 하게 되면 위와 같은 계정 생성 화면이 나타납..

클라이언트 2020.03.01

2019-2020 카카오 최종 합격

2019-2020 카카오에 최종 합격하였다. 2019년 10월부터 열심히 달려온 결과라고 생각한다. 약 4개월 간 코딩 테스트 - 서류 전형 - 1차 인터뷰 - 인턴십 (2개월) - 2차 전환 인터뷰 - 최종 합격 이라는 기나 긴 과정을 거쳐 정직원이 되어서 정말 뿌듯하고 내 자신에게 잘했다고 칭찬해주고 싶다. 이제 정말 카카오 크루로써 카카오를 위해 열심히 iOS를 개발할 수 있도록 스스로 꾸준히 노력해야할 것이다. 취업 준비생에서 취업자로 거듭나고 이제는 순탄한 졸업만 남은 상황이라 정말 기분이 좋다. 이 경험을 바탕으로 많은 사람들에게 좋은 기운을 주고 싶고 내가 얻은 노하우들은 서로서로 함께 공유하고 싶다.

일상이야기 2020.02.28

시간표 라이브러리 Elliotable 1.2.0 Update Log

드디어 100번째 포스트를 쓰게 되었습니다! 👏🏻👏🏻👏🏻 블로그를 시작한지 1년 반 정도가 된 것 같은데 이제서야 찍는 것 같기도 하고 본격적으로 글 쓰기 시작한 2019년 6월부터라고 생각하면 금방 100개를 쓴 것 같기도 하고 그렇습니다. 100번째 포스트는 제가 전에 배포했던 시간표 오픈 소스 라이브러리의 업데이트 소식을 가져왔습니다. 주된 새로 추가된 기능은 다음과 같습니다. - Long Pressed Gesture Recognizer를 부착하였습니다. 이제 일반 터치 뿐만 아니라 롱 터치도 처리할 수 있게 되었습니다.👏🏻👏🏻👏🏻 - Completion Handler 방식에서 Delegate Pattern 방식으로 변경하였습니다. TableView나 Collection View를 사용하는 것 처럼..

클라이언트 2020.02.24

Swift 클로저 (Closure)

이번 포스트에서는 Swift에서의 Closure에 대해 살펴봅도록 하겠습니다. 클로저(Closure)는 코드에 전달되어 사용할 수 있는 독립적인 기능 블록입니다. Swift의 클로저는 C 및 Objective-C의 블록 및 다른 프로그래밍 언어의 람다(Lambda)와 유사합니다. 클로저(Closure)는 정의된 컨텍스트에서 상수(Constant) 및 변수 (Variable) 에 대한 참조를 캡처하고 저장할 수 있습니다. 이것을 상수(Constant) 와 변수(Variable) 를 닫는 것으로 알려져 있습니다. Swift는 이 캡쳐와 관련한 모든 메모리를 자동으로 처리합니다. 캡쳐의 개념에 대해서는 후반부에서 살펴보도록 하겠습니다. 함수에 도입된 전역 함수와 중첩 함수는 실제로 특수한 클로저입니다. 클로저..