iOS 앱이 디버거 위에서 실행되는지 확인하기

요즘 나는 UrQA iOS 클라이언트를 개발하고 있다.
이 서비스는 앱에서 버그가 발생할 경우 버그를 잡아내어
서버로 보내주는 Crash Reporting Service이다.

그래서 외부 사람들에게 배포하기 위해 Framework로 개발하던 중이었다.

-

UrQA에서 버그를 캡처하는 방법은 Mach를 사용하여 Thread에서 버그를 캡처하고,
그 Thread를 제외한 나머지 Thread를 일시정지시킨 상태에서 크래쉬 리포트를 작성한다.
그리고 마지막으로 그 크래쉬 리포트를 전송 또는 저장한 후 abort()를 통해 앱을 종료시킨다.

-

그런데 이 과정에서 Xcode를 통해 Debugger가 연결된 상태에서 버그가 발생하면
Debugger는 abort()가 호출된 그 위치를 버그가 발생한 위치로 판단해
UrQA 서비스의 문제로 보이게 만드는 바람에 이 문제를 해결해야하는 상황이 발생한 것이다.

그렇다고 이 문제를 DEBUG 플래그로 해결하자니
배포시에는 Release 모드로 배포가 될테고,
그렇다고 헤더파일에 volatile 변수를 만들어 그 변수를 사용하자니
Release 모드더라도 Debugger가 연결될 수 있다는 문제가 발생했다.

-

그렇게 난관에 빠져있는데 예전에 시스템 정보를 가져오는 sysctl() 함수가 생각났다.
이 함수를 통해 프로세스의 플래그를 통해 디버거 상태를 받아올 수 있다는 것도 말이다.

그래서 구글링을 해봤다.
Mac Developer Library 링크가 바로 나왔다.

-

끝!


[ Source Code ]

bool beingDebugged(void)
{
    int                 junk;
    int                 mib[4];
    struct kinfo_proc   info;
    size_t              size;
     
    info.kp_proc.p_flag = 0;
     
    mib[0] = CTL_KERN;
    mib[1] = KERN_PROC;
    mib[2] = KERN_PROC_PID;
    mib[3] = getpid();
     
    size = sizeof(info);
    junk = sysctl(mib, sizeof(mib) / sizeof(*mib), &info, &size, NULL, 0);
    if (junk != 0)
        return YES;
     
    return ((info.kp_proc.p_flag & P_TRACED) != 0);
}



Reference:

https://developer.apple.com/library/mac/qa/qa1361/_index.html

Swift Korea - Cover

- **Swift Korea - Cover**  |  2014.06.10 - PM11:38 - '스위프트'라는 애플의 새로운 언어가 발표되었을때
며칠 안지나서 Swift Korea라는 페이스북 그룹이 생겼다

