Universal Link (iOS9) 적용하기

Universal Link? iOS9에서는 Universal Link 라는 기능이 추가 되었습니다. 이 기능을 쉽게 설명하자면, 일반적인 링크를 유저가 선택 시 해당 웹페이지로 이동하는 것이 아닌 해당 웹페이지에서 제공하는 앱을 띄워주는 기능입니다. 기존에는 앱의 고유 scheme을 정의해서 띄우는 방식이었는데 여기서 조금 더 발전된 기능이죠. Medium이라는 앱을 주로 사용하시는 분들은 이미 이 기능을 보셨을 수도 있겠네요. 짧지만 데모 영상 보고 가실게요~ 영상 최초 화면은 iOS 기본 메모장으로 테스트를 위해서 형식을 달리한 제 홈페이지 주소를 저장해뒀습니다. 그 주소 중 하나를 선택하면 일반적으로는 safari가 열리며 홈페이지가 열리지만 제가 임의로 만든 앱으로 이동하는 것을 볼 수 있습니다. 이것이 Universal Link 입니다. 간단하죠? Universal Link 구현 방법 당연하겠지만 애플 문서에서 잘 설명하고 있습니다. 그 외에도 검색을 해보면 여러 글들이 보입니다. 웹서버에 apple-app-site-association 파일 업로드 앱과 연관된 웹 서버의 루트(ubuntu 서버에서는 기본적으로 /var/www/html)에 정의 된 apple-app-site-association 파일을 업로드 합니다.이 파일은 JSON 형태로 아래와 같은 형태를 가집니다. JSON 내용 중 appID는 애플 개발자 계정의 Account Info 내용 중 Team ID 값과 앱의 identifier입니다.…

이제 Swift로 넘어가도 되요?

iOS 앱 개발자 혹은 관심있는 분들이 관심가지는 화두는 “이제 Swift 로 넘어가도 되요?” 인 것 같다. 어제 OSXDev 모임 때는 내 의견을 언급하지 않았지만 조금 진지체로 내 생각을 얘기하자면 넘어가고 말고는 모두의 마음에 있는 모험심(도전정신)에 달려있다고 본다. 개인적인 이야기를 조금 하자면, 학교에서는 하드웨어 하느라 C/C++만 했었고 대학원 때는 시뮬레이터 만든다고 MFC, 첫 직장에서는 Android 개발을 했었던지라 iOS 앱 개발을 처음 시작했을때는 생소한 Objective-C라는 언어에 익숙해지려 부단히 노력을 했었다. 시중에 나오는 책들 다 사서 이것저것 참조하고 온라인 뒤지고 iOS 업데이트 될 때마다 새로운 기능들 연습삼아 만들어보고.. 다시 그렇게 할 수 있을까란 생각이 들 정도로 재미있었고 문턱 하나씩 넘는 재미에 푹 빠져있었다. 2014년 WWDC에서 Swift가 발표되었을 때는 옆에 계신 분에게 전 계속 Objective-C만 할 겁니다. 라고 했는데 숙소에 돌아와 곰곰히 생각해보니 뭔가에 익숙해지다보니 점점 보수적이 되고 안주하려는 내가 무서워졌었다. 그래서 관심은 가져보자는 생각에 Swift 관련 자료나 도서에 관심을 가지게 되었고 SKP에서 마지막 프로젝트는 함께 프로젝트 수행하는 형님에게 동의를 구하여 Swift로 세팅해서 일단…

rMBP 상판 (디스플레이) 교체기

지난 금요일 (제 실수로) rMBP 디스플레이 모서리가 망가지는 사고가 생겼습니다. 아래 화면처럼 이미 결과는 돌이킬 수 없는 상황.. 다행히(?) 가장자리라 이걸 그냥 쓸까 교체를 할까 고민이 시작되었고 퇴근하고 집에 와서 고민과 검색을 거듭하다가 생계를 위한 머신이니 교체를 하자란 생각에 ifixit에 들러 자가 수리가 어려울까 분해기(ifixit.com)를 리뷰하기 시작. 결과적으로 디스플레이만 교체는 어렵고 상판 모두를 교체해야한다는 식의 댓글이 있었고 더욱이 상판교체도 난이도가 높다고 합니다.. 워런티는 이미 끝난 상황이니 센터는 너무 비쌀거란 가정하에 사설 업체를 알아보기 시작! 애플 사설업체 참 많네요… 대부분이 홍대와 강남쪽에 몰려있었고 의외로 판교쪽은 별로 없더군요. 제 요구사항은 수리기간이 되도록 길지 않았으면 하고 시간이 걸리더라도 내가 직접 들고 가서 들고오고 싶다. 제 맥북프로가 LG에서 만든 모듈이었고 백화현상(Burn in)이 있었던지라 교체하더라도 백화현상을 다시 겪고 싶지 않다. 교체 후 바로 문제는 생기지 않을테니 사후 처리가 되고 믿을만한 곳이면 좋겠다. 여서 수리 후기를 검색해보는데 대부분 네이버 블로그.. 네.. 짜고치는 고스톱이 워낙에 많다보니 사실이 뭔지 헷갈리는 지경이 이르렀습니다. 결국 내가 직접 교체를 해볼까 싶어 ebay에서…

