회사에서 사용하는 iMac 의 사양은 3.06 Ghz Intel Core 2 Duo, 8GB, 500GB 입니다.


Xcode를 사용하면서 빌드 - 시뮬레이터 실행 의 속도가 생각보다 많이 답답한 경우가 많습니다.


예를들면 소스를 수정하지 않고 앱 종료 - 재실행의 경우 어떤 때에는 몇 초만에 재 실행이 이루어질 때가 있고.


느릴 땐 10초 이상 걸리는 경우가 있습니다.


왜 그런지도 모르기 때문에 더 답답하죠.



웹 서핑을 하다가 램디스크를 이용한 속도 향상 방법이 있어서 따라 해 보았습니다.


해당 글을 http://blog.shpakovski.com/2014/02/how-to-reduce-xcode-and-appcode.html 입니다. 해보실분은 이곳을 참조해서 따라 해 보세요. ^^


1. DerivedData 폴더를 램디스크를 하드링크 걸어서 사용할꺼라 이 폴더의 내용을 싹 비워줍니다. 안해도 되는데 램디스크가 연결되면 어차피 폴더 내의 기존 파일은 사용이 불가능합니다.


2. 위 링크 글에서 소개하는 램디스크 생성 스크립트를 실행합니다. 저같은 경우에는 처리가 안되길래 권한을 775로 바꿨더니 실행이 되었습니다.


3. 램디스크 설치중엔 Mac이 잠시 먹통이 되었는데 몇 분 후 괜찮아졌습니다. (대략 3~4분정도 버벅임.)


4. 기존 DerivedData 폴더가 어디로갔는지 찾아볼 수 없고 Xcode에서 해당 폴더를 열면 열리긴 합니다.

  (제가 Unix 계열 OS를 잘 다루는 편이 아니라 제가 못찾은것 일 수도 있습니다 ^^; )


5. Xcode 에서 기존 프로젝트 빌드 타임 비교.


기존 HDD 만 사용하는 경우 : 35초



램디스크 설치 후 : 51초.. 응??



뭔가 이상합니다. 왜 램디스크를 사용했는데 빌드 시간이 더 오래걸린걸까요?



딱히 설정이나 최적화가 필요 없는것 같은데 말이죠 ㅡ_ㅡ;;


이번 테스트는 실패. 램디스크 해제하고 재부팅하니 이전 상태로 돌아왔습니다.



다음엔 Xcode에 맞게 최적화 해주는 스크립트 말고 그냥 램디스크만 설치하고 DerivedData를 직접 지정해서 테스트를 해봐야 할 것 같습니다.

Mac과 Xcode를 사용하기 시작 한 게 2009년.


그동안 사용했던 개발툴 & 텍스트 에디터로는 Eclipse, Edit Plus, Xcode중에,

이상하게 단축키를 많이 쓰지 않은 IDE가 Xcode입니다.


자주 사용하는 기능 중 Edit All in Scope 기능 (Eclipse의 Alt + Shift + R : 변수명 일괄 변경) 인데

그동안 단축키를 찾아볼 생각은 못하고 마우스 클릭, 잠시 기다림, 오른쪽에 뜨는 메뉴 클릭 2단계를 거쳐 이 기능을 사용했었는데 오늘 생각난김에 찾아보니 Control + Command + E 라는 단축키가 있었네요.




단축키 하나로 생산성이 얼마나 올라갈 진 모르겠지만, 단축키 사용이 하나 둘 늘어나면 그 차이가 점점 커지겠죠?


자주 쓰는 단축키를 나열해 보자면..

실행, 테스트, 빌드, 클린,

Menu - View - StandardEditor, AssistantEditor, Navigator 의 하위 메뉴들.

디버그 창 열고닫기, 새 탭, 이전/다음 탭, 라인 올리기/내리기, h/m 파일간 전환, Utility창 열기/닫기

Commit, Pull...


막상 기억나는걸 적어보자니 기억이 잘 안나네요~


아마도 머리보다는 손가락이 더 잘 기억하고 있어서가 아닐까 합니다. ^^;


이 글을 쓰다보니 오래 전 컴퓨터 학원에서 아래한글 1.5를 배우던 시절이 생각나네요. 그땐 마우스가 있었는지 기억도 잘 안나지만 그 뒤로도 마우스 쓰지 않고 거의 모든 기능들을 단축키로만 해결 하던 때가 있었죠.


앞으로는 여유있을 때 어떠한 단축기들이 있는지 확인해보고 유용한 단축키는 외워서 써봐야겠습니다.

Xcode 5로 업그레이드 한 이후 SVN에 프로젝트를 Import 하는 메뉴가 사라져서 한참을 찾았는데 결국 Xcode 상에서는 할 수 있는 방법이 없는것 같습니다.


우선은 급한대로 터미널을 이용해야 할 것 같군요.


svn import -m "Import Message"  LOCAL_PROJECT_DIRECTORY svn://서버주소/REPOSITORY_NAME


import 하고 터미널이나 Xcode를 이용하여 Checkout 해서 사용하면 됩니다 ^^

iOS 2.x 일 때 부터 개발을 해왔지만 그땐 메모리 관리도 잘 몰라서 자주 뻗고 그랬는데

어느덧 iOS 7 이 정식으로 공개가 되었습니다.


iOS7에서 UI가 급격하게 변하면서 개인적으로 가장 시급한 문제는 네비게이션 컨트롤러를 사용하지 않는 Single View 스타일의 앱을 업데이트 하면서 생긴 문제인데, 기존에는 상태바 아래부터 콘텐츠 배치가 되었으나, 이제는 모든 화면을 콘텐츠 영역으로 사용하게 되면서 개발자들에게 멘붕을 선물해주고있죠. ㅋ

