Настройка статических библиотек

Я создал проект XCode, который содержит 2 цели и статическую библиотеку, которую я реализую в обеих целях. Некоторые классы моей статической библиотеки должны немного отличаться в зависимости от цели, которую я компилирую.

Я понятия не имею, как это сделать правильно. Любая идея?

Спасибо


person Niko    schedule 12.09.2012    source источник
comment
Вы не можете сделать это во время компиляции со статической библиотекой, потому что это просто статическая библиотека. Ему все равно, на какую платформу вы ориентируетесь в продукте, в котором он используется. Период. Если вы сообщите нам, что именно вам нужно сделать, мы, вероятно, сможем найти решение для среды выполнения.   -  person Richard J. Ross III    schedule 12.09.2012
comment
Отделите статическую библиотеку в другой проект Xcode, создайте две цели внутри этого нового проекта Xcode и измените поведение на основе этих двух целей. И в вашем исходном проекте установите разные целевые зависимости и ссылки. Посмотрите на SDWebImage (github.com/rs/SDWebImage) в качестве примера — есть две цели SDWebImage и SDWebImage ARC, и эти цели создают две разные статические библиотеки (libSDWebImage.a и libSDWebImageARC.a) для компоновки.   -  person zrzka    schedule 12.09.2012
comment
Мне нравится идея создания нескольких целей в моей статической библиотеке :-). Спасибо @RobertVojta   -  person Niko    schedule 12.09.2012
comment
Вы можете выделить части библиотеки, которые должны различаться между целевыми объектами, в другую библиотеку и создать две версии новой библиотеки.   -  person Dan    schedule 12.09.2012


Ответы (1)


Каким образом они должны отличаться? (Я основываю свой ответ на предположении, что его можно обработать, установив какую-то переменную состояния в классах или с помощью специального метода инициализации)

Я бы посоветовал вам создать какую-то форму пользовательских методов инициализации или переменных экземпляра, которые вы устанавливаете для классов, которые должны иметь различное поведение. Затем вы можете использовать пользовательские настройки в настройках сборки для каждой цели.

Проверьте этот вопрос и ответ для получения дополнительной информации: iphone: get Пользовательская переменная в настройке цели по коду?

По сути, у вас может быть параметр, который будет такой строкой: «Стандартный», вы извлекаете его из

FooBarClass.h

typedef enum {   FooBarSettingNormal,   FooBarSettingFast } FooBarSetting;

-(id)initWithSetting:(FooBarSetting)setting;

Затем извлеките переменную, установленную в настройках сборки, из кода и инициализируйте объект FooBar следующим образом:

SomeViewController.m

NSNumber* fooBarSetting = [[[NSBundle mainBundle] infoDictionary] valueForKey:@"FooBarSetting"];
FooBar * baz = [[FooBar alloc] initWithSetting:[fooBarSetting intValue]];

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

Я надеюсь, что вы найдете это несколько полезным :)

person oehman    schedule 25.09.2012