我正在使用IDL自动为我的xcode项目生成源文件。有谁知道如何自动将生成的文件添加到项目中?目前,我必须从项目中删除当前文件并添加新文件。这真令人讨厌。
使用文件夹引用适用于头文件,但xcode不希望将文件夹引用中的任何文件识别为源文件。有没有人找到解决这个问题的方法?
答案 0 :(得分:3)
我也花了几天时间为这个问题编写解决方案。 这是一个ruby脚本,您可以将其作为运行脚本构建阶段添加到项目的目标中。用XCode 3.2.4和ruby 1.8.7测试了它。
为此,您需要安装rb-appscript ruby gem。 (例如:sudo gem install rb-appscript)
没有什么可以做的设置:
这是脚本:
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
}
答案 1 :(得分:2)
可以在这里找到一个好主意:https://stackoverflow.com/a/17894337/354018
基本上,您将生成的.m
文件导入已添加到编译阶段的已知源文件。
答案 2 :(得分:0)
查看xcode-editor项目,这是一个用于操作Xcode项目文件的API。
您可以向项目添加文件,指定它所属的目标,添加xib文件和框架。
答案 3 :(得分:0)
我已经添加了一个雷达(详情请http://www.openradar.me/radar?id=4885314376040448),要求对此提供支持。