2011-02-11 28 views
11

私はxcodeプロジェクトのソースファイルを自動的に生成するIDLを使用しています。誰もが自動的に生成されたファイルをプロジェクトに追加する方法を知っていますか?現在、プロジェクトから現在のファイルを削除して新しいファイルを追加する必要があります。これは本当に迷惑になります。生成されたソースファイルをxcodeプロジェクトに自動的に追加

ヘッダーファイルはフォルダ参照を使用しますが、xcodeはフォルダ参照内のファイルをソースファイルとして認識したくありません。誰もこの問題の解決策を見つけたことはありませんか?

+0

これはまだ暑いです。特に、スガーザーやAPIコードの生成について考えると、これについて進展がありましたか? –

答えて

3

また、この問題の解決策を書いて数日を費やしました。 プロジェクトのターゲットに実行スクリプトビルドフェーズとして追加できるルビースクリプトは次のとおりです。これは、XCode 3.2.4とRuby 1.8.7でテストされました。

これを行うには、rb-appscript ruby​​ gemをインストールする必要があります。 (例:sudoの宝石は、RB-appscriptをインストール)

行うにはほとんど設定があります:

  1. まずそれが追加されたファイルのコンパイルターゲットのリストを必要とします。
  2. 第2に、関連するディスクフォルダ(私の場合は「objc」)と同期するプロジェクトグループ名が必要です。明らかに、このグループは存在し、実際のフォルダを指し示す必要があります。ここで

スクリプトです:xcode-editorプロジェクトで

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

このアプローチは現在古くなっていますか? minitリポジトリを削除したようです。 –

+0

私はminit参照が更新されなくなったので削除しました。このアプローチは、xcodeの特定のバージョン用に設計されています。新しいバージョンが動作しない可能性があります。 – Adrian

+0

これに更新プログラムはありますか? –

0

見て、Xcodeのプロジェクトファイルを操作するためのAPI。

プロジェクトにファイルを追加し、それが属するターゲットを指定し、xibファイルとフレームワークを追加することができます。

1

良いアイデアは、ここで見つけることができます:https://stackoverflow.com/a/17894337/354018

は基本的に、あなたはコンパイルフェーズに追加された既知のソースファイルに生成.mファイルをインポートします。

+0

これは完全に働いた。ベーコンが救われた。 – Sam

関連する問題