Programming/Mac & iOS 50

[iOS] KVC, KVO

KVC (Key-Value-Coding) KVC는 문자열을 이용해 property에 접근할 수 있게 해주는 기능이다. 접근자를 이용하지 않고 property의 이름인 문자열로 접근하므로, 객체간 의존성을 낮추고 결합도가 낮은 소프트웨어 개발을 할 수 있게 해준다. KVC를 구현한 메소드는 NSKeyValueCoding 프로토콜에 의해 정의되며, NSObject는 이 프로토콜을 implement한 상태이다. KVC는 아래와 같은 로직으로 동작한다. 1. key와 일치하는 property를 찾는다.2. 일치하는 property가 없을 경우, key와 일치하는 인스턴스 변수를 찾는다. 3. 일치하는 property나 인스턴스 변수가 있으면, 이를 적용한다. 없으면 'valueForUndefinedKey:'나 ..

[iOS] @property, @synthesize, @dynamic

@property 클래스 내의 멤버 변수에 대하여 접근자를 생성한다. @property를 사용할 경우, 추가로 attribute를 부여할 수 있다. attribute들은 아래와 같다. '*'로 표시된 attribute는 선언하지 않아도 기본적으로 적용되는 attribute들이다. getter= : 접근자 중 getter의 메소드 이름을 정의한다. setter= : 접근자 중 setter의 메소드 이름을 정의한다. readwrite * : getter/setter를 모두 만든다. Mutually exclusive로 readwrite를 한다. readonly : 오직 getter만 생성한다. 해당 property에 값을 할당하려고 하면 컴파일 오류가 발생한다. assign * : setter를 통해 간단한 ..

[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가지의 모양을 가지고 있는..

[iOS] Fast Lane 통합 관리 툴 for iOS & android

Fastlane은 iOS 프로젝트에 관한 전반적인 관리 툴이다. Fastlane은 다른 여러 유틸과 연계되어 다양한 서비스를 제공한다. 그 중, 필자가 사용해봤고 유용한 툴 몇가지를 소개한다. *'sudo gem install [PACKAGE_NAME]'을 사용하여 설치할 때, El Capitan에서 권한 이슈에 부딪혀 설치가 안 되는 케이스가 발생한다. 이럴 때는 'vi ~/.gemrc'로 문서를 만들어 'gem: -n/usr-local/bin'을 추가해주도록 하자. 이는 시스템 bin 디렉토리의 접근 권한이 없어서 생기는 문제로 local 디렉토리로 설치 경로를 옮겨 해결할 수 있다. Cert. 인증서 생성 및 갱신 Sigh. 프로비저닝 프로파일 생성 및 갱신 Pem. APNS 프로파일 생성 및 갱신..

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

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

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

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

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