Разработка iphone с джейлбрейком с открытым API - PullRequest
1 голос
/ 15 декабря 2011

У меня есть приложение, которое использует ABAdressBook API & NSFileManager.

Когда я запускаю приложение из командной строки - API, похоже, не получает AddressBook/NSFileManagerинформация - но когда я запускаю его с трамплина - он показывает мне необходимую информацию.

Это потому, что мое приложение не имеет пользовательского интерфейса при запуске из командной строки?

int main(int argc, char *argv[]) 
{
    @autoreleasepool 
    {
        printf("HELLO TEST\n");       
        NSLog(@"---------");
        NSMutableArray* dbList = [[NSMutableArray alloc] init];

        NSFileManager *fileManager = [NSFileManager defaultManager];
        NSLog(@"file manager address is %@",fileManager);
        NSDirectoryEnumerator *dirnum = [fileManager enumeratorAtPath: @"/private/"];
        NSLog(@"dirNum is %@",dirnum);
        NSString *nextItem = [NSString string];

        while( (nextItem = [dirnum nextObject])) {
            if ([[nextItem pathExtension] isEqualToString: @"db"] ||
                [[nextItem pathExtension] isEqualToString: @"sqlitedb"]) {
                if ([fileManager isReadableFileAtPath:nextItem]) {
                    [dbList addObject:nextItem];

                    NSLog(@"%@", nextItem);
                }
            }
        }
    }
}

Редактировать: Я зафиксировал проблему следующим селектором: [fileManager isReadableFileAtPath: nextItem], когда я запускаю эту функцию из SpringBoard - она ​​возвращает true - для нескольких файлов ...

когда я запускаю его в командной строке - он возвращает false всем файлам - хотя я запускаю приложение с привилегиями root.

есть идеи, что может вызвать это изменение в поведении?

Спасибо, Итай

1 Ответ

1 голос
/ 24 декабря 2011

И ABAddressBook, и NSFileManager имеют метод класса, который возвращает уникальный общий объект - в приведенном выше коде вызов [NSFileManager defaultManager] возвращает "объект NSFileManager по умолчанию для файловой системы", согласно документы. Когда вы запускаете свое приложение из командной строки, вы, вероятно, не выполняете часть или весь код, который инициализирует общий объект; Вы можете даже получить nil из метода класса.

Если это так, вы можете обойти эту проблему, создав собственный объект (то есть, используя [[NSFileManager alloc] init] или [ABAddressBook addressBook]), а не полагаясь на метод класса для возврата общего объекта.

...