-
[iOS] iOS9에서 canOpenURL, openURL에 어떤일이..?앱등이에게 살충제를 뿌린다./iOS 2015. 10. 22. 23:39
URL Scheme이란?
"http://www.apple.com"과 같은 URL은 익숙하실텐데요. iOS에서도 이런 URL시스템이 제공됩니다. http를 비롯하여 mailto://같은 것들이 있습니다. http는 사파리와 연결되고 mailto같은 경우는 메일앱과 연결이 되지요. 스토어에서 내려받은 앱들에게도 이러한 URL이 임의로 등록될 수 있습니다.
이렇게 등록된 임의의 URL은 여러 용도로 사용됩니다. 웹에서 컨텐츠를 보다가 "OO앱에서 열기"라는걸 보신적이 있으실텐데, 이경우도 이에 해당하죠.
(샌드박스 형식으로 인해)iOS에서는 앱간의 통신이 다소 제한적이기 때문에 URL은 앱간의 통신에 주로 사용되었습니다. Drafts, Launch Center Pro, Workflow 와 같은 앱들이 URL scheme의 장점을 활용한 훌륭한 앱들에 해당합니다.
애플이 바꾸고자 하는 방향은?
iOS9에서 URL scheme에 대한 변화중 가장 큰 키워드는 "Privacy and Your Apps"입니다.
canOpenURL과 openURL메소드가 영향을 받게 되었습니다. 이 메소드들은 기존에 존재하던 메소드이고 이 메소드 자체가 변하는것은 아닙니다. 이름에서 예상하시겠지만 canOpenURL메소드는 디바이스에 URL에 해당하는 앱이 설치되어 있는지를 확인한 뒤 YES 또는 NO를 리턴합니다. openURL은 실제로 그 URL을 수행합니다. 즉 앱을 실행시킵니다.
iOS9 이전까지 앱은 이 메소드를 사용해서 어떤 URL도 호출할 수 있었습니다. iOS9의 시작과 함께 앱은 어떤 URL scheme을 호출할 지 설정파일(whitelist)에 명시해주어야 합니다. http또는 https같은 공통으로 사용되는 URL은 등록을 해줄 필요가 없습니다.
XCode7과 iOS9 베타 pre-release버전에서 아래와 같은 실험을 했습니다.
- whitelist에 명시하지 않은 URL을 canOpenURL을 통해 호출하고자 한다면 디바이스에 해당 앱이 설치되어 있더라도 NO를 리턴하게 됩니다. 그리고 "This app is now allowed to query for scheme xxx"라는 로그가 찍히게 됩니다.
- whitelist에 명시하지 않은 URL을 openURL메소드를 사용하여호출하고자 한다면 이 메소드가 실패적으로 작동합니다. 마찬가지로 "This app is now allowed to query for scheme xxx"라는 로그가 찍히게 됩니다.
실제로 이러한 상황은 URL이 이제 소수의 앱에 대하여 앱이 설치되어 있는지를 확인하고 외부 앱을 실행시키는 용도로만 사용되었음을 의미합니다. 예를 들어 구글에서는 Chrome이나 Maps에서 백버튼을 구현하기 위해서 x-callback-url라는 URL기반의 기술을 사용합니다. 구글이 명시하는 URL에 대해서는 계속 사용이 가능하겠지만 이제 무작위 앱에 대해서 이 기능은 더이상 사용이 힘들 것입니다.또한 URL 콜백을 많이 사용하는 런처앱 종류들을 사실상 다 죽여버렸습니다. Drafts 또는 Workflow같은 앱에서 다른 앱의 서비스에 접근하는것도 힘들어졌구요.애플은 왜이런 변화를 원했을까?
애플은 개인 프라이버시를 이유로 이러한 변화를 만들고 있습니다.
어떤 앱에서도 URL scheme을 등록할 수 있고 canOpenURL이 특정 앱이 설치되어 있을 경우 YES를 리턴하기 때문에 여러 앱들은 이러한 기능을 부정적인 목적으로 사용해왔습니다. (ex.트위터)
이렇게 얻어낸 정보는 범죄적인 이유든 뭐 어떤 이유에서든 부정적으로 사용되었죠.
애플은 계속하여 URL을 사용하여 할 수 있는 것들(앱 링크, 확장 등)을 위한 보안강화를 하고 있습니다. 이런 변화들은 장기적으로 볼 때 무분별한 URL 사용을 방지하는 측면에서 매우 중요합니다.
원본링크 : http://awkwardhare.com/post/121196006730/quick-take-on-ios-9-url-scheme-changes
관련 WWDC영상 : https://developer.apple.com/videos/play/wwdc2015-703/
'앱등이에게 살충제를 뿌린다. > iOS' 카테고리의 다른 글
[iOS] 웹뷰로 하이브리드앱 구현 시작하기. Building a Hybrid App with UIWebView. (5) 2015.11.27 [iOS] 스크롤뷰의 페이징과 페이지컨트롤, Paging and UIPageControl of UIScrollView (0) 2015.11.08 [iOS] dismissViewController: Animated:와 popViewController: Animated:를 이해해보자. (0) 2015.10.21 [iOS] supportedInterfaceOrientations 메소드를 이해해보자. (0) 2015.10.20 [iOS] Segue의 종류 (0) 2015.10.18