Xcode добавляет тире к моему идентификатору пакета
Кажется, я не понимаю, как это расхождение.
Мое приложение называется Monsters!
Таким образом, в plist идентификатор Bundle имеет
com.businessname.${PRODUCT_NAME:rfc1034identifier}
из того, что я понимаю :rfc1034identifier
удаляет запрещенные символы из идентификатора Bundle, в моем случае !
в конце Monsters!
Но по какой-то причине, когда я перехожу к своим настройкам проекта, Xcode дает мне идентификатор Bundle
com.businessname.Monsters-
Я понимаю, что могу войти в plist и просто записать свой идентификатор Bundle, но кто-нибудь знает, где и почему добавляется -
?
Ответы
Ответ 1
Разрешенные символы для идентификатора пучка те же, что и у DNS.
Поэтому вы не можете помещать пробелы, кавычки и т.д. Для вашей ситуации, в частности, я считаю, что лучшая идея состоит в том, чтобы вручную отредактировать идентификатор пакета с действительным идентификатором вместо использования имени продукта.
В соответствии с Apple doc:
Эта строка должна быть идентификатором единого типа (UTI), который содержит только алфавитно-цифровые (A-Z, a-z, 0-9), дефис (-) и период (.).
Все, что не соответствует этому стандарту, автоматически заменяется тире, потому что действительны только символы тире и периода.
Раньше к этому, приложение отклонялось, когда не соблюдало это правило.
Поэтому, чтобы ответить на ваш вопрос, его мера, предотвращающая отклонение вашего приложения при отправке его в магазин.
Ответ 2
Xcode заменяет плохой символ символом не плохого. Они произвольно выбрали -
.
Вместо использования ${PRODUCT_NAME:rfc1034identifier}
я бы определил новый параметр со значением, являющимся вашим именем продукта, без !
и вместо него использовать его.
Перейдите в настройки своего проекта, а в разделе "Настройки сборки" должен быть раздел "Пользовательский". Добавьте новую настройку, нажав кнопку "+" наверху, где он говорит "Основные все | Комбинированные уровни | +". Назовите его PRODUCT_NAME_SAFE
и присвойте ему значение Monsters
. Затем установите для параметра Bundle ID значение com.businessname.${PRODUCT_NAME_SAFE}
.
Возможно, существуют и другие варианты этого решения, которые будут работать в зависимости от ваших потребностей.