我可以在应用程序运行时以编程方式翻转 Info.plist 值吗?
Posted
技术标签:
【中文标题】我可以在应用程序运行时以编程方式翻转 Info.plist 值吗?【英文标题】:Can I programmatically flip Info.plist values while my application is running? 【发布时间】:2009-09-15 22:09:35 【问题描述】:我有兴趣在我的应用程序中使用SBUsesNetwork
和UIRequiresPersistentWiFi
键;但是,我只想在使用一组特定的视图控制器时启用它们。有没有办法在应用程序运行时以编程方式翻转这些键值?
【问题讨论】:
【参考方案1】:您无法在运行时修改捆绑包内容,您没有对该目录的写入权限。我不确定是否有办法完全按照您的意愿行事。
【讨论】:
【参考方案2】:我知道您可以通过NSBundle 将您的 info.plist 作为 NSDictionary 获取以下内容:
NSDictionary* infoDictionary = [[NSBundle mainBundle] infoDictionary];
您可以从那里创建NSDictionary
的mutableCopy
并在其中设置值。在对键进行查询时,您必须确保查询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 值吗?的主要内容,如果未能解决你的问题,请参考以下文章