개인적인 2014년 돌아보기 및 2015년..

신년이 밝은지 벌써 6일이 지났습니다. 새해 복 많이 받으세요!! 개인적으로 작년 한 해는 많은 반성을 요하는 한 해가 되었네요. 핑계를 대자면 이런저런 이슈들이 있었지만 결론적으로 포스팅도 미비했고 더불어 개인적인 기술 연마에도 많이 부족했던 한 해였습니다. iOS 위에서 뭔가 만드는게 재미가 있었던 나날에는 혼자서도 이런저런 모듈을 만들어보고 또 적용해보기도 했습니다만 즐거웠던 시절은 거의 저물고 복잡하고 많은 이슈가 발생하는 요구사항에 서서히 복잡해지는 앱을 보며 한숨을 짓기도 했으며 한국에서의 iOS 위상에 대해서도 돌이켜보며 다소 비판적이었던 저였습니다. 그래서 이런저런 외도(?) 시도도 해보며 앞으로 나의 커리어를 어떻게 이어갈까란 고민도 많은 한 해였기도 합니다. Swift 애플에서는 2014 WWDC에서 Swift라는 언어를 발표하였고 이후에 github이나 여러 iOS 개발 관련 매체에서는 Swift로 만든 여러 오픈 소스들이 쏟아져나왔습니다. 반면 한국에서는 몇몇 메이저 기업을 제외하고는 Swift에 소극적인 모습을 보이며 관망만 한 곳이 대부분이었을 것이라 생각이 됩니다. 당연한거죠. 새로 나온 언어이기도 하고 미리 적용한 곳에서의 정보에 의하면 극소수긴 하지만 어쩌면 치명적인 버그도 있다고 보고 되기도 했으니까요. 하지만 2015년에는 아마 많은 iOS 앱…

iOS8에서의 Notification (action, category and settings)

iOS8에서는 Notification에 대한 내용이 다소 변경되었다. 이 부분은 iOS 개발자 뿐만 아니라 Server 담당자와 기획자도 알고 있으면 좋을 듯 하여 테스트를 진행하며 간단히 설명해보도록 하겠다.   우선 변경된 내용을 간략하게 정리해자면, Local / Remote Notification 에 위에 첨부한 것과 같이 액션이 추가되었다. 더불어 Notifiation에 category가 추가되어 카테고리에 따라 다른 액션을 보여줄 수도 있게 되었다. 이 변경점은 개발자뿐만 아니라 기획자도 꼭 알고 넘어가야할 부분이라고 생각되어 기획자가 고려해야 할 부분도 짚어보도록 하겠다. [ 기획자 ] 기존의 Notification 에서는 단일 Action만 존재(터치 시 해당 앱 호출)했으며, userinfo나 payload에 추가 scheme을 적용, 혹은 didReceivedNotification 메소드에서 데이터를 재호출해서 앱 내에서 분기동작을 수행하도록 하였다. 참 번거로운 작업이었고 Remote Notification 의 경우에는 제한된 payload 사이즈 때문에 이마저도 제한이 많았다. 하지만 iOS8 부터는 Notification에 Action을 지정할 수 있는 기능이 추가되었다. 위에 첨부한 화면을 예로 들어 설명하자면 캘린더 초대가 들어왔을 때 “거절(Decline)”, “승락(Accept)” action을 앱에 진입하지 않고도 수행할 수 있다. 이 “거절(Decline)”과 “승락(Accept)” action에 대한 정의는 앱을 실행할 수도…

다각형의 버튼들 배치

일반적으로 버튼은 rectangle. 즉, 사각형의 영역으로 범위를 정의한다. 하지만 위 스크린샷(노란색과 파란색이 각각 버튼이다.)처럼 종종 다각형(polygon) 형태의 버튼 모양이 디자인으로 나올 수 있고 이를 무조건 rectangle로 만들라고 디자이너에게 요구할 수도 없다. 다각형 버튼 각자의 영역이 겹치지 않는다면 큰 문제가 되지 않지만 여기서 문제는 겹칠 때. 이 때는 respond가 addSubview 메소드를 나중에 호출한 버튼이 호출된다. 당연하다. iOS의 UIView 구조는 포토샵의 레이어와 유사한 구조이다. 이를 해결하기 위해서는 여러가지 방법이 있을 수 있지만 가장 효율적인 방법은 터치한 지점에 해당하는 버튼 이미지의 alpha 값을 가지고와 미리 정해놓은 threshold와 비교해서 response를 return값으로 판단할 수 있다. 이를 충실하게 구현해놓은 Open Source가 있어서 소개한다. https://github.com/ole/OBShapedButton 위 코드는 UIButton을 상속받은 OBShapedButton 클래스와 특정 지점의 Alpha값을 가지고 올 수 있도록 메소드가 정의된 UIImage의 category 클래스가 전부이다. 사용법은 두 클래스를 프로젝트에 추가하고 UIButton으로 정의하던 클래스를 OBShapedButton으로 정의하면 된다. 이 코드는 대부분의 iOS에서 사용할 수 있다. 추가적인 팁으로 화면에 여러 개의 버튼이 배치되었을 때 동시에 버튼들을 누르면 모두 눌러지는 것을 확인할…

