클라이언트 70

[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

시간표 라이브러리 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

Core Data와 Database의 차이점

Apple 공식 문서에 따르면 Core Data는 Database가 아니라고 명시되어 있습니다. Core Data와 Database 모두 영속적인 저장소를 제공하는 방법이므로 구체적으로 어떤 차이점을 갖고 있는지는 명확하지 않습니다. 이번 포스트에서는 Core Data가 동작하는 방식을 살펴보면서 어떻게 Database와 다른지 살펴보도록 하겠습니다. 데이터베이스(DB)의 주된 기능 데이터베이스(DB)는 영속적이고 검색 가능한 테이블 형태의 구조로써 Column과 Row로 구성된 데이터 저장소라고 할 수 있을 것입니다. 이 저장소의 주된 목적은 Disk에 항상 최신의 데이터를 저장하는 것이며, 데이터를 불러오고 업데이트를 하는 것이 그 다음으로 중요한 목적일 것입니다. 이러한 주된 기능들을 훨씬 넘어서는..

클라이언트 2020.02.18

Today Extension 올바르게 사용하기 ( 위젯 깜빡임 현상 )

이번 포스트에서는 Today Extension올바르게 사용하는 방법에 대해 알아보도록 하겠습니다. Today Extension은 지난 포스트에도 한번 설명한 바가 있듯이 알림 센터에 나오는 위젯이라고 생각하시면 됩니다. Host APP을 실행하지 않고도 간단한 정보를 간편하게 사용자에게 제공해주기 위해 사용하는 요소입니다. Today Extension에서도 Core Data와 API Request를 할 수 있습니다. 이 때 주의해야 할 점이 있습니다. 바로 Today Extension의 View Controller의 Life Cycle에 대한 이해가 중요합니다. 왜 그럴까요? Today View Controller는 사용자가 홈 화면에서 가장 왼쪽 화면으로 스와이프하거나 알림센터를 내릴 때 화면에 나타납..

클라이언트 2020.02.11

iOS App Extension Lifecycle 생명주기

이번 포스트에서는 iOS 플랫폼에서 제공하는 App Extension의 Lifecycle 생명주기와 Host App과 어떻게 Communication을 하는지 알아보도록 하겠습니다. App Extension은 iOS 8.0에서 새로 나온 기능으로, Host App과는 별개의 Process로 동작하는 확장 Framework입니다. App Extension은 App이 아니며 App 간에 이루어지는 Inter Process Communication 역시 아닙니다. 실행 시에도 App과는 완전히 다른 독립된 프로세스(process)로 실행되기 때문에 완전히 다른 주소 공간(Isolated address space)를 가지게 됩니다. App Extension의 동작 방식을 간략하게 그림으로 살펴보도록 하겠습니다...

클라이언트 2020.01.25

GCD에 대해 알아보기 (Dispatch Queue)

이번 포스트에서는 GCD에 대해 알아보도록 하겠습니다. GCD는 Grand Central Dispatc의 약자로 대표적으로 Dispatch Queue라는 것이 있습니다. GCD는 멀티 스레드를 구현하기 위해 Apple에서 제공하는 API 입니다. Dispatch Queue Dispatch Queue는 응용 프로그램이 블록 개체 형태로 작업을 제출할 수있는 FIFO 큐입니다. Dispatch Queue는 작업을 직렬 또는 동시에 실행합니다. Dispatch Queue에 제출 된 작업은 시스템이 관리하는 스레드 풀에서 실행됩니다. 앱의 메인 스레드를 나타내는 Dispatch Queue를 제외하고 시스템은 작업을 실행하는 데 사용하는 스레드를 보장하지 않습니다. 작업 항목을 동기식 또는 비동기식으로 스케줄합니..

클라이언트 2020.01.24

iOS Kingfisher로 비동기 이미지 불러오기

이번 포스트에서는 Kingfisher를 사용하여 비동기로 이미지를 불러오는 방법을 소개합니다. 이미지를 비동기로 불러오는 방법에는 크게 2가지가 있습니다. 1. 이미지를 불러온 후 UIImageView에 직접 적용하기 이미지를 재가공할 필요 없이 바로 적용할 경우 사용하는 가장 일반적이고 기본적인 방법입니다. 2. 이미지를 불러와서 UIImage로 저장한 후 해당 이미지를 후처리한 후 UIImageView에 적용하기 이미지를 재가공할 필요가 있을 경우 사용하는 방법입니다. 캐싱할 경우에도 사용할 수 있는 방법이 되겠습니다. 어플리케이션을 개발 할 때 두 가지 경우 모두 사용할 수 있기 때문에 알아두시면 좋을 것 같습니다. 1. 이미지의 URL을 통해 바로 UIImageView에 적용하기 특별한 부가 설명..

클라이언트 2020.01.24

iOS Core Data CRUD

Core Data의 CRUD (Create, Retrieve, Update, Delete)를 구현할 때 Fetched Result Controller를 구현하여 사용할 수 있습니다. Core Data는 영구적으로 어떤 데이터를 저장할 수 있도록 해주는 도구인데, 일반적인 Database와는 조금 다른 양상을 보입니다. 하지만 데이터베이스와 유사한 구조를 가지고 있으며 관계 또한 지정할 수 있기 때문에 직관적으로 데이터를 정형화할 수 있습니다. User Defaults와 다른 점은 User Defaults는 Key-Value의 구조를 가지고 있다면 Core Data는 Entity에 다양한 Key들이 있고 Entity에는 Key에 해당하는 값들이 존재합니다. 관계는 데이터베이스에서 1:1, 1:N, N:1,..

클라이언트 2020.01.10