2011-02-11 11 views
11

Sto utilizzando un IDL che genera automaticamente file di origine per il mio progetto xcode. Qualcuno sa come posso avere automaticamente i file generati aggiunti al progetto? Attualmente devo cancellare i file correnti dal progetto e aggiungerne di nuovi. Questo diventa davvero fastidioso.Aggiunta automatica di file di origine generati a un progetto xcode

Utilizzare un riferimento di cartella funziona per i file di intestazione ma xcode non desidera riconoscere alcun file in un riferimento di cartella come file di origine. Qualcuno ha mai trovato una soluzione a questo problema?

+0

Questo è ancora caldo, specialmente quando si pensa alla generazione di codice swagger e API. Hai qualche progresso su questo? –

risposta

3

Ho trascorso anche un paio di giorni a scrivere una soluzione per questo problema. Ecco uno script ruby ​​che è possibile aggiungere alla destinazione del progetto come fase di esecuzione dello script. Questo è stato testato con XCode 3.2.4 e ruby ​​1.8.7.

Per far funzionare questo, è necessario installare rb-appscript ruby ​​gem. (Ad es: sudo gem install RB-appscript)

C'è poco messa a punto da fare:

  1. In primo luogo ha bisogno di una lista di obiettivi di compilazione per i file aggiunti.
  2. In secondo luogo, si aspetta un nome di gruppo di progetto che verrà sincronizzato con la cartella del disco associata ('objc' nel mio caso). Ovviamente questo gruppo deve esistere e puntare a una vera cartella.

Ecco lo script:

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

Questo approccio non è aggiornato? Sembra che tu abbia eliminato il repository minit. –

+0

Ho eliminato il riferimento minit perché non è più aggiornato. Questo approccio è stato progettato per una versione specifica di xcode come menzionato. Le versioni più recenti potrebbero non funzionare. – Adrian

+0

C'è un aggiornamento su questo? –

0

Guardate xcode-editor progetto, un'API per la manipolazione di file di progetto Xcode.

È possibile aggiungere file a un progetto, specificare il target a cui appartiene, aggiungere file e framework xib.

1

Una buona idea può essere trovato qui: https://stackoverflow.com/a/17894337/354018

In sostanza, si importano i .m file generati in un file sorgente noto che viene aggiunto alla fase di compilazione.

+0

Questo ha funzionato completamente. Bacon salvato. – Sam

Problemi correlati