ios 40

[iOS] WKWebView (instead of UIWebView)

기존 UIWebView는 무겁고 복잡하고 메모리 누수가 있다. 심지어 니트로 자바스크립트 엔진을 장착한 모바일 사파리에 비해 느리다. WWDC 2014에서 새로 소개된 WKWebView는 AppKit의 WebView와 UIKit의 UIWebView를 대체하고, 양 플랫폼의 동일한 API를 제공하는 새로운 Webview이다. 60fps 스크롤링, 빌트인-제스처, App-WebPage 간 커뮤니케이션을 제공한다. UIWebView와 WKWebView의 큰 차이점은 2가지가 있다. 먼저 UIWebView는 UIKit에 구현되어 있어, 따로 import가 필요하지 않다. 그래서 Interface builder에서 사용할 수 있다. 그 다음, WKWebView는 javascript 최적화를 위해 별도의 프로세스를..

[Design] 아이폰 해상도에 대한 고찰 (레티나, pt, px 등)

이번엔 아이폰 해상도에 대한 얘기를 해보려고 한다. 먼저, Point에 관한 것이다. Point는 좌표계에 대한 추상적 단위이다. 이는 아이폰의 다양한 모델 해상도를 모두 지원하기 위해 사용하는 좌표계이다. Point 좌표계는 각 디스플레이의 스크린이 가지는 Scale factor (화면 배수) 에 따라 Rendered pixel로 옮겨진다. 각 Scale factor는 non-retina (e.g. 아이폰 3Gs 이전 모델) 의 경우에 1x이며, 일반적인 레티나 디스플레이 (e.g. 아이폰 4~7 모델)는 2x의 Scale factor를 가지고 대화면 기기 (e.g. 아이폰 6/7 플러스 모델)들은 3x의 Scale factor를 가진다. 각 Point 값에 Scale factor를 곱하면 Render..

Programming/Design 2017.01.11

[iOS] What's new in iOS 10

SiriKit 앱 내부에서 득정 도메인에 대한 서비스를 제공할 수 있다. Intent와 Intent UI 를 활용하여 서비스를 제공가능하다. 제공 가능한 도메인은 아래와 같다. - 오디오/비디오 콜- 메시지- 결제 관련- 사진 검색- 예약 관리- 운동 일정 관리 관련 키워드 : SiriKit, Intents framework, Intents UI framework Proactive Suggestions iOS9에서 Spotlight와 Safri search results를 통해 앱의 동작이나 Depp link등을 제공할 수 있었다. iOS10에서는 사용자가 앱에서 어떤 동작들을 사용할 수 있는지 정보 제공이 가능하다. 키보드의 Quick type이나 맵, app switcher, Siri interact..

[Apple] WWDC 2016 키노트 요약