물론 내가 만든건 아니지만
나도 iOS 개발자고 하니 그룹에 초대받았다
근데 개발자들만 모인 그룹이라 그런가
커버 디자인이 요랬다
![](/images/post/2014-06-11-SWIFT-KOREA-COVER-02.jpg) - 정말로 노티가 올 때마다 암걸릴뻔했다 :(
"이건 안되겠다. 마음이 편안해지는 Futura를 써야징!"
- 헤헤 마음이 편하다

한학기

- **한학기**  |  2014.05.29 - PM07:46 - 친구가 한양대학교 족보공유? 교수평가?
그런 비슷한 사이트를 만드는데
로고 디자인이 필요하다고 하길래
시간도 좀 남고해서 작업하게되었다
첨에는 이름이 한학기가 아니라
예전처럼 '한강'이라는 이름을
그대로 사용할 것이라고 생각해서
디자인을 했었다
- 근데 이름이 한학기로 바뀌었다길래
ㅋ...
다시 디자인했는데
한국어 제목이다보니 딱 디자인이 떠오르지 않아서
걍 윤고딕으로 '한학기' 적으면 안되냐고 그랬는데
그건 좀 그렇다길래
좀 고민 좀 하다
다하 디자이너님처럼
해보자하는 마음으로 디자인했다
- 근데 역시나
한글 아트를 해본적이 없어서 그런가
좀 디자인이 구리다
많이 구리다
~~똥이다 똥~~

디발자가 말하는 시선을 끄는 PPT

- **디발자가 말하는 시선을 끄는 PPT**  |  2014.04.03 - PM06:01 - 오늘 ZeroPage라는 학회에서 매주 돌아가면서 발표하는
OMS(Open Micro Seminar) 발표 주자로 선정되서
며칠동안 발표를 준비했다.
준비하는 과정에서 내가 다른 학우님들과는 다르게
'디발자(디자이너+개발자)'라는 아이덴티티를 가지고 있어서
그 점을 어떻게 살려본다면
꽤 재밌는 OMS를 진행할 수 있을거라 생각했다.
- 그렇게 고민하다 나온 아이디어가
다들 한번쯤은 만들어 볼만한 PPT였다.
생각보다 PT를 잘만드는 사람은 없었고
거기에 발표를 잘하는 사람도 없었기 때문이었다.
그렇다고 내가 잘만든다는 것은 아니지만
그래도 어느정도는 도움줄 수 있을거라 생각해
디자인 뿐만 아니라 프리젠테이션 전반에 대한 구상을 하기 시작했다.
- PT에도 나와있듯이 나는
어떤식으로 발표를 할지 목차를 정했다.
그렇게 나온 것이
**발표 - 배치 - 색감 - 폰트 - 자료정리 - 데이터표현 - 자기소개**
라는 7개의 목차였고, 이를 바탕으로 자료조사를 시작했다.
- ![](/images/post/2014-04-03-D2-SAY-POWERFUL-FOCUS-PPT-01.jpg) *(조사한 자료를 중심으로 순서를 도식화시키는 과정)*

이 과정을 통해 실제로 발표할 순서를 다시 재정립했고
필요없는 부분이나 핵심적인 부분을 잡아내었다.
![](/images/post/2014-04-03-D2-SAY-POWERFUL-FOCUS-PPT-02.jpg) ![](/images/post/2014-04-03-D2-SAY-POWERFUL-FOCUS-PPT-03.jpg) - 그렇게 정리된 자료를 바탕으로
큰 세부 그림을 그려보았다.
개인적으로는 이 그림이 정말 중요하다고 생각한다.
어떤식으로 발표를 진행해 나갈까?
개그 포인트를 어느 부분에 주어야할까?
이런식으로 말을 해보면 어떨까?
등등..
발표에 있어 핵심을 준비하는 단계이기 때문이다.
- 그래서였을까 개인적으로는 이 과정이
제일 많은 시간이 걸렸고
가장 많은 부분을 수정, 추가, 제거하는 것을 반복했었다.
여기에 적힌 내용들은 조사한 자료를 바탕으로
핵심 논리를 간략하게 글로 적었고
이 자료는 다음 자료를 만들때 많은 도움을 주었다.
- 그 다음 자료란
바로 실제로 PT를 어떻게 만들지 그려보는 과정이다.
실제로 배치나 들어갈 텍스트 등을 종이에 그려보는 과정으로
위의 자료를 잘 작성했다면 가장 쉬운 부분이다.
- ![](/images/post/2014-04-03-D2-SAY-POWERFUL-FOCUS-PPT-04.jpg) - 이 과정은 PT를 미리 보고 어떤 느낌을 받을지 예상해보는 단계로
표현 방법에 대해서 많은 고민을 하는 부분이다.
어떠면 이것보다 더 좋은 방법이 나올 수도 있고
상황에 맞는 적재적소의 디자인이 존재하기도 하기 때문이다.
- 아무튼 결국 시간 부족으로
'데이터 표현', '발표 테크닉'장은 준비하지 못했고,
~~하얗게 불태우며~~ 여백의 미로 마지막을 장식하며
아쉬운 끝을 내었다.

COMMA 학술지

- **COMMA**  |  2014.03.06 - PM07:59 - 얼마 전 중앙대학교 컴퓨터공학과의
집부인 정보통신부에서 제작하는
콤마지라는 학술지를 작업했다.
사실 처음 작업을 시작할 때는
같은 집부니까 도와줘야지하는 느낌으로 시작했는데
작업이 진행되면서 농담반으로 말한 적이 있다.
*"학생회에서 돈주면 외주 돌렸다고 하고 10만원 정도로 우리끼리 맛있는거 사먹자ㅇㅇ"*

그런데 시간이 지나 위의 메인 페이지가 나오니
친구가 이건 돈 많이 줘야겠다라면서
학생회 쪽과 쇼부치고 온다길래
*"나야 좋긴한데 괜찮아? 학생회 요즘 힘들잖아"*
*"ㄴㄴ 괜찮, 어짜피 저거 만들어두면 매년 활용할 수 있잖음"*
*"ㅇㅋ 열심히 해줄게"*
- ![](/images/post/2014-03-06-COMMA-02.png) - 그렇게 진짜 외주가 시작되었고
나는 나대로 디자이너의 마음으로 작업하기 시작했다.
사실 잡지는 처음으로 작업하는거라
이게 잘되고 있는건지 망하고 있는건지..
내가 예쁘다고 생각하는 대로만 작업한 것 같다.
거기에 InDesign이라는 프로그램도 처음 써보게 되어
느려터진 프로그램을 익히느라 참 힘들었었다.
- ![](/images/post/2014-03-06-COMMA-03.png) 그래도 같은 동기끼리였고,
안받을줄 알았던 외주비를 준다니까 정말 열심히 했던것 같다.
외부에 판매되는 잡지랑은 비교할 수는 없는 퀄리티지만
처음하는 작업치고 좋은 수준이 나와서 다행이라고 생각한다.
- 그런데 이 콤마지가 학생회 쪽에서도
전혀 어떤 의미인지 컨셉이 어떤 것인지 알려진채
대대로 이어온게 아니라
컨셉같은 중요한 내용이 쏙 빠진채 내려왔기에
스스로 고민해야 했기에 어려운 점도 많았다.
그래도 디자인 컨셉을 콤마라는 이름처럼
어려운 주제를 쉽게 접할 수 있는 쉼터라는 의미를 담아
시원한 느낌의 컬러와 편하게 느낄 수 있는
둥글둥글한 느낌을 살려 디자인했다.
- 아무튼,
이번 외주는 스스로에게도 좋은 경험을 쌓을 수 있었고
새로운 디자인 포인트를 얻은 기분이라 좋았다.