Xcode добавляет тире к моему идентификатору пакета

Я не могу понять, в чем здесь несоответствие. Мое приложение называется Monsters! Итак, в plist идентификатор пакета

com.businessname.${PRODUCT_NAME:rfc1034identifier}

насколько я понимаю, :rfc1034identifier удаляет запрещенные символы из Bundle ID, в моем случае ! в конце Monsters!

Но по какой-то причине, когда я захожу в настройки проекта, Xcode дает мне идентификатор пакета

com.businessname.Monsters-

Я понимаю, что могу зайти в plist и просто жестко закодировать свой идентификатор пакета, но кто-нибудь знает, где и почему добавляется этот -?


person Lucian Thorr    schedule 28.05.2014    source источник
comment
Насколько я знаю, когда он заменяет запрещенные символы, он заменяет их дефисами.   -  person brandonscript    schedule 29.05.2014


Ответы (2)


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

Согласно документу Apple:

Эта строка должна быть универсальным идентификатором типа (UTI), который содержит только буквенно-цифровые (A–Z,a–z,0–9), дефисы (-) и символы точки (.).

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

person Vlad    schedule 28.05.2014
comment
Можете ли вы предоставить ссылку на документ Apple, в котором он есть, пожалуйста? Я пытался найти его сам, но не смог найти. - person rentedrainbow; 26.02.2018
comment
Также, судя по всему, он не может начинаться с цифр. - person Mateus; 06.08.2018

Xcode заменяет плохой символ неплохим символом. Они произвольно выбрали -.

Вместо использования ${PRODUCT_NAME:rfc1034identifier} я бы определил новый параметр со значением, которое является названием вашего продукта без !, и использовал его вместо этого.

Перейдите к настройкам вашего проекта и в разделе «Настройки сборки» должен быть раздел «Определяемый пользователем». Добавьте новый параметр, нажав кнопку + вверху рядом с надписью «Основные все | Комбинированные уровни | +». Назовите его PRODUCT_NAME_SAFE и присвойте ему значение Monsters. Затем установите для идентификатора пакета значение com.businessname.${PRODUCT_NAME_SAFE}.

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

person i_am_jorf    schedule 28.05.2014