Programming 99

[iOS] NSOperation과 NSOperationQueue 개념과 사용

비동기적 프로세싱을 위해서 iOS 플랫폼에서 GCD 디스패치를 주로 사용하게 된다. GCD는 개발자에게 복잡한 스케줄링 혹은 논리 구조로부터 해방시켜준다. 특히 Block Coding을 이용하여 단순 구현을 쉽게 만들어준다. 하지만 보다 복잡한 로직의 구현과 코드 재사용성을 높히기를 원한다면 NSOperation과 NSOperationQueue를 사용하면 좋다. NSOperation은 GCD처럼 비동기적 프로세싱을 위해서 안성맞춤이다. 대표적인 비동기 로직으로 네트워크나 파일I/O 등 엑세스 시간이 긴 작업들이 있다. 앞서 말한 비동기 로직을 처리할 때, 사용하면 된다. NSOperation NSOperation의 구현은 마치 Java의 Thread 구현과 비슷하다. 먼저 알아두어야할 것은 NSOpera..

[iOS] Core Animation 사용하기

미려한 UI를 위해선 아름다운 효과는 필수이다. 하지만 아름다운 효과를 위해 animation을 무리하게 사용하면 main thread에 너무 많은 작업을 가중시킨다. 미려한 UI를 위해 animation을 사용하되, main thread에 작업을 가중시키지 않기 위해 무엇을 해야할까? 그 방법 중에 하나가 UIView대신에 Layer를 이용한 animation의 구현이다. UIView는 이벤트 입력을 받을 수 있는 View의 전체를 이동하는 반면, Layer는 View의 UI 표시영역만 사용하게 된다. 이를 이용한 animation은 main thread의 부담을 덜어주게 된다. UI 표시영역, 즉 비트맵 상의 이미지만 움직이기 때문에 소프트웨어적으로 drawRect:를 통해 다시 그리지 않고 비트맵 ..

[iOS] iOS에서 쿠키 사용하기 (NSHTTPCookieStorage, NSHTTPCookie)

쿠키란? 쿠키는 웹 사이트로부터 받아 사용자의 브라우저에 저장하는 작은 데이터이다. 쿠키는 웹사이트를 로드할 때마다 사용자의 활동과 식별을 위해 서버로 다시 돌려 보내는데 사용된다. 쿠키는 상태 정보를 기억하고 버튼 클릭, 브라우징 히스토리, 로그인 등 브라우저에서의 활동을 기록하는 데 필요한 신뢰있는 메카니즘으로 만들어졌다. 쿠키는 기본적으로 자신을 보낸 서버의 도메인을 가지고 있고 해당 도메인에 연결할 때마다 사용된다. 데이터는 'name=value' 구조로 구성된 String 데이터 쌍이다. 쿠키는 일반적으로 웹브라우저가 종료되기 전까지 유지되며 만료시간을 설정할 경우에는 브라우저가 종료되도 설정한 만료시간까지 유지된다. 아래를 보면 쿠키가 'session'이란 name에 'eylZWNIbnQiOl..

[iOS] iOS 멀티태스킹 (Background Service 이용하는 법 : iOS7 이상)

iOS7부터 '멀티 태스킹'에 대해 강력한 지원을 해준다. Background의 세계가 열렸다. 사용자들이 Foreground에서 기다리던 시대는 지났다. 개발자들은 Background를 지원하며 사용자들이 지루하게 기다린 시간을 줄일 의무가 '자의 반, 타의 반'으로 부여됬다. 그럼, 멀티태스킹을 지원하기 위한 Background Service에 대해 알아보자. ** 아래의 기능들을 통해 완전히 종료된 앱을 실행상태로 만드는 것은 불가능하며, 메모리에 로드된 상태의 background에서만 실행을 보장한다. 새로운 멀티 태스킹 API로는 3가지가 추가되었다. 3가지는 아래와 같다. 1. Background Fetch 주기적인 업데이트 사용할 때 사용2. Remote Notification (Silent..

[watchOS] Watch Kit : watchOS 1.0으로 개발하기

Watch Kit이 어제 공개되었다. Watch Kit은 Xcode 6.2에서 SDK를 제공할 예정이며 현재 (2014.11.20)는 베타 버전이다. 지금도 Xcode 6.2 베타 버전을 설치한다면 시뮬레이터로 Watch App을 실행 가능하다. Watch Kit에서 제공하는 구성요소는 크게 Watch에서 구동하는 'App'과 간단한 정보만을 표시하고 터치할 때 앱을 실행시키는 'Glances', 알림을 표시하고 사용자의 동작을 유도하는 'Notification' 등 3가지이다. Watch App & Watch Extension 먼저 Watch App부터 설명하면 Watch App은 단순히 UI와 UI 리소스만을 포함한다. 실제로 데이터를 처리하고 요청하는 등의 비지니스 로직은 iOS App의 Exten..

[iOS] Notification Action : Interactive Notification in iOS8

iOS8에서 추가된 새로운 기능 중에 알림에 대해 사용자가 즉각적으로 처리할 수 있도록 해주는 강력한 기능이 추가됬다. 'Interactive Notification'이라고 소개된 이 기능은 알림이 왔을 때, 사용자가 알림 창을 살짤 내리면 알림에 대한 처리가 바로 가능하다. 이는 아이폰의 상태바 알림 창 뿐만아니라 잠금 화면에서도 활용 가능하여 사용자의 편의를 극대화 시켜주는 기능이다. 개발할 때, 'notification action'으로 검색해보면 쉽게 찾을 수 있다. notification action을 구현하기 위해선 action을 UIUserNotificationAction을 이용하여 객체를 정의한다. 정의된 action을 UIUserNotificationCategory로 묶은 다음 'regi..

[iOS] App Extension : Today view (Widget)

iOS8에서 새롭게 제공하는 기능 중에 하나이다. 기존 안드로이드에서 이미 제공한 기능이다. iOS8에서 새롭게 추가되면서 더욱 편리한 기능을 제공할 것으로 생각된다. 현재(2014.09.18) iOS8이 정식 릴리즈된 시점에서 필자가 사용하는 앱 중에 에버노트와 드롭박스는 발 빠르게 이 기능을 대처하고 있다. 이제 iOS8 위젯 기능을 사용하기 위한 과정을 알아보자. 먼저, 나의 앱 프로젝트에 App Extension(이하 'AE')을 추가한다. AE는 호스트 앱이 구현하고 호스트 앱에 AE를 추가 구현하는 형태로 개발한다. AE는 다른 앱들에서 사용할 수 있다. 호스트 앱에는 AE에서 사용하는 설정이나 정보를 처리하는 기능들을 얻도록 한다. 현재 Xcode 6에서는 아래와 같이 iOS에서 사용 가능한..

[Swift] 알면 좋은 Array에서 제공하는 함수 (map, filter, reduce)

Mapmap은 각 element를 순회하면서 element를 수정할 때 사용하기 좋은 함수이다. 예를 들어 우리는 각 String에 "box"라는 String을 덧붙이기 위하여 for-in을 떠올리기 쉽다. ex) for string in strArray {string += "box"} 대신에 map 함수를 사용하면 한줄로 간단하게 작성할 수 있다. ex)var resultArray = strArray.map({$0+"box"}) 참고로 map의 param 함수 타입은 '(T) -> U'이다. map 함수는 Array의 각 element를 순회하면서 개발자가 정의한 동작을 수행하게 된다. Filterfilter는 말 그대로 특정 조건을 통과한 element들을 모아서 Array로 반환하는 함수 이다. f..