ATS(App Transport Security) 예외 도메인을 적용했는데도 ATS 오류가 날 때 확인 방법

ATS? WWDC 2016에서 발표된 ATS (App Transport Security) 도입은 iOS9부터 적용되었습니다. SSL 통신을 해야하고 최소 TLSv1.2를 만족해야 하며, 인증서는 SHA256 이상의 해쉬 알고리즘으로 서명되어야 한다는 의미입니다. 하지만 이를 당장에 만족시키기에는 무리다보니 선택적으로 적용되었고 2016년 12월말까지는 필수 적용을 해야한다고 발표했습니다. (그 후 연기가 되었고 지금은 어떤지 모르겠습니다..) 하지만 ATS를 설정한 이후에는 규칙과 예외 도메인을 관리해야하니 귀찮긴합니다… 설정하는 디테일 한 방법은 이 글에서 설명을 하진 않겠습니다. 오류 발생 ATS를 잘 정의했는데 관련 도메인의 추가 등의 이슈로 어느 순간 만날 수 있는 오류 메시지가 있습니다. Connection failed: Error Domain=NSURLErrorDomain Code=-1022 “The resource could not be loaded because the App Transport Security policy requires the use of a secure connection.” UserInfo={NSUnderlyingError=0x7fada0f31880 {Error Domain=kCFErrorDomainCFNetwork Code=-1022 “(null)”}, NSErrorFailingURLStringKey=MyServiceURL, NSErrorFailingURLKey=MyServiceURL, NSLocalizedDescription=The resource could not be loaded because the App Transport Security policy requires the use of a secure connection.} The resource could not be loaded because the App Transport Security policy requires the use of a secure…

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

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…