Преобразование отдельных проектов iPhone и iPad в универсальный

У меня есть два законченных проекта. Один работает на iPhone, а другой работает на iPad. Я хочу объединить их в универсальное приложение.

Пока что единственное решение, которое у меня есть, - это переименовать классы приложения с суффиксами «_iPhone» и «_iPad» и изменить все ссылки на те, что в коде. Затем я мог бы объединить AppDelegate и загрузить правильные контроллеры при запуске.

Это два очень больших проекта, поэтому этот метод займет очень много времени. У кого-нибудь есть лучшее решение?


person Community    schedule 15.03.2012    source источник
comment
Некоторые пользователи задают аналогичный вопрос один раз stackoverflow.com/questions/5280407/ .   -  person LuisEspinoza    schedule 15.03.2012


Ответы (2)


ну, насколько я знаю, единственное решение для этого - создать новый универсальный проект и поместить туда свои файлы ... поскольку между iPhone и iPad много общего кода, вы можете проверить, какое устройство используется для запуска вашего приложения проверив, является ли UI_USER_INTERFACE_IDIOM() UIUserInterfaceIdiomPad или UIUserInterfaceIdiomPhone .. и для переименования простой способ сделать это, чтобы выделить имя класса и выбрать Refactor>Rename, и xCode позаботится о переименовании имени класса в каждом месте, где вы использовали Это.

person Malek_Jundi    schedule 15.03.2012
comment
Спасибо за совет по рефакторингу, это сэкономит много времени! - person ; 15.03.2012

Ваше черновое решение кажется единственным известным мне вариантом - любопытно увидеть другие ответы.

Одна вещь, хотя; на самом деле вы можете сохранить два отдельных AppDelegate.

В вашей основной реализации вы можете проверить устройство и запустить либо iPad-AppDelegate, либо iPhone-AppDelegate.

int main(int argc, char *argv[])
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    int retVal = 0;

    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
    {
        retVal = UIApplicationMain(argc, argv, nil, @"XXXAppDelegate_iPad");
    }
    else 
    {
        retVal = UIApplicationMain(argc, argv, nil, @"XXXAppDelegate_iPhone");        
    }
    [pool release];
    return retVal;
}

Однако в большинстве случаев я бы посоветовал переосмыслить такое решение - достаточно часто это приводит к несоответствиям и/или дублированию кода. Тем не менее, я подумал, что должен указать вариант.

person Till    schedule 15.03.2012
comment
Я знал об этом варианте, но мне не нравится возиться с Main.m. В последних шаблонах iOS от Apple они делают все в одном AppDelegate, поэтому решили, что это будет лучше. Спасибо за ответ. - person ; 15.03.2012