IPhone/Xcode: могут ли разные целевые объекты проекта иметь разные идентификаторы пакетов?

Я немного смущен, как это работает - это мое понимание:

  • Профиль целевой настройки связан с определенным идентификатором приложения
  • Идентификатор связки для цели находится в Информация о цели\Свойство\Идентификатор

Но... идентификатор пакета также находится в Info.plist. Похоже, что если вы измените идентификатор пакета в Info.plist, Xcode автоматически изменит его в Target info\Properties\Identifier и наоборот.

Итак, каково это имеет приоритет? Идентификатор пакета Target info\Properties\Identifier или идентификатор пакета Info.plist

Причина, по которой я спрашиваю, - это то, что я хотел бы иметь две версии для своего приложения - бесплатную версию, поддерживающую рекламу, и платную версию, и я бы хотел сделать это с двумя разными целями. Поскольку они будут двумя различными приложениями в App Store, я понимаю, что им нужны два разных идентификатора приложения (и я не хочу идти по маршруту * с идентификаторами приложений, описание того, как это работает в App Store, сделало мой боль в мозге).

Мне понадобилось бы два разных Info.plists для каждой цели, если бы я это сделал, или я могу использовать тот же Info.plist, и просто иметь разные цели, используя другой профиль обеспечения разработки/распределения?

Ответы

Ответ 1

Нет приоритета, диалог свойств просто служит для вас другим способом увидеть ваш Info.plist.

Чтобы разделить plist между целевыми объектами, но иметь разные идентификаторы, убедитесь, что параметр "Expand Build Settings in Info.plist File" включен для обеих целей. Затем для каждой цели создайте новую пользовательскую переменную в целевых настройках для вашего идентификатора пакета (например, APPLICATION_BUNDLE_IDENTIFIER, см. Здесь: fooobar.com/info/139487/...) и установите его для правильного значения для этой цели. В вашем plist введите следующее для идентификатора пакета:

<key>CFBundleIdentifier</key>
<string>$(APPLICATION_BUNDLE_IDENTIFIER)</string>

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