xcode7에서 자동으로 관리되는 Provisioning Profile 갱신하는 먼지팁(?)

xcode로 iOS 앱이나 Mac 앱 개발하기 위해 Provisioning Profile 설정을 해야합니다. 저처럼 일일이 손으로 provisioning을 관리하는 개발자분들도 계시겠지만 xcode가 자동으로 관리하도록 하여 편하게 쓰시는 분들도 꽤 계시는 걸로 알고 있습니다. 단말이 추가되거나 갱신이 필요할 때는 아래처럼 Preferences > Accounts > View Details에서 왼쪽 하단에 있는 refresh 버튼을 누르실텐데요. xcode7에서는 이 Refresh 버튼이 사라지고 그 자리에 아래처럼 Download All 버튼이 자리를 잡고 있습니다. UI 버튼 하나가 바뀌었는데 이렇게 되면 Refresh는 어떻게 하냐?! 라고 실제 애플 포럼과 개발자들의 성지인 stackoverflow에 관련 글이 꽤 있는 상황입니다. 이럴 때 손쉽게(?) 갱신을 할 수 있는 먼지팁입니다. Apple Developer Portal에서 단말 변경 (등록 / 삭제)를 한다. xcode로 돌아와 갱신이 필요한 Provisioning Profile에서 마우스 오른쪽 버튼을 눌러 “Move to Trash”를 선택해 로컬에서 해당 Provisioning을 삭제한다. 다시 Download라는 버튼이 나타났을 때 Download 누른다. 네 이 세 단계가 끝입니다. 실제로 해보니 다시 다운로드 받을 때 갱신을 하고 내려주는 걸로 확인했습니다 (Expires Date 가 변경됨) Apple에서는 개발자들이 편하라고(?) Refresh를 다운로드…

3D Touch 적용하기 (2) – UIKit Peek and Pop

이번에는 UIKit peek and pop 중 preview action에 대해서 살펴보겠습니다. 애플에서 제공하는 예제를 참고하였습니다. 애플 공식 예제 Peek and Pop 이란? 우선 Peek과 Pop의 차이점을 먼저 설명하면 Peek은 화면을 누르는 강도를 점점 강하게 했을 때이고 Pop은 아주 강하게 꾸욱 눌렀을 때를 의미합니다. Peek은 지원 단말을 가지고 계신 분들이라면 신기해서 많이 해보셨을텐데 Pop을 해보셨을지는.. (네.. 저는 이 문서 작성하면서 알았습니다..) Peek and Pop의 구현 등록(Register) : registerForPreviewingWithDelegate 메소드를 통해 preview delegate 및 preview가 나타날 대상 view를 지정합니다. 또한 대상 view controller에 UIViewControllerPreviewingDelegate protocol을 지정합니다. 일반적으로 viewDidLoad 메소드에서 등록을 합니다. Peek :  protocol 메소드 중 previewingContext: viewControllerForLocation: 을 통해 기능이 정의되며 Previewing에 사용할 View Controller를 지정하고 animation이 시작될 rect 와 preferred content size를 지정합니다. Pop : protocol 메소드 중 previewingContext: commitViewController: 를 통해 정의됩니다. 일반적으로는 showViewController 혹은 showDetailViewController를 이용하며 둘의 차이점은 타겟이 되는 view controller만 전체화면으로 보여줄 것(showDetailViewController)이냐 대상 view controller를 포함한 container view controller까지 전체화면으로 보여줄 것이냐 차이로 저는 이해를 했습니다. Previewing Action…