Раньше сегодня я попытался добавить модульные тесты к моему проекту xcode для статической структуры, которую я создаю. После добавления целевого объекта Unit Tests к моему проекту я смог успешно запустить шаблон единичных тестов и проверить, чтобы тесты проверяли значение по умолчанию. Затем, импортировав файл, который я хотел протестировать в новом подклассе SenTestCase, я попытался запустить тест, но моя категория UIColor не смогла построить тест из-за ошибок компоновщика. Текст ошибок компоновщика выглядит следующим образом:Ошибки компоновщика UIColor Категория
Undefined symbols for architecture i386:
"_CGColorGetComponents", referenced from:
-[UIColor(ColorExtension) hexValue] in StaticFramework(StaticFramework)
"_CGColorGetNumberOfComponents", referenced from:
-[UIColor(ColorExtension) hexValue] in StaticFramework(StaticFramework)
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Далее я нашел, где эти две ссылки были в моем проекте. Оба живут в моей категории по следующей функции:
- (NSString *)hexValue
{
UIColor *color = self;
const size_t totalComponents = CGColorGetNumberOfComponents(color.CGColor);
const CGFloat * components = CGColorGetComponents(color.CGColor);
return [NSString stringWithFormat:@"#%02X%02X%02X",
(int)(255 * components[MIN(0,totalComponents-2)]),
(int)(255 * components[MIN(1,totalComponents-2)]),
(int)(255 * components[MIN(2,totalComponents-2)])];
}
Если я правильно помню, оба они являются частью класса NSColor. С немного дополнительной проверкой я также заметил, что в папке с базовым модулем Unit Test оба файла UIKit.framework & Foundation.framework являются красными. Я попытался переименовать их и построить, но это также не устраняет проблему.
Интересно, что мой статический фреймворк будет по-прежнему строить и работать нормально до тех пор, пока не будет запущен связанный тест. И когда я прокомментирую эту функцию (и каждый раз, когда я ее использую), Unit Test строит без проблем. Буду ли я быть верным в своем предположении, что недостающее UIKit.framework & Foundation.framework может привести к тому, что компоновщик не найдет свойства NSColor? Есть ли у кого-нибудь дополнительные предложения, которые могли бы объяснить, почему эти свойства вызывают эти проблемы или что я могу сделать, чтобы исправить их?
Любая помощь была бы принята с благодарностью. Спасибо за помощь.
Вы связываете «CoreGraphics.framework» с вашим проектом? – rmaddy
Нет, я не использую CoreGraphics.framework в моей статической структуре или модульном тесте. – Krejko
Да, вы это сделали. Две функции «CGColor ...» взяты из CoreGraphics. Вам нужно связать «CoreGraphics.framework» с вашим проектом. Это исправит ошибку компоновщика. – rmaddy