Доступ к файлам свойств Mac через C - PullRequest
3 голосов
/ 03 января 2012

Я обращаюсь к файлу plist, используя код ниже на Какао с приложением Objective-C:

NSString *plistPath = [@"~/Library/Preferences/com.apple.mail.plist" stringByExpandingTildeInPath];
NSDictionary *plistData = [NSDictionary dictionaryWithContentsOfFile:plistPath];
NSArray *item = [plistData valueForKeyPath:@"MailAccounts.AccountName"];
NSLog(@"Account: %@", [item objectAtIndex:2]);

Который по существу возвращает адрес электронной почты пользователя (мы также читаем некоторую другую информацию в других файлах plist), чтобы мы могли добавить его в диалог About.

Теперь мне нужно прочитать эту информацию из тех же файлов plist, используя C, а не Objective-C. Файлы не являются текстовыми, они представляют собой двоичные файлы plist. Есть ли способ прочитать эти файлы свойств из C?

Могу ли я позвонить NSDictionary и т. Д. Из C? Как?

Спасибо за помощь.

1 Ответ

4 голосов
/ 03 января 2012

Конечно, вы понимаете, что Objective C является расширением C, но в целом, когда я использую обычный C, я использую функции и объекты Core Foundation вместо методов Objective C.

К вашему конкретному вопросу: CFDictionary бесплатный для моста NSDictionary и CFBundle для NSBundle. Вы можете легко вызвать CoreFoundation из простого старого C.

Вы можете получить то, что вы хотите с чем-то вроде:

CFBundleRef mainBundle = CFBundleGetMainBundle();
CFDictionaryRef dictionaryRef = CFBundleGetInfoDictionary(mainBundle);
if(dictionaryRef)
{
    CFArrayRef accountsItemsArrayRef = CFDictionaryGetValue(dictionaryRef, CFSTR("MailAccounts.AccountName");
    if(accountsItemsArrayRef)
    {
         CFStringRef accountNameRef = (CFStringRef) CFArrayGetValueAtIndex(accountsItemsArrayRef, 2);
         if(accountNameRef)
         {
               fprintf(stderr, "Account: %s", accountName.cStr());
         }       
    }
}

Я просто ввел этот перевод Базового Фонда прямо в это поле для ответов и не проверял ошибки или здравомыслие, что вам абсолютно необходимо сделать.

Вот немного более старое руководство , которое объясняет немного больше.

Надеюсь, это поможет вам выбрать правильный путь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...