Ошибка структуры 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, и она выглядит нормальной, и мой код получает идентификатор команды.
2) Это ситуация в 10.8 Mountain Lion, RB App Checker Lite не удается проверить исполняемый файл:
3) Если я раскрываю ошибку, я узнаю, что она вызвана Sparkle:
У меня есть проект sparkle Xcode, добавленный в проект моего приложения, и он отлично работает под 10.10 и 10.9. На 10.8 тоже, если я запускаю приложение, Sparkle не жалуется на подпись, но функции CoreFoundation не могут определить Team ID, хотя и сообщают, что подпись присутствует.
Любая помощь будет оценена. Спасибо
PS Мне очень помогли в этой проблеме, и мне было рекомендовано удалить стороннюю подпись сертификата с одного из исполняемых файлов, который был Autoupdate.app, который показывался на предыдущих скриншотах как подписанный сторонним сертификатом. Теперь я подписываю также Autoupdate.app с тем же сертификатом ID разработчика, но ошибка все еще остается. Как вы можете видеть на следующем снимке экрана, если вы проверяете платформу Sparkle только с помощью RB App Checker Lite, она говорит, что проверяется правильно:
Хотя, если я добавляю в свою программу требуемую фазу копирования файлов с помощью sparkle framework, я получаю ту же ошибку, что и раньше:
Опять же, любая помощь будет высоко ценится.