Monthly Archives: October 2013

Mavericks에서 “보조장비 활성화” 어디갔지?

Mavericks에 올리고 사용자들이 가장 먼저 당황하는 부분은, 1keyboard나, Divvy, Better Touch Tool, Text Expander와 같이 키보드나 마우스사용에 관련되어 실생활 깊숙히 들어와 내가 가려웠던 부분을 긁어주는 앱들은 대부분 “보조 장비에 대한 활성화”가 활성화 되어있어야 사용이 가능한데 시스템 환경설정의 <손쉬운 사용> 영역에 있던 요녀석이 사라졌다는것입니다.

기존에는 <손쉬운 사용>안의 “보조장비에 대한 활성화”영역 하나로 모두 통합관리되던 부분이 각각의 앱별로 별도의 설정이 가능하도록 변경되었는데, 아직까지 이전의앱들이 이에대해서 대응을 하지못하면서 여전히 <손쉬운 사용>부분을 띄워버리면서 사용자들에게 혼란을 주는것같아 간단히 포스트를 써봅니다.

237de7d327327204728a68ab52ff8239

간단히말해, 보조장비에대한 활성화가 더 세분화되어 시스템 환경설정의 <보안 및 개인 정보>항목으로 이사를 갔습니다. 시스템 환경설정에서 <보안 및 개인정보> 항목안의 <개인정보> 탭으로 가서 “손쉬운 사용”탭 안에 사용하실 앱들을 체크체크! 해주면 됩니다. 물론 이 항목들은 기본적으로 자물쇠로 잠구어져 있으므로, 좌측하단의 좌물쇠를 눌러 잠금을 풀고 체크해 주시면 됩니다. 간혹, 시스템에서 이 앱들을 인식하지못하고 목록에 없는 경우도 있는데 이경우에는 간단히 허용목록안에 어플리케이션을 끌어다 놓으면 항목이 생깁니다 : )

iOS7에서의 StatusBar(상태바)에 대하여.

navicon

 

제가 이 문서를 이해하는데에 필요해서 번역을 한지라 번역의 질은 개판이지만, 조금이나마 도움이 되었으면해서 글을 써봅니다. 이 글에서 궁금하신 내용은 리플을 통해 말씀해주시면 제가아는 한에서 답변해 드리겠습니다 🙂

원문 : http://blog.jaredsinclair.com/post/61507315630/wrestling-with-status-bars-and-navigation-bars-on-ios-7

iOS7에 대응한 Riposte와 Whisper앱을 업데이트하는동안, 계속해서 반복되는 문제점이 하나 있었는데, 우리의 앱의 계층적 레이아웃때문에 발생하는 문제들이 계속적으로 발생하였습니다. 문제가되는 API들은 대부분 System StatusBar(이하 상태바)와 UINavigationController(이하 네비게이션컨트롤러)가 원인이었는데. API문서들이 쓰여져 있더군요.  아무튼 아래에 있는 내용들은 iOS7에서 상태바와 UIViewContorller간의 문제점들떄문에 고생하고있는 개발자들을 위한 내 지식을 공유한것입니다.

1. iOS6 스타일의 상태바 레이아웃은 더이상 제공하지 않습니다. iOS7에서 실행되는 어플리케이션의 상태바는 항상 앱화면위를 오버랩하여 나오게됩니다.

2. 상태바의 Appearance와 상태바의 레이아웃을 헷갈리지 마십시오. 상태바의 Appearance(Light Or Default)는 상태바의 레이아웃(Frame이나, 높이, 오버랩되는것..)등에 영향을 전혀 끼치지 않습니다. 더이상 상태바에 배경색이 들어가지 않는다는것을 의미합니다. 해당 API의 UIStatusBarStyleLightContent라는 값으로 설정하면 글자색만 하얀색으로 변경될뿐 배경색은 투명합니다. UIStatusBarStyleDefault는 검정색 글자에 투명한 배경입니다.

3. 상태바의 모양은 두가지 설정중 하나를 참조하게 되는데요, 기존과같이 StatusBar를 설정하는 코드를 통해 상태바를 설정하는 방식을 사용하거나, UIViewController를 위해 새롭게 추가된 Property를 통하여 설정할 수 있습니다.  후자의 옵션이 디폴트로 사용 되게되어있습니다. 두가지 옵션은 앱의 기본 plist의 <ViewController-Based Status Bar Appearance> 의 값을 통해 스위칭할 수 있습니다. 만약 이 값이 YES로 설정되어있다면, 모든 최상위 뷰컨트롤러는 “preferredStatusBarStyle”메소드의 오버라이드를 필요로 하게됩니다. 이 메소드에서 리턴값을 light하게주느냐 default하게 주느냐에따라 Statusbar의 모양이 달라지게됩니다. 만약 <ViewController-Based Status Bar Appearance>의 값이 NO라면, 기존에 사용한 방식대로 일반적인 코드,즉 UIApplication의 메소드를 통해 StatusBar의 Style을 변경 할 수 있습니다.

4. UINavigationController가 UINavigationBar의 높이를 44px이나 64픽셀중 하나로 변경하게되니다. 만약 UINavigationController의 최상단의 뷰의 프레임이 UIWindow의 최상단에 항상 붙어있는 것을 감지하면, 자동적으로 navigation bar의 높이는 64px이 됩니다. 만약 최상단의 뷰가 UIWindow에 계속적으로 붙어있지 않는다면, Navigation Bar의 높이는 기존의 44px을 사용하게 됩니다. 이 로직은 어플리케이션내에 UINavigationController 아래에 있는 모든 하위 뷰컨트롤러들에게 계속해서 사용되는데, 이 로직이 작동하는것을 막을 수 없습니다.

