【问题标题】:How do I add files to targets in Xcode using rb-appscript?如何使用 rb-appscript 将文件添加到 Xcode 中的目标?
【发布时间】:2011-10-04 20:45:57
【问题描述】:

我正在尝试使用 rb-appscript 自动将文件添加到我的 Xcode 项目中。我对 Ruby 或 Applescript 没有太多经验,但似乎有两个人为他们完成了这项工作:

https://github.com/gonzoua/xcs/blob/master/xcs.thor

Automatically adding generated source files to an xcode project

不幸的是,这些都不适合我。我可以让他们将文件添加到组,但将文件添加到目标会中断。这是对我不起作用的最简单的代码:

require 'rubygems'
require 'appscript'

project_path = 'Users:me:Projects:xcode:project:src:AppScaffold.xcodeproj'
project_name = 'AppScaffold'
group_name = 'Classes'
file_name = 'ApplicationDelegate.m'
target_name = 'AppScaffold'

def lookup(sequence, name)
  sequence.get.each { |item|
    if item.name.get == name
      return item
    end
  }
  raise Exception.new("Couldn't find name '" + name + "' in sequence " + sequence.inspect)
end

app = Appscript.app('Xcode')
app.open(project_path)

project = lookup(app.projects, project_name)
target = lookup(project.targets, target_name)
group = lookup(project.root_group.item_references, group_name)
file = lookup(group.item_references, file_name)

file.add({:to => target})
# I also tried this:
# app.add(file, {:to => target})

此消息失败:

/Library/Ruby/Gems/1.8/gems/rb-appscript-0.6.1/lib/appscript.rb:542:in `_send_command': CommandError (Appscript::CommandError)
        OSERROR: -1708
        MESSAGE: Application could not handle this command.
        COMMAND: app("/Developer/Applications/Xcode.app").workspace_documents["project.xcworkspace"].projects["AppScaffold"].root_group.Xcode_3_groups.ID("080E96DDFE201D6D7F000001").Xcode_3_file_references.ID("1D3623250D0F684500981E51").add({:to=>app("/Developer/Applications/Xcode.app").workspace_documents["project.xcworkspace"].projects["AppScaffold"].targets.ID("1D6058900D05DD3D006BFB54")})
    from /Library/Ruby/Gems/1.8/gems/rb-appscript-0.6.1/lib/appscript.rb:642:in `method_missing'
    from add_to_target.rb:28

请注意,我使用的是 Xcode 4,但我的项目似乎有“Xcode_3_references”。我从头开始创建的项目也是如此;我不知道为什么。

无论如何,我不知道如何理解这条错误消息,也不知道在哪里可以找到相关文档。 (我查看了 Xcode 字典,但它没有太多关于“添加”的内容。)任何建议都会很棒。我没有嫁给 rb-appscript,我只是想以编程方式将文件添加到我的项目中。

【问题讨论】:

  • 你能解释一下你最初想解决的问题吗?也许有其他解决方案。
  • 根据这个问题的答案:stackoverflow.com/questions/6022009/… 有可能是xcode add 命令不能正常工作。

标签: xcode rb-appscript


【解决方案1】:

我不能 100% 确定您要做什么,以及您是为 Mac 还是为 iOS 构建。因此,我不确定我是否可以提供很多帮助。如果您只是尝试将文件添加到项目中以捆绑它们而不是在构建中编译它们,那么您不需要编写代码。而是单击左侧面板上文件列表顶部的项目,然后在主窗口中单击目标包。这应该会给你一个屏幕,顶部有“摘要 - 信息 - 构建设置 - 构建阶段 - 构建规则”选项。单击构建阶段,然后从下面的列表中选择复制捆绑资源。然后单击此列表底部的 + 号并选择要在构建期间复制到包的文件。

也就是说,如果必须以编程方式添加文件,那么您需要比我更高级的用户来回答您的问题。不过,在考虑它时,我想这取决于文件的类型、您从哪里获取文件以及在 iphone 上执行此操作所需的权限。如果您正在为 OSX 构建,那么我处于未知的水中,这个建议可能没有那么有用。

【讨论】:

  • 感谢您的帮助,但我确实想以编程方式执行此操作。但是,根据对this question 的回答,Xcode 4 似乎无法做到这一点。
  • 查看 Xcode 文件格式 - 每个项目都是一个包含 XML 清单的包,您可以通过简单地使用 ruby​​ 更改 xml 来将文件添加到目标等来操作。
【解决方案2】:

因此,自从 Xcode 移至 AppStore 以来,Xcode 的一个问题是旧版本保持不变,并没有被删除 - 更不用说二进制文件都是不同的(llvm 与 cc)。这与您遇到的问题不同,但我确实遇到了使用命令行编译器进行自制软件之类的复杂操作,并且遇到了以下命令:

sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer

见:http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man1/xcode-select.1.html

我不确定,但这可能会“重新定位”您正在使用的构建系统以引用当前 xcode 而不是旧版本,这可能会产生预期的结果。

【讨论】:

  • @traversable,您是否尝试过上述方法...是否有效/无效?只是想知道这是否是答案。
猜你喜欢
  • 1970-01-01
  • 2015-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-15
  • 1970-01-01
  • 2011-01-02
相关资源
最近更新 更多