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 개발자고 하니 그룹에 초대받았다

근데 개발자들만 모인 그룹이라 그런가
커버 디자인이 요랬다

-

정말로 노티가 올 때마다 암걸릴뻔했다 :(
"이건 안되겠다. 마음이 편안해지는 Futura를 써야징!"

-

헤헤 마음이 편하다

한학기

-

한학기  |  2014.05.29 - PM07:46

-

친구가 한양대학교 족보공유? 교수평가?
그런 비슷한 사이트를 만드는데
로고 디자인이 필요하다고 하길래
시간도 좀 남고해서 작업하게되었다

첨에는 이름이 한학기가 아니라
예전처럼 '한강'이라는 이름을
그대로 사용할 것이라고 생각해서
디자인을 했었다

-

근데 이름이 한학기로 바뀌었다길래
ㅋ...

다시 디자인했는데
한국어 제목이다보니 딱 디자인이 떠오르지 않아서
걍 윤고딕으로 '한학기' 적으면 안되냐고 그랬는데
그건 좀 그렇다길래

좀 고민 좀 하다
다하 디자이너님처럼
해보자하는 마음으로 디자인했다

-

근데 역시나
한글 아트를 해본적이 없어서 그런가
좀 디자인이 구리다
많이 구리다
똥이다 똥

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

-

디발자가 말하는 시선을 끄는 PPT  |  2014.04.03 - PM06:01

-

오늘 ZeroPage라는 학회에서 매주 돌아가면서 발표하는
OMS(Open Micro Seminar) 발표 주자로 선정되서
며칠동안 발표를 준비했다.

준비하는 과정에서 내가 다른 학우님들과는 다르게
'디발자(디자이너+개발자)'라는 아이덴티티를 가지고 있어서
그 점을 어떻게 살려본다면
꽤 재밌는 OMS를 진행할 수 있을거라 생각했다.

-

그렇게 고민하다 나온 아이디어가
다들 한번쯤은 만들어 볼만한 PPT였다.

생각보다 PT를 잘만드는 사람은 없었고
거기에 발표를 잘하는 사람도 없었기 때문이었다.

그렇다고 내가 잘만든다는 것은 아니지만
그래도 어느정도는 도움줄 수 있을거라 생각해
디자인 뿐만 아니라 프리젠테이션 전반에 대한 구상을 하기 시작했다.

-

PT에도 나와있듯이 나는
어떤식으로 발표를 할지 목차를 정했다.
그렇게 나온 것이

발표 - 배치 - 색감 - 폰트 - 자료정리 - 데이터표현 - 자기소개

라는 7개의 목차였고, 이를 바탕으로 자료조사를 시작했다.

-

(조사한 자료를 중심으로 순서를 도식화시키는 과정)

이 과정을 통해 실제로 발표할 순서를 다시 재정립했고
필요없는 부분이나 핵심적인 부분을 잡아내었다.

-

그렇게 정리된 자료를 바탕으로
큰 세부 그림을 그려보았다.

개인적으로는 이 그림이 정말 중요하다고 생각한다.
어떤식으로 발표를 진행해 나갈까?
개그 포인트를 어느 부분에 주어야할까?
이런식으로 말을 해보면 어떨까?
등등..
발표에 있어 핵심을 준비하는 단계이기 때문이다.

-

그래서였을까 개인적으로는 이 과정이
제일 많은 시간이 걸렸고
가장 많은 부분을 수정, 추가, 제거하는 것을 반복했었다.

여기에 적힌 내용들은 조사한 자료를 바탕으로
핵심 논리를 간략하게 글로 적었고
이 자료는 다음 자료를 만들때 많은 도움을 주었다.

-

그 다음 자료란
바로 실제로 PT를 어떻게 만들지 그려보는 과정이다.

실제로 배치나 들어갈 텍스트 등을 종이에 그려보는 과정으로
위의 자료를 잘 작성했다면 가장 쉬운 부분이다.

-

-

이 과정은 PT를 미리 보고 어떤 느낌을 받을지 예상해보는 단계로
표현 방법에 대해서 많은 고민을 하는 부분이다.

어떠면 이것보다 더 좋은 방법이 나올 수도 있고
상황에 맞는 적재적소의 디자인이 존재하기도 하기 때문이다.

-

아무튼 결국 시간 부족으로
'데이터 표현', '발표 테크닉'장은 준비하지 못했고,
하얗게 불태우며 여백의 미로 마지막을 장식하며
아쉬운 끝을 내었다.

COMMA 학술지

-

COMMA  |  2014.03.06 - PM07:59

-

얼마 전 중앙대학교 컴퓨터공학과의
집부인 정보통신부에서 제작하는
콤마지라는 학술지를 작업했다.

사실 처음 작업을 시작할 때는
같은 집부니까 도와줘야지하는 느낌으로 시작했는데
작업이 진행되면서 농담반으로 말한 적이 있다.

"학생회에서 돈주면 외주 돌렸다고 하고 10만원 정도로 우리끼리 맛있는거 사먹자ㅇㅇ"

그런데 시간이 지나 위의 메인 페이지가 나오니
친구가 이건 돈 많이 줘야겠다라면서
학생회 쪽과 쇼부치고 온다길래

"나야 좋긴한데 괜찮아? 학생회 요즘 힘들잖아"
"ㄴㄴ 괜찮, 어짜피 저거 만들어두면 매년 활용할 수 있잖음"
"ㅇㅋ 열심히 해줄게"

-

-

그렇게 진짜 외주가 시작되었고
나는 나대로 디자이너의 마음으로 작업하기 시작했다.

사실 잡지는 처음으로 작업하는거라
이게 잘되고 있는건지 망하고 있는건지..
내가 예쁘다고 생각하는 대로만 작업한 것 같다.

거기에 InDesign이라는 프로그램도 처음 써보게 되어
느려터진 프로그램을 익히느라 참 힘들었었다.

-

그래도 같은 동기끼리였고,
안받을줄 알았던 외주비를 준다니까 정말 열심히 했던것 같다.

외부에 판매되는 잡지랑은 비교할 수는 없는 퀄리티지만
처음하는 작업치고 좋은 수준이 나와서 다행이라고 생각한다.

-

그런데 이 콤마지가 학생회 쪽에서도
전혀 어떤 의미인지 컨셉이 어떤 것인지 알려진채
대대로 이어온게 아니라
컨셉같은 중요한 내용이 쏙 빠진채 내려왔기에
스스로 고민해야 했기에 어려운 점도 많았다.

그래도 디자인 컨셉을 콤마라는 이름처럼
어려운 주제를 쉽게 접할 수 있는 쉼터라는 의미를 담아
시원한 느낌의 컬러와 편하게 느낄 수 있는
둥글둥글한 느낌을 살려 디자인했다.

-

아무튼,
이번 외주는 스스로에게도 좋은 경험을 쌓을 수 있었고
새로운 디자인 포인트를 얻은 기분이라 좋았다.