WWDC27년째1300만명 등록5000명이상 참석자74개국72% 첫 참석자.... App Store8년전 앱스토어의 시작200만개의 앱이 등록1300억 앱 다운로드500억달러를 개발자들에게 지급 4개의 플랫폼 : OS X(매킨토시), iOS(아이폰, 아이패드), watchOS(애플워치), tvOS(애플TV) watchOS가동시간 가속화반응성 향상메모리 상에 즐겨찾기 관리백그라운드 업데이트7배 빨라짐Watch에서 Dock을 제공Controllcenter를 제공 아이폰처럼Scribble이란 기능으로 Watch 화면에서 글을 필기 가능다양한 Watch face를 추가로 제공하며 쉽게 Switch가 가능SOS 기능 추가 911로 긴급 전화나 메시지 가능하며 자신의 위치를 자동으로 전송 가능 (미국뿐만 아니라 국..

WWDC/2016 2016.06.24

[iOS] '=='과 'isEqual:'의 차이

포스팅을 시작하기에 앞서 'equlity'와 'identity'의 파이를 아는 것이 중요하다. 'equality'는 값의 동일함을 의미하고, 'identity'는 메모리의 주소가 일치함을 의미한다. 'isEqual:' 메소드는 Equlity와 연관이 있다. NSObject에서의 'isEqual:' 기본 구현은 메모리 주소 비교에 기반한다. 이외에 NSObject를 상속 받은 클래스들은 'isEqual:'을 구현할 때 아래의 사항을 따른다. - 'isEqualTo___CLASSNAME___'이라는 이름의 메소드를 통해 값을 비교하도록 구현한다.. (Equality)- 'isEqual:'를 오버라이딩하여 클래스와 객체의 비교한다. (Identity)- 'hash'를 오버라이딩한다. hash는 해시 테이블 구..

[iOS] CoreData: Concurrency & Performance

Concurrency 이번엔 개발자들에게 엄청난 이점을 가져다 줌과 동시에 엄청난 짐을 안겨주는 멀티 쓰레딩에 관한 얘기다. CoreData는 Cocoa 플랫폼에서 제공하여 코드의 양을 줄이고, 사용하기 편한 데이터베이스이다. CoreData를 Concurrency하게 사용하면서 성능을 향상시키는 방법에 대해 알아 보겠다. 일단 CoreData에서는 2가지 타입의 Concurrency 옵션을 제공한다. NSMainQueueConcurrencyType와 NSPrivateQueueConcurrencyType이다. NSMainQueueConcurrencyType는 앱의 main therad에 의해서 사용되어진다. NSPrivateQueueConcurrencyType는 NSManagedObjectContext ..

[iOS] Initialization과 Literal

오늘은 초기화 메소드에 대한 포스팅이다. Objective-C로 개발을 하다보면 가장 많이 구현하는 부분이 초기화 메소드일 것이다. 일반적으로 아래와 같이 초기화 메소드를 사용하게 된다. -(instancetype)init{ self = [super init]; if (self) { //impelment here } return self;} 이중에서 우리가 얘기할 부분은 위에 하이라이팅된 부분이다. 굳이 메모리에 할당되어 있는 self 객체를 슈퍼클래스에서 초기화한 객체로 다시 assign하는 것일까? 주변 다른 개발자 분으로부터 그 해답을 얻었다. 우선 해답은 super class의 초기화 과정을 거치면서 할당된 메모리의 주소가 변경될 수 있기 때문이다. 메모리 주소가 초기화 과정에서 변경되는 이유는 ..

[watchOS] Complication in Apple watch (watchos 2.0 or above)

Complication은 복잡한 요소를 말하는 것으로 시계에서 시간을 가르쳐주는 페이스를 제외한 부속 화면 등을 얘기한다. watchOS2.0으로 업데이트되면서 Apple watch는 Complication을 지원하게 됬다. 사용자에세 간략한 정보를 신속하게 실시간(실제로는 사용자가 보는 순간)으로 업데이트하고 싶을 때 사용하면 좋다. 단, 여기서 중요한 것은 '간략한'이다. 데이터 처리 혹은 네트워크를 활용한 데이터 접근 등의 overload가 많은 데이터 처리는 삼가는 것이 좋다. 이를 위해 watch app 내부에 data를 캐싱하는 것도 좋은 방법이다. 이제 Complication에 대해 하나씩 알아보자. Complication은 모두 5가지의 family를 제공한다. 5가지의 모양을 가지고 있는..

[watchOS] watchOS 2.0 변경 및 개발 방법

watchOS 2.0 (이하 watchOS 2)이 릴리즈된지 벌써 4개월이 지났다. 이제서야 watchOS 2를 정리하는 나의 천성적 게으름을 핀잔하며 이 글을 시작하려 한다. 참고로 이 포스팅은 Apple에서 제공하는 Transition Guide와 Document를 기반으로 작성됨을 알린다. watchOS 1.0 (이하 watchOS 1)에 대한 전반적 이해를 위해서는 이전 포스팅 (WatchKit : watchOS 1.0으로 개발하기)을 참고하기 바란다. 1. OS 업데이트로 인한 App 구조 변화 watchOS 2에서 바뀐 가장 큰 소프트웨어적 차이점은 앱 소스 및 리소스를 관리하는 WatchKit Extension이 iOS app 부분에서 watch app으로 이동한 부분이다. 아래의 그림을 참..

[iOS] Core Spotlight 구현 방법 (iOS 9 or later)

Core Spotlight framework Spotlight는 검색 기반의 아이폰 사용의 중심에 있다. 특히 iOS9 이후로 Siri와 spotlight의 결합으로 개인 비서로서 기능이 강화됬다. iOS9 이후 Core Spotlight라는 API를 제공함으로써 개발자는 앱을 spotlight와 결합하여 Depp Link를 구현하는 등의 앱과 OS의 결속력을 높여 더 높은 차원의 UX를 제공할 수 있게 됬다. 그럼 Core Spotlight를 이용하여 앱 데이터, 서비스를 Indexing하는 방법에 대해 알아보자. CSSearchableItemAttributeSet CSSearchableItemAttributeSet은 search result에 표시하기 위한 메타데이터를 저장하는 객체이다. 각 프로퍼티..