自动将生成的源文件添加到Xcode项目中

16

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

对于头文件,使用文件夹引用是可行的,但Xcode不会将文件夹引用中的任何文件识别为源文件。有没有人解决过这个问题?


这仍然是一个热门话题,特别是当你考虑到 Swagger 和 API 代码生成时。你在这方面有任何进展吗? - benjamin.ludwig
4个回答

3
我还花了几天时间为这个问题编写了一个解决方案。以下是一个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存储库。 - S-K'
我已删除minit参考,因为它不再更新。这种方法是针对特定版本的xcode设计的,如上所述。更新的版本可能无法正常工作。 - Adrian

2

0

0

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接