仅在 DEBUG 配置中将 info.plist 中启用的 iTunes 文件共享设置为 YES

Posted

技术标签:

【中文标题】仅在 DEBUG 配置中将 info.plist 中启用的 iTunes 文件共享设置为 YES【英文标题】:Set iTunes File Sharing enabled in info.plist to YES only in DEBUG configuration 【发布时间】:2016-01-18 15:59:06 【问题描述】:

在 Xcode 中,我可以根据我的应用程序的配置(调试与发布)将 "Application supports iTunes file sharing" / UIFileSharingEnabledsetting 设置为 YES/NO 吗?

我已经看到关于使用用户定义的构建设置来设置字符串 plist 项的字符串值的讨论(例如 $(MY_DEFINED_SETTING),但是你可以用这个布尔设置来做到这一点吗?这不完全一样,但是只要在构建应用程序的发布版本时自动删除它就可以了。但是如果我尝试在该字段中输入YESNO之外的任何内容,则默认为NO

我知道根据配置可以拥有一个文件的两个不同版本,但如果不拥有基本相同文件的两个副本会更简单。但是,如果这是最好的解决方案,那么任何有关实施该解决方案的提示将不胜感激。

谢谢

【问题讨论】:

【参考方案1】:

虽然 Xcode 中的默认 plist 查看器不允许我在 UIFileSharingEnabled 的键值字段中输入字符串,因为它需要一个布尔值,但我确实设法让它通过查看让我输入我想要的任何值plist作为源代码,输入如下:

<key>UIFileSharingEnabled</key>
<string>$FILE_SHARING_ENABLED</string>

相对于&lt;true/&gt;&lt;false/&gt;,plist 编辑器默认为第二行。

(其中FILE_SHARING_ENABLED 是我的user defined build setting 的名称,它设置为YES 表示调试,NO 表示发布)

注意,我还尝试设置用户定义的构建设置,在调试配置中它等于UIFileSharingEnabled,并且在发布中设置了一些乱码值。然后我尝试使用它作为键,但它没有被替换为值,而是被视为字符串。

通过打印出 infoDictionary 的内容进行双重检查

NSLog(@"%@",[[NSBundle mainBundle] infoDictionary]);

还可以通过打开 iTunes 并在底部的手机应用程序页面上检查文件共享是否有效/无效。 (记得在调试和发布配置中进行测试)

【讨论】:

这似乎不适用于NSAllowsArbitraryLoads :( 你在 NSApptTansportSecurity 字典里有那个吗? 是的,只要我写了&lt;true/&gt;,它就可以工作,如果我把它改成&lt;string&gt;$MY_USER_DEFINED_SETTING&lt;/string&gt;,它会给我ATS错误。 This user 也有同样的问题。不过,我发现this solution 更简单、更安全。 我在使用方法上传时从 appstoreconnect 收到错误:ERROR ITMS-90039: "Type Mismatch. The value for the Info.plist key UIFileSharingEnabled is not of the required type for that key... 似乎您现在无法使用自定义标志上传。

以上是关于仅在 DEBUG 配置中将 info.plist 中启用的 iTunes 文件共享设置为 YES的主要内容,如果未能解决你的问题,请参考以下文章

UIUserInterfaceStyle 键在 Xcode 12 的 Info.plist 中不可用,如何从 Info.plist 禁用 Xcode 12 中的暗模式?

如何根据 TARGET_OS 更改 Info.plist 标志?

ios开发之Info.plist文件相关配置

Xcode10升级问题:Multiple commands produce Info.plist

Firebase:Xcode 找不到配置文件:“GoogleService-Info.plist”

服务配置为“nil”。使用此方法前需要配置`Info.plist`或设置`defaultServiceConfiguration`