gpt4 book ai didi

swift - 将自定义 key 添加到 info.plist,当我从 Swift 中的 Playground 访问时,它是零

转载 作者:搜寻专家 更新时间:2023-10-31 22:33:37 25 4
gpt4 key购买 nike

使用 Xcode 7.2(在 Yosemite 上),我似乎无法从 playground 的 info.plist 访问自定义 key :

import UIKit
var str = "Hello, playground"
let app_id = NSBundle.mainBundle().infoDictionary?["MyAppID"] as? String

使用上面的代码,app_id 为 nil。我希望它是字符串“TEST”

我像这样将它包含在我的 info.plist 中:

enter image description here

Playground 是否有一些我没有读过的限制?

如果我打印所有的 key ,我的自定义 key 就丢失了:

let dict = NSBundle.mainBundle().infoDictionary!
for k in dict.keys {
print("\(k)")
}

打印以下内容:

DTSDKName
CFBundleIdentifier
CFBundleSupportedPlatforms
CFBundleInfoDictionaryVersion
LSRequiresIPhoneOS
CFBundleNumericVersion
DTPlatformName
CFBundleShortVersionString
CFBundleVersion
UIViewControllerBasedStatusBarAppearance
UIRequiredDeviceCapabilities
UIStatusBarHidden
CFBundlePackageType
UIDeviceFamily
CFBundleExecutable
CFBundleInfoPlistURL
LSBackgroundOnly
CFBundleName
CFBundleDevelopmentRegion

如果我查看 Bundle 名称,如下所示:

let name = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleName") as? String

我看到的是我的 playground 的名称,而不是工作区的名称。我可以获取项目的 info.plist 吗?

最佳答案

Playground 没有 Info.plist文件。 Playground 是独立的。将它们添加到项目中不会导致它们访问项目中的文件。他们只能访问自己包中的文件。

您可以将 plist 文件作为资源添加到 playground 并以这种方式读取它(使用 pathForResourceNSDictionary(contentsOfFile:) ,但您不能在其上使用 objectForInfoDictionaryKey。您不能将其命名为“信息” .plist”,因为这将与自动生成的 Info.plist Playground 用于运行发生冲突。

例如,如果您将一个 plist 复制到您的 Resources 文件夹中,将其命名为 MyInfo.plist ,并加载它:

let infoPath = NSBundle.mainBundle().pathForResource("MyInfo.plist", ofType: nil)!
let info = NSDictionary(contentsOfFile: infoPath)!

这与真正的 Info.plist 并不完全相同,因为像 $(EXECUTABLE_NAME) 这样的东西不会展开。

但这里的要点是 playgrounds 在它们自己的包中,与应用程序无关,并且它们在运行时动态创建自己的 Info.plist。您在这里尝试做的事情与 Playground 目前的运作方式不符。

理解所有这些的一个关键部分是 Playground 是真实的应用程序。它们被编译并构建成一个可执行文件,它有自己的包,安装在构建目录中。检查NSBundle.mainBundle().bundlePath看哪里。当 playground 运行时,它不知道它的源代码来自哪里,更不用说它可能所在的一些更大的目录结构了。即使是 __FILE__宏被丢弃(它返回 <EXPR> )。

我希望他们将来会对此进行改进,因为目前有很多这样的东西使得它们很难用来探索现有的代码库。它们实际上是为了探索独立的 Swift 的一小部分。我经常发现自己构建小型命令行应用程序而不是 Playground 。对于非 UI 工作,命令行应用程序可以更强大。

关于swift - 将自定义 key 添加到 info.plist,当我从 Swift 中的 Playground 访问时,它是零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34562262/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com