Xcode正在为我的包标识符添加一个破折号

Luc*_*orr 11 xcode ios bundle-identifier

我似乎无法弄清楚这里的差异.我的应用程序Monsters! 在plist中命名为,所以Bundle Identifier是

com.businessname.${PRODUCT_NAME:rfc1034identifier}
Run Code Online (Sandbox Code Playgroud)

根据我的理解:rfc1034identifier从Bundle ID中移除禁用的字符,在我的情况下,!在最后Monsters!

但出于某种原因,当我进入我的项目设置时,Xcode给了我一个Bundle Identifier

com.businessname.Monsters-
Run Code Online (Sandbox Code Playgroud)

我意识到我可以进入plist并只是对我的Bundle Identifier进行硬编码,但有人知道在哪里或为什么-要添加它?

Vla*_*lad 12

bundle标识符允许的字符与DNS相同.因此,您不能放置任何空格,引号等.特别是对于您的情况,我认为最好的想法是使用有效的标识符手动编辑包ID,而不是使用产品名称.

根据Apple doc:

此字符串必须是统一类型标识符(UTI),其仅包含字母数字(AZ,az,0-9),连字符( - )和句点(.)字符.

任何不符合此标准的内容都将自动替换为破折号,因为只有短划线和句点字符有效.在此之前,申请在不遵守此规则时被拒绝.因此,要回答您的问题,这是一项措施,可以防止您的应用在商店中提交时被拒绝.


i_a*_*orf 5

Xcode用非坏字符替换坏字符.他们任意选择-.

而不是使用${PRODUCT_NAME:rfc1034identifier},我会定义一个新设置,其值为您的产品名称!,而不是使用它而是使用它.

转到"项目"设置,在"构建设置"下,应该有一个"用户定义"部分.单击顶部附近的"基本所有|组合级别+ +",然后单击顶部的+按钮添加新设置.打电话给它PRODUCT_NAME_SAFE并给它价值Monsters.然后将您的Bundle ID设置为 com.businessname.${PRODUCT_NAME_SAFE}.

根据您的需要,此解决方案可能还有其他变体.