Programming 99

[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에 표시하기 위한 메타데이터를 저장하는 객체이다. 각 프로퍼티..

[iOS] NSUserActivity 활용 방법 (Hand-off)

NSUserActivity는 검색 결과나 핸드오프를 통하여 사용자가 앱을 사용하던 상태를 저장 복원하기 위해 사용하는 간편한 방법이다. 핸드오프 기능이 처음으로 제공된 iOS8에서부터 지원한다. 처음엔 iOS8에서는 핸드오프를 지원하기 위해서 추가되었다. 그런데 iOS9부터 각 상태를 indexing하여 spotlight 검색결과로 활용할 수 있도록 개선되었다. 먼저 핸드오프에서 사용하는 방법에 대해 말하고, spotlight를 통한 indexing은 다음 포스팅에서 다루겠다. Hand-off 핸드오프는 Mac OS X과 iOS 기기간 지속적인 작업이 가능하도록 해주는 기능이다. 하지만 지속적인 작업을 가능하게 하기 위해서 사용자가 작업하던 환경을 저장했다가 복구하는 수단이 필요하다. 그리고 저장하고 복..

[SVN X] Mac에서 SVN X를 이용한 SVN 사용하기

SVN은 프로젝트를 공동으로 수행함에 있어서 없어서는 안 될 정도로 무지하게 편리한 개발툴이다. 여러 사람이 공동의 레파지토리에 소스코드를 등록하고 빼올 수 있을 뿐만아니라 코멘트도 달 수 있고 자동으로 버전관리도 해준다. 히스토리를 이용하면 자신이 원하는 리비전으로 되돌릴 수도 있으며 각 리비전 사이의 소스코드의 변화도 한눈에 알 수 있다. 그러면 이렇게 편리한 SVN을 사용하려면 어떻게 해야하는가?? 필자는 Windows에서는 tortoiseSVN을 애용하고 Mac OS에서는 SVNX를 애용한다. 여기서는 SVN X에 대해서 배워보자!! == 2015.12.22 : 버전 2.x 다운로드 URL 추가 ==SVN X (2.x) 다운로드 URL : https://code.google.com/p/svnx/w..

Programming/Tool 2015.12.22

[Swift] Swift is now Open Source

애플에서 Swift를 오픈소스화 한다는 공약을 실천했다. 현재 레파지토리는 Github를 이용하고 있으며 담당 사이트로 Swift.org를 개설했다. 이슈 트래킹은 Jira를 이용한다. Mailing-list를 통하여 Swift의 변동사항과 개발 이슈/동향 등을 reporting 받거나 다른 개발자들과 소통 창구로 이용할 수 있다. 아래 Swift 관련 URL을 모아 놨다. 역시 애플에서 관리하는 프로젝트라서 Contribution section에 있는 가이드를 꼼꼼히 읽고 접근하는 것이 좋을 것 같다. Apple in Github : https://github.com/appleSwift Repository : https://github.com/apple/swift Swift.org : https://s..

[Data Structure] B-tree 정의 및 장/단점

검색을 위한 자료구조 중에 잠재력이 가장 큰 것은 역시 트리이다. 그 중 이번 포스팅에서는 B-tree에 대해 알아볼 것이다. B-tree는 주로 데이터베이스에서 인덱스를 저장할 때, 많이 사용된다. 이번 포스팅을 찾은 사람 중에 인덱스 관련 글을 보던 중, B-tree에 대해 궁금해져 찾아온 사람도 있을 것이다. 그럼 B-tree에 대해 알아보자. B-tree의 정의- 모든 노드는 최대 m개의 자식들을 가진다.- 루트노드와 리프노드가 아닌 모든노드는 최소 m/2개의 자식을 가진다.- 루트노드는 최소 2개 이상의 자식을 가진다.- k개의 자식을 가진 리프노드가 아닌 노드는 k-1개의 키를 가진다.- 모든 리프노드들은 같은 높이에 있어야 한다.- 모든 노드들은 키와 자식노드에 대한 포인터로 이루어져 있다...

[Database] 데이터베이스 인덱싱이란?

최근 메신저 프로젝트를 진행하면서 메시지 관련 대용량 데이터 처리를 위해 프로파일링을 통한 성능 최적화 작업을 주로 업무로 하게 되었다. 물론 그 중 단연 DB 튜닝도 작업 내역 중에 포함되었다. 그러던 중 학부 시절에 들어 본듯한 단어가 하나 있었다. '인덱싱' 뭐라도 쓰려면 알고 써야한다는 지론에 따라 '인덱싱'에 대해 구글링하고 공부한 내용을 이번 포스팅에서 정리하려고 한다. 누구나 필자처럼 DB 튜닝을 통해 성능 최적화를 하고자 한다면 이번 글을 간략하게나마 읽어 볼 필요가 있다. 먼저 이 글을 읽는 사람은 기본적인 DB의 구조와 사용법을 안다는 가정하에 시작한다. 인덱싱은 말 그대로 DB에 색인을 남기는 것이다. 왜 색인을 남길까? 책에서 원하는 항목을 찾기 위해 첫페이지에서부터 찾는 것보다 색..

[iOS] Interactive Notification with Text Input (iOS9 or later)

우리는 일전에 iOS8에서 소개되었던 Interactive Notification이라는 기능에 대해 배운바가 있다. 그런데 필자가 다시 Interactive Notification이라는 물건을 다시 꺼내 들어 설명하는 이유는 무엇인가. 그토록 기다려왔던 TextField가 Interactive Notification에 추가되어 API로 공개되었기 때문이다. 아래의 이미지는 페이스북 메신저에서 선 구현한 Interactive Notification에 TextField가 추가된 모습이다. 열심히 구글링을 한 결과, iOS9에서 새롭게 추가된 프로퍼티의 영향임이 확인되었다. UIUserNotificationAction이라는 것을 이용하여 Interactive Notification에 사용자의 action을 활..

[iOS] SFSafariViewContoller 구현 및 활용

SFSafariViewController SFSafariViewController는 iOS9부터 지원한다. 기존의 UIWebView와 달리 브라우징 화면만 존재하는 것이 아니라, 기본 인터페이스(읽기 도구, Full Browsing, Content Blocking 등)가 포함된다. 그리고 번들앱인 Safari와 cookie와 웹 사이트 데이터 등을 공유한다. 앱에서 SFSafariViewController와 사용자 사이의 데이터(히스토리, 웹사이트 데이터 등)를 가로챌 수 없다. SFSafariViewController는 아래와 같은 UI적 특징을 가진다. - '읽기 도구' 버튼을 제공- 공유나 커스텀 서비스 이용에 필요한 액션 버튼을 제공- Back/Forward 버튼을 제공하며, 현재 페이지를 Saf..

[iOS] Segue의 활용/종류

Segue란 무엇인가? Segue는 사전적 의미로는 음악에서 악장에서 다음 악장으로 끊기지 않고 넘어가는 것을 의미한다. 즉 '계속됨', '지속되다'의 의미를 지진다. 그럼 iOS 플랫폼에서의 Segue는 무엇인가. 필자가 알기론 iOS Segue가 등장한 시점은 스토리보드가 등장했을 때로 기억한다. 스토리보드가 등장하면서 일전에 사용하던 ViewController간의 view transition push/pop이나 presentation 등의 동작을 코드에서 뿐만아니라 스토리보드를 동하여 정의할 수 있게 되었다. 앞서 말한 스토리보드상의 view transition의 구현체를 Segue라고 부른다. Segue의 종류 Segue는 개발자가 커스터마이징한 것을 제외하게 되면 크게 4가지로 나눌수 있다. S..

[iOS] 3D Touch 활용/구현 하기 (아이폰 6S/6S Plus or later)

3D Touch는 iPhone 6S 시리즈에서 새로 추가된 포스 터치를 활용한 UX이다. 기존의 정전식 터치 패널이 x,y 좌표를 이용한 평면 좌표계의 터치 인식이었다면 3D Touch는 감압식을 중첩하여 z축의 좌표계를 포함한 3D UX를 구현한 것이다. 이에 기획자들은 이를 이용하여 새로운 컨셉과 시나리오를 구상하고, 개발자들은 3D Touch를 활용한 기능 구현을 터득하는 상황에 도달하게 된다. 아래의 글은 3D Touch를 구현하는 방식에 집중되어 있으며, 자세한 구현 방식을 애플의 샘플 코드를 참조하기를 바란다. P. S. 3D touch는 6S 시리즈 이후로 출시된 기기에서만 사용이 가능하다. 이를 구분하기 위해서 UIDevice를 통해 모델 명을 가져오는 방법도 있겠지만 Apple에서는 UI..