我可以在应用程序运行时以编程方式翻转 Info.plist 值吗?

Posted

技术标签:

【中文标题】我可以在应用程序运行时以编程方式翻转 Info.plist 值吗?【英文标题】:Can I programmatically flip Info.plist values while my application is running? 【发布时间】:2009-09-15 22:09:35 【问题描述】:

我有兴趣在我的应用程序中使用SBUsesNetworkUIRequiresPersistentWiFi 键;但是,我只想在使用一组特定的视图控制器时启用它们。有没有办法在应用程序运行时以编程方式翻转这些键值?

【问题讨论】:

【参考方案1】:

您无法在运行时修改捆绑包内容,您没有对该目录的写入权限。我不确定是否有办法完全按照您的意愿行事。

【讨论】:

【参考方案2】:

我知道您可以通过NSBundle 将您的 info.plist 作为 NSDictionary 获取以下内容:

NSDictionary* infoDictionary = [[NSBundle mainBundle] infoDictionary];

您可以从那里创建NSDictionarymutableCopy 并在其中设置值。在对键进行查询时,您必须确保查询NSDictionary 而不是您的 info.plist 文件,但是将所有这些封装到一个为您处理这两个问题的类中应该不难。

至于直接修改您应用的 info.plist 文件可能会出现问题(例如,如果您修改文件,代码签名将失败,您的应用将被视为损坏),但我不确定。

【讨论】:

UIRequiresPersistentWiFi 键似乎与一些较大的 UIApplication 代码挂钩,我无法或不知道如何访问,当需要网络连接时,它会显示一个 WiFi 对话框。因此,在这种特殊情况下,制作捆绑首选项的副本可能不会让我走得太远,尽管这可能适用于其他键,如果它们的行为可以被覆盖的话。 您将无法更改 info.plist 或 mainbundle 中的任何文件。【参考方案3】:

您不能修改 Info.plist。似乎没有 Apple 认可的方式来做你想做的事。

【讨论】:

【参考方案4】:

我认为这行不通。 [NSBundle mainBundle] 有一个指向特定 infoDictionary 的指针。即使您获取可变副本,NSBundle 也不会知道我们的新 plist 的任何内容。有人试过吗?

【讨论】:

【参考方案5】:

Info.plist 只不过是一本字典。因此它可以被编辑。

【讨论】:

以上是关于我可以在应用程序运行时以编程方式翻转 Info.plist 值吗?的主要内容,如果未能解决你的问题,请参考以下文章

在使用像 EF 这样的 ORM 时,是不是可以在运行时以编程方式创建新表?

如何在运行时以编程方式计算应用 ID?

如何在其他呼叫运行时以编程方式合并呼叫(电话会议)

在运行时以编程方式激活约束

在运行时以编程方式更改 SVG 类

如何在运行 asp.net 页面时以编程方式设置表格背景?