Подтвердить что ты не робот

Xcode 7: изменение идентификатора продукта

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

Я использую плагин Xcode Jenkins для установки идентификатора пакета:

Плагин Jenkins Xcode - Подписание кода и опции Keychain OS X

Проблема в том, что это изменит идентификатор пакета в файле Info.plist и в MyTarget > General > Bundle Identifier. Но он не изменит идентификатор пакета в настройках сборки > Упаковкa > Идентификатор пакета продуктов.

То же самое происходит, если я делаю это вручную. Я создаю новый проект в Xcode 7. По умолчанию три значения:

Info plist before target general before упаковка

Когда я изменяю значение в файле Info.plist следующим образом:

Info plist changed

Другими двумя значениями будут:

target general after упаковка после

Итак, как вы можете видеть, что значение в настройках сборки не меняется. Если я в Xcode, я меняю это значение вручную, но если я создаю проект в Jenkins, это проблема bis.

Кто-нибудь сталкивался с той же проблемой? Как вы справляетесь с этим?

Спасибо!

4b9b3361

Ответ 1

Столкнулась с той же проблемой.

PRODUCT_BUNDLE_IDENTIFIER - это переменная в файле project.pbxproj. Измените это на все, что хотите, и оно будет отображаться как в вашем Info.plist, так и в настройках проекта.

Ответ 2

ответ udit правильный. Наилучшей практикой является значение идентификатора пакета Bistle plist как $PRODUCT_BUNDLE_IDENTIFIER. Затем в настройках сборки используйте различные конфигурации (Debug, Release.etc), чтобы настроить различный идентификатор пакета: введите описание изображения здесь

Вам не нужен плагин xCode для изменения идентификатора пакета, но вам нужно указать там конфигурацию.

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

Ответ 3

Обратитесь к для простого решения для замены $PRODUCT_BUNDLE_IDENTIFIER с помощью команды оболочки, например -

sed -i '' 's/com.example.oldbundleid/com.example.newbundleid/g' project.pbxproj

Вы можете передать свои переменные, используя Jenkins/Shell.

Альтернативный подход для этого заключается в использовании mod-pbxproj.

python -m mod_pbxproj -b -af PRODUCT_BUNDLE_IDENTIFIER=com.example.newbundleid -rf PRODUCT_BUNDLE_IDENTIFIER=com.example.oldbundleid project.pbxproj All

//редактировать

Старый идентификатор связки можно получить с помощью

awk -F '=' '/PRODUCT_BUNDLE_IDENTIFIER/ {print $2; exit}' project.pbxproj

Это можно сохранить в строковой переменной и использовать вместо com.example.oldbundleid

Ответ 4

Для xcode 8.x

Изменение имени приложения в разделе Цели > your_app_name - Info > добавление нового ключа свойства не вносит полного изменения имени приложения во всем проекте.

Когда вы это делаете, ваш проект выполняется гладко в вашем Mac (т.е. в системе, в которой вы использовали эти изменения, так как все ваши ключи и идентификаторы свойств будут сохранены в вашей системе). Когда вы пытаетесь использовать свой проект в другой системе, вы получите эту странную ошибку, которую не хватает вашему проекту, если вы используете ваши проекты в своем проекте.

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

В разделе Цели > Настройки сборки выделите Упаковка.

Измените имя Имя продукта на нужное имя и Идентификатор продукта на новый. Как только вы это сделаете, автоматически имя вашего проекта и идентификатор пакета будут изменены на новый на вкладке "Общие".