Programming 107

[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] APNS JWT (JSON Web Token)

Apple이 JWT (JSON Web Token)을 활용하여 인증서 만료없이 사용할 수 있는 방법을 공개했다. WWDC 2016 session 724를 통해 언급 했었다. JWT는 JSON Web Token으로 기존의 XML 기반의 signature를 JSON으로 교체하여 페이로드/파싱를 경량화하고 기존 JSON의 범용성을 갖춘 새로운 방식의 토큰이다. Apple은 APNS를 사용하는 데 있어 이 방식을 추가로 제공하게 됬다. 기존 APNS는 App ID와 APNS 인증서를 연동하여 서버에서 인증서를 사용하려 APNS 서버로 푸시를 전송하는 방식이었다. 그래서 인증서의 만료 기간에 따라 서버의 APNS 인증서를 교체 해줘야하는 번거로움이 있었다. 이를 해결하기 위한 방안이 여러개 나왔고, Fast lan..

[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..

[iOS] Alcatraz : Xcode 패키지 매니저

Xcode에는 여러가지 플러그인들이 존재한다. 플러그인은 Xcode에 부가적인 기능을 제공함으로써 사용자에게 편의를 제공한다. 이번엔 앞서 말한 플러그인들을 쉽게 찾아서 쓸 수 있도록 해주는 Packgage Manager에 관한 포스팅이다. 이름은 Alcatraz!! Alcatraz.io : http://alcatraz.ioAlcatraz in Github : https://github.com/alcatraz/Alcatraz Command for installing the Alcatrazcurl -fsSL https://raw.github.com/supermarin/Alcatraz/master/Scripts/install.sh | sh 위의 URL로 Alcatraz의 기능을 파악하고, 명령어를 사용하여 ..

[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의 초기화 과정을 거치면서 할당된 메모리의 주소가 변경될 수 있기 때문이다. 메모리 주소가 초기화 과정에서 변경되는 이유는 ..

[iOS] App Extensions in iOS

App Extensions 이번 포스팅에서는 App Extension에 대해서 알아볼 것이다. iOS 8 이후로 새롭게 추가된 기능 중에 Extnesion이라는 것이 눈에 띄었다. Extension은 앱의 기능을 시스템으로 확장하여 보다 다양한 기능을 제공한다. iOS 9으로 업데이트되면서 기존에 제공하던 기능외에 다른 여러 기능들을 제공하기 시작했다. 필자의 경우, Extnesion에 관시을 가지게 된 이유는 써드 파티 키보드와 위젯 때문이었다. 그런데 상용 앱 시장에서 위젯과 키보드 뿐 아니라 이와 더불어 공유나 액션 기능도 다양하게 활용되는 것을 보았다. 그래서 기존 필자가 관심을 가지던 써드 파티 키보드나 위젯 외에 다른 Extension에 대해서 정리해야 겠다고 느끼게 되었다. 아래는 각 App..

[iOS] Automatic Retain Counting (ARC) in Objective-C & Swift

Automatic Retain Counting (ARC) Objective-C와 Swift에서 사용하는 메모리 관리 방법으로, retain count를 추적해야하는 번거로움을 개발자가 아닌 컴파일러에게 일임하는 것이다.본래의 Objective-C에서는 'retain'과 'release' 메시지를 사용함으로써 객체를 해제할지 말지를 표시했다. ARC에서는 컴파일러가 소스코드를 검사하여 컴파일된 코드 안에 'retain'과 'release' 메시지를 추가한다. ARC가 코코아의 garbage collection과 다른 점은 객체를 해제하기 위한 background-process가 별도로 존재하지 않는다는 점이다. 그리고 ARC는 Retain Cycle에 대해 자동적으로 대응할 수 없다. 그래서 개발자는 'w..