트위터 연동 시 직접할 것인가? iOS SDK에 내장된 framework를 이용할 것인가?

iOS5부터는 iOS SDK 자체에 twitter.framework가 추가되어 쉽게 트위터와의 연동이 가능하게 되었다. 하지만 직접 연동하는 방법과 내부 framework를 이용하는 방법 간에 차이가 있다. 구현 복잡도를 생각했을 때, 당연히 내부 라이브러리(Twitter.framework)를 이용하는 것이 간편하다. 더욱이 Twitter 홈페이지에 가서 어플리케이션으로 등록하는 절차도 생략가능하니 얼마나 편한가? 출처가 중요한 데이터일 때, 미세한 차이는 바로 여기에 있다. 복잡도에서 설명했듯이 iOS에 내장된 트위터 프레임워크를 이용할 때 트위터 홈페이지에 가서 어플리케이션을 등록하지 않는다는 사실. 인지하였었나? 직접 연동 시에는 Oauth 특성 상 토큰을 부여받아야 하고 이를 위해서 서버에 어플리케이션 등록 과정을 거치게 되는데 이 과정이 생략되었다는 의미는 누군가 이 과정을 대신해주고 있다는 것이다. 즉, 앱스토어 등록 시스템에서 자동으로 등록한다는 것으로 생각해볼 수 있다. 조금 상세하게 살펴보자. 트위터 API를 연동하면 많은 데이터들이 나온다. 트윗 하나에 이렇게 많은 정보가 담겨있는지 놀란 분도 많을 것이다. (직접 샘플을 보고 싶은 분은 링크를 눌러서 화면 하단에 나타나는 JSON 형태를 보라. 하나의 트윗이다..) 이 정보 중 source라는 것이 있다. 한국말로 설명하자면 출처. 트윗이 작성된 클라이언트…

가로 타임라인 인디케이터 (Horizontal Timeline Indicator)

핀터레스트에 올라온 UI/UX 관련 자료를 들여다보다가 문득 이런 것이 있으면 어떨까하고 구현하기 시작했습니다. 제목은 Horizontal Timeline Indicator 로 적었는게 이름만 거창하지 단순한 컨셉입니다.   간단히 그려본 기능 정의서입니다. (영문이 다소 잘못 쓰이거나 틀렸더라도 양해부탁드립니다 ㅠㅠ) 화면의 각 섹션은 편의상 색상으로 구분했으며 구성 목적상 세션이라고 표현하겠습니다. (몸담고 있는 회사의 H3 2012 iOS Client 에 적용해볼까해서 만들기 시작했습니다.) 전체는 첫 번째 세션의 시작시간부터 마지막 세션의 끝나는 시간까지를 나타냅니다. 타임라인 위에는 전체 시간 중에서 현재 시간을 나타내는 인디케이터(Indicator A)와 사용자가 터치한 곳의 정보를 보여줄 인디케이터(Indicator B)가 존재합니다. 사용자가 터치를 시작했을 경우에는 터치 후(touchedBegan) 손가락의 움직임(touchedChanged)에 따라 따라 Indicator B가 움직이며 위치한 시간을 알려주는 인디케이터가 나타납니다. (최종적으로는 세션 제목을 보여줄 생각입니다.) 터치가 끝나면(touchedEnded) 움직이던 Indicator B가 Indicator A로 이동하면서 사라집니다. 이 컨트롤러는 drawRect:를 사용해서 각 세션에 색상을 입히는 코드와 UIPanGestureRecognizer를 이용하여 터치 시작/변화/끝을 정의하였고 아날로그 시계 역시 drawRect:를 이용하였으며 drawRect:를 호출하기 위해 [self setNeedsDisplay] 메소드 호출 방법을 사용하였습니다. 현재는 인디케이터에 아날로그 시계만 배치하였지만 여기에는…