【问题标题】:Automatically adding generated source files to an xcode project自动将生成的源文件添加到 xcode 项目
【发布时间】:2011-02-11 02:32:36
【问题描述】:

我正在使用一个 IDL,它会自动为我的 xcode 项目生成源文件。有谁知道我如何自动将生成的文件添加到项目中?目前我必须从项目中删除当前文件并添加新文件。这真的很烦人。

使用文件夹引用适用于头文件,但 xcode 不想将文件夹引用中的任何文件识别为源文件。有没有人找到解决这个问题的方法?

【问题讨论】:

  • 这仍然很热门,尤其是当您想到 swagger 和 API 代码生成时。这方面有进展吗?

标签: iphone xcode ios applescript


【解决方案1】:

我还花了几天时间为这个问题写了一个解决方案。 这是一个 ruby​​ 脚本,您可以将其作为运行脚本构建阶段添加到项目的目标中。这是用 XCode 3.2.4 和 ruby​​ 1.8.7 测试的。

为此,您需要安装 rb-appscript ruby​​ gem。 (例如:sudo gem install rb-appscript)

几乎没有什么设置要做:

  1. 首先它需要一个添加文件的编译目标列表。
  2. 其次,它需要一个项目组名称,它将与其关联的磁盘文件夹(在我的例子中为“objc”)同步。显然,这个组需要存在并指向一个真实的文件夹。

这是脚本:

require 'rubygems'
require 'appscript'

target_names = ['MinitSample'] # Put your target names here
group_name = 'objc'   # Name of Xcode project group where to add the generated files
project_name = ENV["PROJECT_NAME"]
project_dir = ENV["PROJECT_DIR"]

xcode = Appscript.app('Xcode')
project = xcode.projects[project_name]
group = project.groups[group_name]
group_path =  group.real_path.get
generated_files = Dir.glob(group_path+"/*.m")
missing_files = Array.new(generated_files)
group.item_references.get.each {|item|
  item_path = item.real_path.get
  missing_files.delete(item_path)
  if ! generated_files.include?(item_path) then
    group.file_references[item.name.get].delete
    puts "Deleting #{File.basename(item_path)} from group #{group_name}, as it is not in generated files list"
  end
}
if missing_files.empty? then
  puts "There are no new files to add. "
  exit
end
# holds the compile targets for generated files
targets = []
project.targets.get.each{ |target|
  targets << target if target_names.include?(target.name.get)
}
if targets.empty? then
  puts "Unable to find #{target_names.inspect} in project targets ! Aborting"
  exit
end
missing_files.each{ |path|
  file_name = File.basename(path)
  msg = "Adding #{file_name} to group #{group_name} and to targets: "
  item = xcode.make(:new => :file_reference, 
                    :at => group.item_references.after, 
                    :with_properties => {:full_path => path,
                    :name => file_name})
  targets.each {|target|
      xcode.add(item,{:to=>target})
      msg += target.name.get
    }
    puts msg
}

【讨论】:

  • 这种方法现在已经过时了吗?看起来您已经删除了 minit 存储库。
  • 我已经删除了 minit 参考,因为它不再更新。如前所述,这种方法是为特定版本的 xcode 设计的。较新的版本可能无法使用。
【解决方案2】:

可以在这里找到一个好主意:https://stackoverflow.com/a/17894337/354018

基本上,您将生成的.m 文件导入到添加到编译阶段的已知源文件中。

【讨论】:

    【解决方案3】:

    我添加了一个雷达(详情请见http://www.openradar.me/radar?id=4885314376040448),请求对此提供支持。

    【讨论】:

      【解决方案4】:

      看看xcode-editor项目,一个用于操作Xcode项目文件的API。

      您可以将文件添加到项目中,指定它属于哪个目标,添加 xib 文件和框架。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-02-28
        • 2015-01-01
        • 2013-12-17
        • 1970-01-01
        • 1970-01-01
        • 2020-03-08
        • 1970-01-01
        • 2013-01-12
        相关资源
        最近更新 更多