También me pasé un par de días escribiendo una solución para este problema. Aquí hay un script de ruby que puede agregar al objetivo de su proyecto como una fase de compilación del script de ejecución. Esto fue probado con XCode 3.2.4 y ruby 1.8.7.
Para que esto funcione tendrá que instalar rb-appscript ruby gem. (Por ejemplo: sudo gem install-rb appscript)
Hay poca disposición para hacer:
- En primer lugar se necesita una lista de objetivos de compilación de archivos añadidos.
- En segundo lugar, espera un nombre de grupo de proyecto que se sincronizará con su carpeta de disco asociada ('objc' en mi caso). Obviamente, este grupo necesita existir y apuntar a una carpeta real.
Aquí está la secuencia de comandos:
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
}
Esto todavía está caliente, especialmente cuando piensas en fanfarronería y generación de código API. ¿Tienes algún progreso en esto? –