Да, вы можете. Когда вы создаете новую цель, она создает новый каталог в папке вашего проекта, что позволяет легко иметь одинаковые имена файлов для нескольких файлов.
Когда вы добавляете новый или старый файл интерфейса, фактически любой файл, XCode спрашивает вас, какую цель вы хотите добавить. Просто отметьте цель, куда вы хотите добавить.
Вы можете вручную управлять файлами в Target / Build Phases / Bundle Resources
Я сделал несколько бесплатных версий, вот что я обычно делаю:
Создание новой цели для бесплатной версии
Удалить все добавленные файлы, кроме файла appname-info.plist.
Добавление всех общих исходных файлов в целевые объекты / Фазы сборки / Ресурсы компиляции (можно перетаскивать из навигатора)
Добавление всех общих других файлов (значков и т. Д.) К цели Целевые / этапы сборки / ресурсы комплекта (можно перетаскивать из навигатора)
Добавить все необходимые рамки (можно перетаскивать из навигатора)
Щелкните левой кнопкой мыши / Показать в Finder файлы интерфейса, которые я хочу изменить. Скопируйте файлы во вновь созданный каталог в проекте
Перетащите скопированные файлы интерфейса из Finder в Xcode и поместите их во вновь созданную целевую группу. Снимите флажок «Копировать элементы в целевую группу», поскольку он уже существует. Убедитесь, что выбранная цель отмечена в «Добавить к целям»
Он также работает для всех остальных значков, изображений, видео и т. Д. Если вы избегаете жесткого кодирования имен, он работает как шарм.
У меня есть проекты с 6 целями (3 полной версии, 3 бесплатных), которые используют один и тот же код, но разные файлы xib, icon и мультимедиа.
Я обычно снимаю ограничения в зависимости от того, является ли приложение свободным / облегченным или нет, с помощью следующего кода (Mac, для iOS просто удалите строки настройки значка):
NSString *appName = [NSString stringWithString:[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleName"]];
if ([appName rangeOfString:@"Lite"].location != NSNotFound || [appName rangeOfString:@"lite"].location != NSNotFound) {
//put lite badge on
NSString *badgeText = @"lite";
[[NSApp dockTile] setBadgeLabel:badgeText];
fullVersion = NO;
} else if ([appName rangeOfString:@"Free"].location != NSNotFound || [appName rangeOfString:@"free"].location != NSNotFound) {
//put free badge on
NSString *badgeText = @"free";
[[NSApp dockTile] setBadgeLabel:badgeText];
fullVersion = NO;
} else {
fullVersion = YES;
}