기존 버전들과의 호환성을 맞추기 위해 iOS7에서도 여전히 상태바 영역만큼을 띄운 채로 보여주려면 하나하나 OS버전에 따라 분기를 해주거나 AutoLayout과 UIViewController.topLayoutGuide 를 사용해야 합니다.


일단 다른 앱들에 적용하기 전에 샘플로 하나 만들어보았습니다.


참고로 스토리보드에서만 가능하고 XIB 에서는 Top, Bottom Layout Guide가 나오지 않는다. XIB에서는 어떻게 하는지 좀 찾아봐야 할 듯 합니다.



일단 화면 구성은 메인 뷰 안에 UILabel을 하나 추가하고 시계 아래쪽에 보이도록 만듭니다.


그리고 Label의 y 값을 0으로 하고 SuperView에 맞춰진 경우 아래와 같은 화면을 보게 됩니다.


iOS6 에서는 기존대로 잘 나오게 됨.


iOS7 에서는 라벨이 상태바 영역을 침범하게 됨.



일단 여기서 한번 멘붕을 겪고 y 값을 20을 주고 띄워서 iOS7으로 실행해본다.

일단 잘 iOS7 에서는 잘 나오게 되지만..

iOS6 에서는 반대로 20pt 떨어져서 나오게 됩니다.


이렇게 되면 어떻게 처리해야 하나 한참 구글신께 물어보면 edgesForExtendedLayout 를 사용하라고 나오는데, 이런 답변은 대부분 iOS7 Beta 초반의 얘기들입니다.


이 방식으로는 아무리 셋팅을 해봐도 Single View 스타일의 앱에서는 효과가 없었습니다.


이에 대한 해결 방법은. UILabel을 선택하고 Xcode의 Utility 섹션(화면 우측)의 Size 탭에 가보면 아래와 같은 제약조건들이 설정되어있다.


여기서 중요한건 Top Space to 라고 되어있는건데 Xcode 4.5까지는 이 기본 보라색 속성을 지울 수가 없었죠.

하지만 Xcode 5 에서는 이 기본 속성도 삭제가 가능합니다.


일단 오른쪽 설정 버튼을 눌러 해당 제약사항을 삭제해버린다.


그리고 Status Bar가 있는것으로 생각하고 20포인트를 띄워준다. (UILabel.frame.origin.y = 20)



이제 왼쪽의 뷰 구조 쪽에서 제약 조건을 설정하고 싶은 객체를 선택하고 마우스 우클릭을 한 채로 위쪽에 보이는 Top Layout Guide로 끌어놓습니다.


그러면 위와 같이 Spacing 항목 두개가 뜨는데 Vertical Spacing을 선택하고 다시 오른쪽에 제약사항들 목록을 보면 Top Space to : Top Layout Guide 항목이 추가되어있습니다.


이제 실행해보면 아래와 같이 iOS6, iOS7 둘 다 똑같은 위치에 UILabel이 표시됩니다.

하지만.... 여기서 끝이 아닌것이, AutoLayout은 iOS6.0 부터 지원하는 기능이라 iOS4.3 ~ 5.x 까지는 여전히 따로 작업을 해줘야 하는 문제가 있습니다.


설명이 길었는데 중요한건 Top Space to 의 Target이 Superview 가 아니라 topLayoutGuide 가 되어야 한다는 것!


언제부터인가 개발하던 앱을 실행시켰을 때 에러가 발생해도 해당 위치를 보여주지 않아서 답답했습니다.


아래와 같이 말이죠.



이렇게 에러 위치를 알려주지 않아서, 에러가 발생했을 때 의심가는 부분에다가 로그를 출력해 가면서 위치를 찾았습니다.


오늘은 하도 답답해서 검색해보니 방법이 있네요. 역시 구글이야.. ㅠ_ㅠ


1. Xcode 좌측 네비게이터 쪽 BreakPoint Navigator 를 열어봅니다. (Cmd + 6)


2. 네비게이터 아래쪽에 + 버튼을 누르면 아래와 같이 Add 항목이 2개가 뜹니다.


3. Add Exception Breakpoint... 를 선택합니다.

속성은 그대로 놔두고 Done을 누릅니다.


테스트용으로 Dictionary에 nil을 셋팅하게 해두고 실행해봤습니다.

예전처럼 에러 발생 위치가 잘 뜨네요.

1. iOS 앱에 게임센터 연동을 하기위해서는 iTunesConnect 의 앱 관리메뉴에서 Game Center 를 활성화 시켜줘야 한다.


게임 센터가 활성화 된 상태.

2. 개발자 문서에 있는 게임센터 인증 메소드를 사용하여 인증을 시도한다.
- (void) authenticateLocalPlayer
{
    [[GKLocalPlayer localPlayer] authenticateWithCompletionHandler:^(NSError *error) {
         if (error == nil)
         {
              // Insert code here to handle a successful authentication.
         }
         else
         {
             // Your application can process the error parameter to report the error to the player.
         }
     }];
}
위의 코드를 호출하게되면 아래와 같은 로그인 화면이 뜨게 된다.


Game Center를 테스트 하기 위해서는 Sandbox용 계정(개발 환경용)을 만들어야 한다.
실제로 사용하던 아이디로는 로그인이 되지 않는다.



3. Use Existing Account 를 누르고 새로 생성한 Sandbox용 계정으로 로그인을 하면 위와 같이 게임센터에 로그인 된 화면을 볼 수 있다..



기타 1. 간혹 아래와 같은 화면이 뜨는 경우가 있을 수 있는데..

이는 Bundle identifier 값이 안맞아서 생기는 오류.. 이 값만 잘 맞춰주면 게임센터 인증하는데 무리가 없음..


+ Recent posts