Сборка Сервера Основы команды с защищенными паролем сбоями codesigning

Я создал приложение такого типа, используя приблизительно тот же подход, за исключением:

  • Я кэширую сгенерированное изображение на диск и всегда заранее генерирую два-три изображения в отдельном потоке.
  • Я не накладываю на UIImage, а рисую изображение в слое, когда масштабирование равно 1. Эти плитки будут автоматически высвобождаться при выдаче предупреждений памяти.

Всякий раз, когда пользователь начинает масштабирование, я получаю CGPDFPage и отображаю его, используя соответствующий CTM. Код в - (void)drawLayer: (CALayer*)layer inContext: (CGContextRef) context похож на:

CGAffineTransform currentCTM = CGContextGetCTM(context);    
if (currentCTM.a == 1.0 && baseImage) {
    //Calculate ideal scale
    CGFloat scaleForWidth = baseImage.size.width/self.bounds.size.width;
    CGFloat scaleForHeight = baseImage.size.height/self.bounds.size.height; 
    CGFloat imageScaleFactor = MAX(scaleForWidth, scaleForHeight);

    CGSize imageSize = CGSizeMake(baseImage.size.width/imageScaleFactor, baseImage.size.height/imageScaleFactor);
    CGRect imageRect = CGRectMake((self.bounds.size.width-imageSize.width)/2, (self.bounds.size.height-imageSize.height)/2, imageSize.width, imageSize.height);
    CGContextDrawImage(context, imageRect, [baseImage CGImage]);
} else {
    @synchronized(issue) { 
        CGPDFPageRef pdfPage = CGPDFDocumentGetPage(issue.pdfDoc, pageIndex+1);
        pdfToPageTransform = CGPDFPageGetDrawingTransform(pdfPage, kCGPDFMediaBox, layer.bounds, 0, true);
        CGContextConcatCTM(context, pdfToPageTransform);    
        CGContextDrawPDFPage(context, pdfPage);
    }
}

проблема - объект, связывающийся с CGPDFDocumentRef. Я синхронизирую часть, где я получаю доступ к свойству pdfDoc, потому что я освобождаю его и воссоздаю его при получении memoryWarnings. Кажется, что объект CGPDFDocumentRef выполняет некоторое внутреннее кэширование, от которого я не нашел, как избавиться.

19
задан Steven Sudit 15 July 2009 в 20:26
поделиться

1 ответ

В этом сообщении блога ниже подробно описаны точные шаги

Настройка файлов ключей

Создайте защищенную паролем пару закрытый / открытый ключ (KeyPair.pfx) с помощью Вкладка Visual Studio «Подписание» в свойствах проекта. Извлеките открытый ключ из пары ключей и скопируйте его в отдельный файл (Key.snk). sn.exe -p KeyPair.pfx Key.snk

Скопируйте KeyPair.pfx на свой сервер сборки. Я использую C: \ Program Files \ MSBuild \ KeyFile.pfx, потому что тогда к нему можно получить доступ с помощью свойства MSBuild $ (MSBuildExtensionsPath). Переместите файл KeyPair.pfx в безопасное место. Также держите пароль в секрете. Скопируйте Key.snk в общую папку, где ваши разработчики могут получить к нему доступ. Настройка проектов для подписи

Для каждой сборки, которую вы хотите подписать:

  1. Откройте Project Properties | Страница подписи
  2. Установите флажок [X] Подписать сборку.
  3. Установите флажок [X] Отложить только подпись.
  4. Выберите из раскрывающегося списка файла ключа.
  5. Перейдите к общему расположению и выберите ключ .snk файл
  6. Файл snk будет скопирован в каждый каталог проекта, которому вы назначили его
  7. . Скопируйте ключевой файл из одного из ваших проектов в элементы решения, чтобы вы могли использовать его для конфигурации тестового запуска

Настройка конфигурации тестового прогона для повторной подписи

Если вы хотите инструментировать свои сборки и включить покрытие кода для своих модульных тестов, вам необходимо указать файл ключа для повторной подписи.

Откройте файл LocalTestRun.testrunconfig На вкладке «Охват кода» выберите ключ в качестве файла ключа для повторной подписи

Отключить проверку строгого имени на рабочих станциях разработчика

Поскольку вы откладываете подписание только с открытым ключом, проверка сборки .NET CLR завершится ошибкой. сборки построены локально. Если проверка завершится неудачно, вы не сможете запускать или отлаживать сборки.

Чтобы преодолеть это в процессе разработки, вам необходимо отключить проверку строгого имени для сборок, которые вы создаете локально, и отложить подпись с помощью открытого ключа.

Откройте командную строку Visual Studio. Тип: sn.exe -tp Key.snk

Это выведет некоторые данные, включая токен.

Тип: sn -Vr *, YOUR_KEY_TOKEN

пример: sn -Vr *, 0123456789abcdef

Это отключит проверку строгого имени для всех сборок, подписанных вашим открытым ключом. Вы можете просмотреть текущие настройки для проверки строгого имени с помощью: sn -Vl

Установка закрытого ключа для Team Build

Поскольку закрытый ключ (Key.pfx) защищен паролем, Team Build не может получить к нему доступ. Благодаря блогу Нагараджу Паллы: Использование ключей подписи, защищенных паролем в Team Build , у нас есть решение.

Войдите на сервер Team Build в качестве учетной записи службы сборки Откройте проект в Visual Studio Соберите проект в Visual Studio Вам будет предложено ввести пароль к файлу закрытого ключа. Введите пароль Закройте Visual Studio и выйдите из системы Файл закрытого ключа теперь установлен в локальном хранилище сертификатов учетной записи службы сборки, и Team Build может получить к нему доступ без повторного запроса пароля. Это хранилище сертификатов так же безопасно, как и пароль учетной записи службы сборки. (Подсказка: сделайте его таким же надежным, как пароль вашего ключевого файла)

Обновление скрипта сборки TFSBuild.proj

Team Build имеет доступ к закрытому ключевому файлу и паролю. Это позволяет полностью подписывать сборки.

Чтобы переопределить параметры проекта и указать Team Build использовать закрытый ключевой файл и отключить частичную подпись, нам нужно установить свойство CustomPropertiesForBuild в TFSBuild.proj

Check-out ваш сценарий сборки TFSBuild.proj Найдите свойство заполнителя (по умолчанию около строки 130) Замените его следующим: SignAssembly = true; DelaySign = false; AssemblyOriginatorKeyFile = $ (MSBuildExtensionsPath) \ Key.pfx Зарегистрируйте свои изменения Поставить сборку в очередь Проверка вывода Team Build

Чтобы убедиться, что Team Build правильно присвоила вашим сборкам строгое имя, вы можете использовать служебную программу sn.exe для проверки подписи строгого имени.

Откройте командную строку Visual Studio Тип: sn.exe -vf assemblyname.dll

Вы также можете проверить все свои сборки одновременно:

Откройте командную строку Visual Studio Тип: ДЛЯ% a IN (* .dll) DO sn.exe -vf% a

34
ответ дан 30 November 2019 в 03:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: