아이폰 개발 팁 : XCode에서 디버거 붙어 있는지 알아내기

Apple Technical  Q&A QA1361 : Detecting the Debugger 참고

#include <assert.h>

#include <stdbool.h>

#include <sys/types.h>

#include <unistd.h>

#include <sys/sysctl.h>


static bool AmIBeingDebugged(void)

// Returns true if the current process is being debugged (either

// running under the debugger or has a debugger attached post facto).

{

    int                 junk;

    int                 mib[4];

    struct kinfo_proc   info;

    size_t              size;

    // Initialize the flags so that, if sysctl fails for some bizarre

    // reason, we get a predictable result.

    info.kp_proc.p_flag = 0;

    // Initialize mib, which tells sysctl the info we want, in this case

    // we're looking for information about a specific process ID.

    mib[0] = CTL_KERN;

    mib[1] = KERN_PROC;

    mib[2] = KERN_PROC_PID;

    mib[3] = getpid();

    // Call sysctl.

    size = sizeof(info);

    junk = sysctl(mib, sizeof(mib) / sizeof(*mib), &info, &size, NULL, 0);

    assert(junk == 0);

    // We're being debugged if the P_TRACED flag is set.

    return ( (info.kp_proc.p_flag & P_TRACED) != 0 );

}


by 쉬귀 | 2010/09/26 07:51 | 개발 | 트랙백 | 덧글(0)

아이폰 개발 팁 - cocos2d 에서 흔들기(MotionShake) 감지하기


흔들지마냥~ (뱃살이.. -_-;)


참고 링크를 참고해서...

여러가지 방법이 있지만, 아래 방법이 젤 쓸만해 보입니다.

//
// 흔들기 모션만 처리할 UIWindow를 하나 만듭니다. 이름은 대충 UIWindowShake. 
//

@interface UIWindowShake : UIWindow

{

}

@end


//
// 여기다 넣어주면 씬에 관계없이 다 감지가 되겠죠
//

@interface MyAppDelegate : NSObject <UIApplicationDelegate> {

UIWindowShake * window;

...

}


@property (nonatomic, retainUIWindowShake* window;

...


//
// 흔들기 모션만 처리
//

@implementation UIWindowShake


- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event 

{

    if (motion == UIEventSubtypeMotionShake) {

NSLog(@"Shake!");

// 흔들기 처리~

    }

}

@end


@implementation MyAppDelegate


- (void) applicationDidFinishLaunching:(UIApplication*)application

{

...


//------------------------------------------------

// Init the window

CGRect bound = [[UIScreen mainScreen] bounds];

window = [[UIWindowShake alloc] initWithFrame:bound];

...

}


...


@end



간단간단~


by 쉬귀 | 2010/09/26 00:45 | 개발 | 트랙백 | 덧글(0)

아이폰 개발 팁 : iOS4 멀티태스킹 - 백그라운드로 바뀔 때 바로 종료하기


iOS 4에서는 멀티태스킹 관련 처리를 해줘야 하는데, 
3.x 버전에 비해서 추가되는 부분은 cocos2d 샘플을 참고하면 아래 코드 정도인데..


-(void) applicationDidEnterBackground:(UIApplication*)application

{

[[CCDirector sharedDirector] stopAnimation];

}


-(void) applicationWillEnterForeground:(UIApplication*)application

{

[[CCDirector sharedDirector] startAnimation];

}


이렇게 하면 계속 백그라운드에 메모리를 잡아 먹고 앱이 떠있기 때문에
떠 있을 필요가 없는 앱이라면 깔끔하게 종료처리를 해주는게 오히려 나을 수가 있겠습니다.

종료 처리는 참고 링크를 보니..

  1. info.plist 를 열고
  2. UIApplicationExitsOnSuspend를 추가.. (하거나 Application does not run in background를 선택하라는데 요건 안 보이네요.)
  3. 그리고, Value Type을 Boolean으로 바꾸고 체크 표시를 해두면 됩니다.

이제 홈 버튼을 누르면, 앱이 백그라운드로 가는 대신에 종료가 됩니다.
다시 실행 시켜 보면 바로 확인할 수 있지요 :>

 

by 쉬귀 | 2010/09/24 16:02 | 개발 | 트랙백 | 덧글(1)

◀ 이전 페이지 다음 페이지 ▶