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입니다.…

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…

3D Touch 적용하기 (1) – Home screen quick action API

들어가며.. 최근 새로이 출시한 iPhone6s / 6s Plus 에는 MacBook Pro로 이미 선보인 바 있는 3D Touch 기술이 적용되었다. iPhone에 추가된 3D Touch의 경우 크게 4가지 기능이 있는데 아래와 같다. Home screen quick action API UIKit peek and pop API Web view peek and pop API UITouch fouce properties 그 중 Home screen quick action API 적용하는 방법을 간략하게 알아보도록 한다. Home screen quick action API는 다시 2 종류로 나뉘는데 아래와 같다. Static quick actions Dynamic quick actions 이 둘의 차이점은 미리 정의되어 있느냐 상황에 따라 정의가 되느냐의 차이로 Static quick actions의 경우 info.plist에 정의가 되며, Dynamic quick actions는 코드로 정의가 가능하다. 사실상 차이점은 크진 않으나 혼용하여 사용할 경우 Static이 우선한다는 것이다. 공통의 제약조건이 하나 있는데 quick actions는 4개까지만 적용이 가능하다는 것이다. 5번째 actions부터는 무시된다. Static quick actions 앞서 설명한 것과 같이 info.plist에 정의가 된다. UIApplicationShortCutItems라는 키를 가지는 배열로 선언이 되며 각 item은 Dictionary 형태를 가진다. 각 Dictionary는 UIApplicationShortcutItemTitle / UIApplicationShortcutItemSubtitle…

UITextField의 Placeholder에 animation 효과를 적용한 것처럼 보이게 구현하기

음.. 제목 정하기가 참 힘드네요. UITextField는 보통 로그인과 회원가입 시 유저에게 문자열을 입력받기 위해서 많이 사용합니다. 로그인 페이지에 대해서 이런저런 고민이 있어 pinterest를 검색하던 와중에 아래의 UI 컨셉을 발견했습니다. 부연 설명을 하자면, UITextField에 특정값 입력을 유도하는 placeholder는 입력이 시작되면 사라지게 되어 있습니다. 이 때 위 화면과 같이 타이틀이 별도로 없는 UI구성일 때는 좀 애매한 경우가 생기기도 하는데 재치있게 풀었더군요. 그래서 구현을 해봤습니다! (사실 다 아시는 건데 기록은 남겨야겠기에..) 아래 영상은 위 컨셉과 유사하게 컴포넌트를 적용한 화면입니다. 똑같진 않지만 비슷한가요…? 원리는 UITextField를 상속받은 클래스에 UILabel을 임의로 하나 더 addSubview 합니다. 사실 가장 효율적인 방법은 placeholder를 보여주는 view를 조작하는 것인데 쉽게하기로 맘먹고 UILabel을 배치했습니다. 이 코드에서 가장 중요한 포인트는 changeStatus입니다. enum으로 정의된 status에 따라 UILabel의 animation이 수행되도록 했습니다. !! 아래 노출되는 코드들은 Swift 2.0 기준입니다. 그 다음은 UITextField delegate의 각 이벤트 메소드에 상황에 따른 status 변경을 합니다. 위 코드에서 정의한 changeStatus를 적절하게 호출합니다. 비교적 쉽게 concept 디자인의 UITextField를 완성했습니다. (팁이나 될려나 몰겠네요..)