草庐IT

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

coder 2023-09-09 原文

使用 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 中:

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/

有关swift - 将自定义 key 添加到 info.plist,当我从 Swift 中的 Playground 访问时,它是零的更多相关文章

  1. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  2. ruby-on-rails - 在混合/模块中覆盖模型的属性访问器 - 2

    我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah

  3. ruby-on-rails - form_for 中不在模型中的自定义字段 - 2

    我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢

  4. ruby - 续集在添加关联时访问many_to_many连接表 - 2

    我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以

  5. ruby-on-rails - 如何生成传递一些自定义参数的 `link_to` URL? - 2

    我正在使用RubyonRails3.0.9,我想生成一个传递一些自定义参数的link_toURL。也就是说,有一个articles_path(www.my_web_site_name.com/articles)我想生成如下内容:link_to'Samplelinktitle',...#HereIshouldimplementthecode#=>'http://www.my_web_site_name.com/articles?param1=value1¶m2=value2&...我如何编写link_to语句“alàRubyonRailsWay”以实现该目的?如果我想通过传递一些

  6. ruby-on-rails - 如何在 Rails 3 中创建自定义脚手架生成器? - 2

    有这些railscast。http://railscasts.com/episodes/218-making-generators-in-rails-3有了这个,你就会知道如何创建样式表和脚手架生成器。http://railscasts.com/episodes/216-generators-in-rails-3通过这个,您可以了解如何添加一些文件来修改脚手架View。我想把两者结合起来。我想创建一个生成器,它也可以创建脚手架View。有点像RyanBates漂亮的生成器或web_app_themegem(https://github.com/pilu/web-app-theme)。我

  7. ruby-on-rails - 事件管理员日期过滤器日期格式自定义 - 2

    是否有简单的方法来更改默认ISO格式(yyyy-mm-dd)的ActiveAdmin日期过滤器显示格式? 最佳答案 您可以像这样为日期选择器提供额外的选项,而不是覆盖js:=f.input:my_date,as::datepicker,datepicker_options:{dateFormat:"mm/dd/yy"} 关于ruby-on-rails-事件管理员日期过滤器日期格式自定义,我们在StackOverflow上找到一个类似的问题: https://s

  8. ruby-on-rails - 从应用程序中自定义文件夹内的命名空间自动加载 - 2

    我们目前正在为ROR3.2开发自定义cms引擎。在这个过程中,我们希望成为我们的rails应用程序中的一等公民的几个类类型起源,这意味着它们应该驻留在应用程序的app文件夹下,它是插件。目前我们有以下类型:数据源数据类型查看我在app文件夹下创建了多个目录来保存这些:应用/数据源应用/数据类型应用/View更多类型将随之而来,我有点担心应用程序文件夹被这么多目录污染。因此,我想将它们移动到一个子目录/模块中,该子目录/模块包含cms定义的所有类型。所有类都应位于MyCms命名空间内,目录布局应如下所示:应用程序/my_cms/data_source应用程序/my_cms/data_ty

  9. ruby-on-rails - Rails - 使用/自定义 URL : '/dashboard' 指定根路径 - 2

    如何使此根路径转到:“/dashboard”而不仅仅是http://example.com?root:to=>'dashboard#index',:constraints=>lambda{|req|!req.session[:user_id].blank?} 最佳答案 您可以通过以下方式实现:root:to=>redirect('/dashboard')match'/dashboard',:to=>"dashboard#index",:constraints=>lambda{|req|!req.session[:user_id].b

  10. ruby-on-rails - 在 heroku 的 .fonts 文件夹中包含自定义字体,似乎无法识别它们 - 2

    Heroku支持人员告诉我,为了在我的Web应用程序中使用自定义字体(未安装在系统中,您可以在bash控制台中使用fc-list查看已安装的字体)我必须部署一个包含所有字体的.fonts文件夹里面的字体。问题是我不知道该怎么做。我的意思是,我不知道文件名是否必须遵循heroku的任何特殊模式,或者我必须在我的代码中做一些事情来考虑这种字体,或者如果我将它包含在文件夹中它是自动的......事实是,我尝试以不同的方式更改字体的文件名,但根本没有使用该字体。为了提供更多详细信息,我们使用字体的过程是将PDF转换为图像,更具体地说,使用rghostgem。并且最终图像根本不使用自定义字体。在

随机推荐