2011-02-11 14 views
11

Estoy usando un IDL que genera automáticamente archivos fuente para mi proyecto xcode. ¿Alguien sabe cómo puedo automáticamente agregar los archivos generados al proyecto? Actualmente tengo que eliminar los archivos actuales del proyecto y agregar los nuevos. Esto se pone realmente molesto.Agregar automáticamente archivos fuente generados a un proyecto xcode

El uso de una referencia de carpeta funciona para los archivos de encabezado, pero xcode no desea reconocer ningún archivo en una referencia de carpeta como archivos de origen. ¿Alguien ha encontrado alguna vez una solución a este problema?

+0

Esto todavía está caliente, especialmente cuando piensas en fanfarronería y generación de código API. ¿Tienes algún progreso en esto? –

Respuesta

3

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:

  1. En primer lugar se necesita una lista de objetivos de compilación de archivos añadidos.
  2. 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 
} 
+0

¿Está este enfoque ahora desactualizado? Parece que ha eliminado el repositorio de minit. –

+0

He eliminado la referencia de minit ya que no se actualiza. Este enfoque fue diseñado para una versión específica de xcode como se menciona. Las versiones más nuevas pueden no funcionar. – Adrian

+0

¿Hay alguna actualización al respecto? –

0

Mira xcode-editor proyecto, una API para manipular archivos de proyecto Xcode.

Puede agregar archivos a un proyecto, especificar a qué objetivo pertenece, agregar archivos xib y marcos.

1

Una buena idea se puede encontrar aquí: https://stackoverflow.com/a/17894337/354018

Básicamente, se importa el .m archivos generados en un fichero fuente conocida que se añade a la fase de compilación.

+0

Esto funcionó por completo. Bacon guardado. – Sam

Cuestiones relacionadas