Несколько приложений Xcode/IOS с одной и той же кодовой базой/проектом

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

если у меня есть 2 приложения, использующие один и тот же код:

  • приложение 1: список фруктов (отображение списка фруктов)
  • приложение 2: список овощей (отображение списка овощей)

Для обоих приложений у меня будет уникальный идентификатор пакета (конечно), один и тот же код, но разные изображения и база данных. Как я могу настроить Xcode, чтобы иметь 1 проект и иметь возможность выбирать, какое приложение я хочу создать?

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

Любое предложение/помощь по этому вопросу будет приветствоваться! Я звучу как безумное решение иметь несколько проектов в этом случае и дублировать изменения из одного в другие.

Спасибо.


person Slamit    schedule 22.03.2021    source источник
comment
Это хороший вариант использования для создания основного кода в качестве фреймворка, который может использоваться любым количеством проектов или целей.   -  person BonanzaDriver    schedule 23.03.2021
comment
Обычно мы создаем фреймворки libRuntime, libFoundation, libNetworking, libUI, libAssets, libApp и т. д. Фреймворки связаны друг с другом через протоколы или абстрактные классы. Так, что каждый фреймворк достаточно настраиваемый. Конкретное приложение состоит из специфичных для приложения фреймворков (например, libAppOne, libAppTwo и т. д.), уникальных ресурсов (например, libAppOneAssets, libAppTwoAssets) и файла main.swift/App.swift/AppDelegate.swift, который связывает необходимые фреймворки. Чтобы сгенерировать проект Xcode для конкретного приложения, мы используем инструмент XcodeGen github.com/yonaskolb/XcodeGen.   -  person Vlad    schedule 23.03.2021


Ответы (2)


Вариант 1:

Самый простой способ — иметь один проект и добавить в него несколько целевых приложений. Вам нужно убедиться, что к каждой цели добавлены правильные исходные файлы (много информации о SO о том, как это сделать, включая: Xcode легко добавляет несколько файлов в цель).

Каждая цель может иметь индивидуальный идентификатор пакета, как вы упомянули, но вы можете выбрать, какие исходные файлы/изображения/и т. д. добавить к каждому из них. Вы также можете настроить отдельные флаги сборки, переменные среды и т. д. в настройках сборки для каждой цели.

Вы должны использовать целевое меню на панели инструментов Xcode (над вкладками исходного файла), чтобы выбрать, какую цель вы хотите построить и запустить.

Вариант 2:

Другой вариант (или действительно вариант варианта 1) состоит в том, чтобы иметь 2 цели приложения в одном проекте (такие же, как вариант 1), а также сделать третью цель, которая будет фреймворком. Эта структура может инкапсулировать часть общего кода между приложениями. Например, в моем приложении есть звуковой движок, который используется в версиях приложения для iOS и macOS. Исходные файлы этой платформы принадлежат только одной цели (платформе), а затем платформа добавляется как зависимость обеих целей приложения.

person jnpdx    schedule 22.03.2021
comment
Спасибо за этот ответ Jnpdx, это похоже на то, что мне действительно нужно. Ссылка, которую вы мне дали, помогает, но ребята говорят, что у них уже есть целевая установка. Одна из проблем, с которыми я сталкиваюсь, заключается в том, что я не могу найти, как создать/заменить цели, созданные по умолчанию: проект, проектТест и проектУИТест. - person Slamit; 23.03.2021
comment
Вам не обязательно заменять их. «Проект» может быть одним из приложений, о которых я упоминал выше. Затем добавьте еще одну цель и поделитесь источником между ними. - person jnpdx; 23.03.2021
comment
Я должен пропустить что-то очень простое, я застреваю, пытаясь найти, как/где добавить цель в Xcode. - person Slamit; 23.03.2021
comment
Его сейчас нет передо мной, но я думаю, что это просто меню «Файл» -> «новый» -> «цель». - person jnpdx; 23.03.2021
comment
Это действительно было намного проще там, где я искал, спасибо за это! - person Slamit; 23.03.2021

Вы описываете проект с двумя целевыми приложениями. При сборке/запуске просто переключите всплывающее окно схемы в верхней части окна на ту, которую хотите.

введите здесь описание изображения

Чтобы совместно использовать код между приложениями, просто добавьте файл в обе цели приложения.

введите здесь описание изображения

person matt    schedule 22.03.2021
comment
Спасибо за этот ответ, Мэтт. Вы говорите о схеме и цели, я не уверен, в чем разница. У меня есть 3 цели по умолчанию, но я не понимаю, как их изменить/заменить! - person Slamit; 23.03.2021