5. UINavigationBar에 커스텀 백그라운드 이미지의 사이즈의 높이가 기존 44px인 이미지만 사용하고 있다면 어떻게될까요? UINavigationController의 사이즈가 UIWindow의 사이즈와 맞아 떨어진다면, 4번 항목에 따라 UINavigationBar의 사이즈는 64px이 될것이고, UINavigationController는 커스텀 백그라운드의 이미지의 프레임을 (0,20,320,44)로 지정하여 그리게됩니다. 그러니까, 상단에서 20px떨어진 위치에 커스텀 백그라운드 이미지를 그리게됩니다. 이렇게 하게되면 1번에서 말한 내용들을 우회할수 있는 방법 으로 iOS6스타일의 NavigationBar를 그리게 된것같지만 같지만, NavigationBar는 여전히 64px입니다. 이건 좌우로 당기면 나타나는 뷰컨트롤러 (페이스북과같은 형태의 MMDrawercontroller같은..)의 뷰구조에서 더 명확하게 드러납니다.

6. UIViewController의 프로퍼티중 하나로 생긴 edgesForExtendedLayout의 혼동하기 쉬운이름에 혼동하-.. edgesForExtendedLayout는 대부분의 경우에서 아무런 도움도 주지 못합니다. 이 프로퍼티는 UINavigationController에 ViewController를 추가해서 사용하는경우에만 동작을 하는데, 이 프로퍼티를 사용하게되면, edgesForExtendedLayout는 자동적으로 자식뷰컨트롤러의 UINavigationBar의 영역과 상태바의 영역까지 사용할것인가에대한 결정을 내립니다.  edgesForExtendedLayout프로퍼티로 UINavigationController의 UINavigationBar의 영역이 44px이될지 64px이 될지 결정하는것이 아니므로 위와같은 상황에서는 아무런 도움도 되지못합니다. (이로직은 4번로직을 보면됩니다.)

7. 만약에 UINavigationController안에있는 자식뷰컨트롤러의 내용이 네비게이션바에 가려져서 보이지않는 현상을 방지하려면 edgesForExtendedLayout의 값을 UIRectEdgeNone으로 변경하면됩니다. 자식뷰컨트롤러의 View Life Cycle중에 할수있는한 가장 빠른시점에서 설정하세요.

8. UINavigationController와 UITabBarController도 마찬가지로 Tableview와 Collectionview의 서브뷰계층을 ContentInset속성에 덧붙이려고 합니다. 이것은 어느정도는 4번 항목의 상태봐 로직과 비슷한 형태입니다. 이것을 방지하려면 TableView와 CollectionView의 automaticallyAdjustsScrollViewInsets 속성 값을 NO로 세팅해주면됩니다. (기본값은 YES입니다.)

9. 다시한번 말씀드리지만, iOS6스타일로 돌아갈 수있는 로직은 더이상 제공되지 않습니다. iOS6와 가장 비슷한 형태로 구현하려면, 모든 뷰컨트롤러의 모든 뷰를 20픽셀 아래로 내린다음, 최상단에 까만색 20px짜리 뷰를 만들어서 기존의 모양을 흉내내는 수밖에는 없습니다.

10. 애플은 9번에서말한 형태와 같은 형태로 앱을 구성하지 않도록 밀고있고, 애플은 여러분이 상태바아래의 영역까지 새롭게 디자인하기를 바라고있습니다. 맞는 말이긴한데, 기존에 출시되었던 앱이라면 기존의 사용자경험과 기술적인 이유들때문에 항상 애플이 바라는대로 할수는 없을것 같습니다. 여러분의 앱을 사용하는 유저가 원하는 가장 최상의 기발한 방법들을 사용해 보세요.

Mac OS X Mavericks.

Screen Shot 2013-10-23 at 3.55.36 AM

오래간만에 블로그에 써 보는 글. 드디어 Mac OS X의 9번째 버전인 OS X Mavericks의 공식출시가 되었다. OS X으로는 처음으로 무료로 배포되었는데, 한번 무료로 돌린 녀석은 다시 유료로 돌리기 힘들다는 생각을 해보면 대단한 결정임이 분명하다. 나는 Developer Preview때 부터 출시직전 GM까지 계속해서 실사용하고있었는데도 불구하고, 전혀 불편함을 못 느꼈을정도로 DP때부터 완성도 높았던 버전이라 굉장히 만족하고 있다. (다만, GM이라고 신나게 클린설치하고 다받았는데 GM2, 빌드가올라간 버전이 나와서 맨붕) 일단 무료라 하니 받아보고 느끼시길.

체감성능은 확실히 향상되었다. DP4가 나왔을때 쯤 블로그에는 안썻지만 맥북프로 레티나 15인치로 맥북을 변경하게되었는데 (기존에는 17인치 맥북프로) 비단 그 이유뿐만 아니더라도, 체감할수 있을정도의 성능향상이 있다. 매버릭스에서 특히 Technology적인 부분들을 많이 강조를 했는데 그게 이유가 아닐까 싶기도하고.  특히 많이 향상된 스크롤 부분은 기존 레티나맥북프로 사용자들이 고질적으로 느꼈던 스크롤버벅임이 많이 개선되었으니 추천할만한 업데이트. (돈이든다면 몰라도 공짜니까) 퍼포먼스적으로만 보자면 스노우레오파드 수준으로 돌아간 느낌이라고 할 정도니 얼마나 가벼운건지 느껴진다.

뭐, 각설하고 다운로드 받아씁시다. 공짜니까! (맥 개발자라고 맥개발자부심 부리고있었는데 공짜로 풀려서 뻘쭘…)
https://itunes.apple.com/us/app/os-x-mavericks/id675248567?mt=12