2011-02-11 118 views
11

我正在使用IDL,它會自動爲我的xcode項目生成源文件。有誰知道我如何自動將生成的文件添加到項目中?目前我必須從項目中刪除當前文件並添加新文件。這真的很煩人。自動將生成的源文件添加到xcode項目

使用文件夾引用適用於頭文件,但xcode不希望將文件夾引用中的任何文件識別爲源文件。有沒有人找到解決這個問題的方法?

+0

這仍然很熱,尤其是當您考慮使用Swagger和AP​​I代碼時。在這方面有什麼進展? – 2016-10-28 10:20:02

回答

3

我也花了幾天時間爲這個問題寫了一個解決方案。 這是一個ruby腳本,您可以將其作爲運行腳本構建階段添加到項目目標中。這是用XCode 3.2.4和ruby 1.8.7測試的。

爲此,您需要安裝rb-appscript ruby​​ gem。 (例如:sudo的創業板安裝RB-appscript)

幾乎沒有設置要做到:

  1. 首先它需要添加的文件的編譯目標清單。
  2. 其次,它期望一個項目組名稱,它將與它關聯的磁盤文件夾(在我的情況下是'objc')進行同步。顯然這個組需要存在並指向一個真實的文件夾。

下面是腳本:

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倉庫。 – 2014-08-22 08:35:28

+0

我已經刪除了minit參考,因爲它不再更新。這種方法是爲所提到的特定版本的xcode而設計的。較新的版本可能無法正常工作。 – Adrian 2014-08-25 14:30:03

0

xcode-editor項目,用於處理Xcode的項目文件的API。

您可以將文件添加到項目中,指定它屬於哪個目標,添加xib文件和框架。

相關問題