Ошибка структуры Cocoa Sparkle в подписи кода на Mountain Lion

Я разрабатываю приложение для Mac Os X. У меня есть код, подписанный сторонним разработчиком Apple, для независимого распространения. В коде я проверяю действительность подписи с помощью функций CoreFoundation следующим образом:

SecCodeRef myCode;


status = SecCodeCopySelf(kSecCSDefaultFlags,&myCode);

status = SecCodeCheckValidity(myCode,kSecCSDefaultFlags,NULL);

NSString *result;

switch (status)
{
    case noErr:
        result = @"Code signature is present";
        break;
    case errSecCSUnsigned:
        result = @"Executable is unsigned";
        break;
    case errSecCSSignatureFailed:
        result=@"Signature failed.";
        break;
    default:
        result=@"Error validating signature";
        break;
}

NSAlert *myAlert =[[NSAlert alloc] init];

[myAlert setAlertStyle:NSCriticalAlertStyle];
[myAlert setMessageText:@"Program Beta Error"];
[myAlert setInformativeText:result];

[myAlert runModal];




SecStaticCodeRef fileCode;

status = SecCodeCopyStaticCode(myCode, kSecCSDefaultFlags, &fileCode);

if (status != noErr)
{
    // NSLog(@"Unable to get static code object.");

}

CFDictionaryRef signingInfo = NULL;

status = SecCodeCopySigningInformation(fileCode, kSecCSSigningInformation, &signingInfo);

NSDictionary *myDictionary = [NSDictionary dictionaryWithDictionary:(__bridge NSDictionary *)(signingInfo)];

указанный параметр kSecCSSigningInformation позволяет мне собирать информацию об идентификаторе подписывающего разработчика и идентификаторе команды. Это прекрасно работает в 10.10 Yosemite и 10.9 Mavericks, но не работает на 10.8 Mountain Lion. Я проверил ситуацию с RB App Checker Lite и действительно, под Mountain Lion, для того же исполняемого файла, я получаю разные результаты, показанные на следующих скриншотах:

1) Это ситуация в 10.10 и 10.9, и она выглядит нормальной, и мой код получает идентификатор команды.

10.10 скриншот

2) Это ситуация в 10.8 Mountain Lion, RB App Checker Lite не удается проверить исполняемый файл:

10.8 Скриншот

3) Если я раскрываю ошибку, я узнаю, что она вызвана Sparkle:

10.8 Скриншот расширен

У меня есть проект sparkle Xcode, добавленный в проект моего приложения, и он отлично работает под 10.10 и 10.9. На 10.8 тоже, если я запускаю приложение, Sparkle не жалуется на подпись, но функции CoreFoundation не могут определить Team ID, хотя и сообщают, что подпись присутствует.

Любая помощь будет оценена. Спасибо

PS Мне очень помогли в этой проблеме, и мне было рекомендовано удалить стороннюю подпись сертификата с одного из исполняемых файлов, который был Autoupdate.app, который показывался на предыдущих скриншотах как подписанный сторонним сертификатом. Теперь я подписываю также Autoupdate.app с тем же сертификатом ID разработчика, но ошибка все еще остается. Как вы можете видеть на следующем снимке экрана, если вы проверяете платформу Sparkle только с помощью RB App Checker Lite, она говорит, что проверяется правильно:

10.8 Проверка правильности блеска RB Checker Lite

Хотя, если я добавляю в свою программу требуемую фазу копирования файлов с помощью sparkle framework, я получаю ту же ошибку, что и раньше:

RB App Checker Lite Все приложение проверяет, все ли подписано сертификатом ID разработчика

Опять же, любая помощь будет высоко ценится.

0 ответов

Другие вопросы по тегам