Управление зависимостями в iOS - PullRequest
0 голосов
/ 23 мая 2018

Итак, у меня есть следующий сценарий:

Я занимаюсь разработкой приложения для iOS, которое используется для разных компаний.Для каждой компании есть несколько отличий:

  • Значок приложения
  • Цвет темы
  • Изображения (например, логотип компании)
  • Строки (например, название компании)


Наилучшим подходом является создание единого кода, а затем переопределение некоторых значений и активов для каждого приложения.В Android я легко могу добиться этого, создав модуль библиотеки (с ядром приложения) и модуль приложения для каждой компании (без кода Java), просто переопределив ресурсы.

Я пытаюсьразработать такую ​​же структуру в XCode, но способ сделать это неясен для меня.После краткого исследования я рассмотрел несколько вариантов: Framework, Static Library и Subprojects.

Какой из этих способов был бы правильным?Должен ли я рассмотреть возможность использования Dependency / Package Manager (например, Swift Package Manager, CocoaPods или Carthage)?

Эти менеджеры пакетов зависят от git?Потому что я работаю с SVN, и переход на Git на данный момент невозможен.

Настройки проекта:
XCode 9
Swift 4

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

Вы можете использовать Static Framework для разработки проектов такого рода.Теперь у Static Framework есть свои взлеты и падения.

https://www.raywenderlich.com/65964/create-a-framework-for-ios

  • Создание базового модульного каркаса для всех общих классов, которые будут совместно использоваться для различных приложений, таких как Company1Extenssion, Company2Extenssion.
  • Теперь включите эту базовую платформу модуля в отдельные проекты, создав соответствующие рабочие пространства.
  • Отдельные расширенные проекты будут содержать свои собственные активы, значки приложений, имя приложения.
  • Обратите внимание, что одним из минусов этого подхода является то, что вы не можете включить в него стручки.Вы должны выбрать субмодули Carthage или Git для любой сторонней библиотеки.
  • Один из плюсов этого подхода - вы можете поддерживать безопасность кода для основного модуля, указав функции или классы, которые будут расширены доРасширения.

Примечание: Во время выпуска приложения не забудьте убедиться в правильной структуре полезной нагрузки файла ipa.

0 голосов
/ 23 мая 2018

Я рекомендую вам использовать цели.

Позвольте мне показать вам, как я справляюсь с этой иерархией с моими assets / settings.

Активами


Моя Assets директория

Assets directory

  • Общая папка содержит общую images
  • Папка Company1 содержит images / colors / certificates

Вы должны изменить Target Membership для Company1 > Images, выбрав только цель, для которой оннужно ссылаться на

Target settings

Например, common > Assets необходимо ссылаться на все targets.

код


Вы можете сделать то же самое с вашим кодом, если вам нужно сделать что-то другое для каждой цели.

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

Ссылка этого файла на Company1 target

extension FirstViewController {

    func doSomething() {
        // implement this method for the company 1
    }

}

Ссылка этого файла на Company2 target

extension FirstViewController {

    func doSomething() {
        // implement this method for the company 2
    }

}

См. Этот файл для всех targets

class LandingEmptyViewController {

    func foobar() {
        self.doSomething()
    }

}

Вы также можете передать flags за цель в Build Settings

. Используя эти решения, вы сможете сделать то же самое в Android.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...