使用公共API进行iphone越狱开发

时间:2011-12-15 16:32:33

标签: ios jailbreak nsfilemanager abaddressbook

我有一个使用ABAdressBook API& NSFileManager

当我从命令行运行应用程序时 - 似乎没有检索到API AddressBook/NSFileManager信息 - 但是当我从跳板运行它时 - 它确实向我显示了所需的信息。

是不是因为我的应用程序在从命令行运行时没有UI?

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 个答案:

答案 0 :(得分:1)

ABAddressBookNSFileManager都有一个返回唯一共享对象的类方法 - 在上面的代码中,对[NSFileManager defaultManager]的调用会检索“默认的NSFileManager对象对于文件系统“,根据文档。当您从命令行运行应用程序时,您可能没有执行初始化共享对象的部分或全部代码;你甚至可以从课堂方法中找回nil

如果是这样,您可以通过创建自己的对象(即使用[[NSFileManager alloc] init][ABAddressBook addressBook])而不是依靠类方法返回共享对象来解决此问题