Есть ли способ узнать, запускаю ли я приложение из XCode? - PullRequest
1 голос
/ 03 апреля 2012

Например, я хотел бы подключиться к своей локальной базе данных, если я запускаю из XCode (симулятор или подключенный iPhone).

И если он не работает из XCode, я бы подключился к своей базе веб-данных.

Я видел что-то вроде:

#if TARGET_IPHONE_SIMULATOR

, но я не уверен, будет ли это работать для имитации на устройстве.

Ответы [ 2 ]

2 голосов
/ 03 апреля 2012

Вы можете определить, выполняется ли ваше приложение под отладчиком, с помощью следующего кода из Технические вопросы и ответы QA1361 .

#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 );
}

Успешно протестировано на симуляторе и устройстве (iPhone 4, iOS 5.0.1).

Важно Поскольку определение структуры kinfo_proc (в ) обусловлен __APPLE_API_UNSTABLE, вы должны ограничьте использование приведенного выше кода отладочной сборкой вашей программы.

1 голос
/ 03 апреля 2012

Вы можете сделать так, чтобы компилятор выбирал другой код в ваших сборках, в зависимости от разных макросов препроцессора в настройках Debug против Release Build. Отладка может использовать локальный, а выпуск использовать веб.

...