Прежде всего: почему управление зависимостями для проектов obj-c такая боль?!
Я пишу оболочку для моего RESTful-сервиса в target-c. Сервер представляет собой простое приложение sinatra, работающее локально в 'http://localhost:4567'.
Я включил RestKit, выполнив шаги, описанные здесь .
Я знаю, что RestKit правильно «установлен» в моем проекте, потому что, когда я делаю #import <RestKit/RestKit.h>
, проект собирается нормально.
Теперь я тестирую свою библиотеку, используя SenTesting.Framework. У меня есть класс в моей основной библиотеке, который выглядит следующим образом:
#import "CITWCore.h"
#import <RestKit/RestKit.h>
@implementation CITWCore
- (id)init
{
self = [super init];
if (self) {
RKObjectManager *manager = [RKObjectManager objectManagerWithBaseURL:@"http://localhost:4567"];
// Initialization code here.
}
return self;
}
@end
И мой класс модульных испытаний:
#import "CITWCoreTests.h"
@implementation CITWCoreTests
- (void)testItCreatesAnInstance
{
CITWCore *newCoreObject = [[CITWCore alloc]init];
STAssertNotNil(newCoreObject, @"new object should not be nil");
}
@end
Когда я запускаю тесты, используя ⌘U, тест завершается неудачно с этим сообщением:
error: testExample (CITWCoreTests) failed: -[__NSCFString isIPAddress]: unrecognized selector sent to instance 0xa115880
Ошибка вызывается по строке 292 в RKClient.m
if ([newBaseURLString isEqualToString:@"localhost"] || [hostName isIPAddress]) {
В проекте RestKit есть заголовочный файл с именем «NSString + RestKit.h», который содержит объявление метода -isIPAddress, и, насколько я могу судить, он включается, поэтому я понятия не имею, почему компилятор / запуск Время не знает об этом конкретном методе. Что-то не так с настройкой цели тестирования? Как я могу создать экземпляр RKObjectManager и пройти этот тест?
Более абстрактно: как люди управляют такими зависимостями, как это? Я смотрю на такие вещи, как VenderKit , но в документации, похоже, не хватает, и я не думаю, что у меня есть правильное понимание того, как работают компиляторы и компоновщики, чтобы перейти к такой большой абстракции. Каковы общие рекомендации при подключении статических библиотек к моему проекту, который сам по себе является статической библиотекой?