Tôi cũng đã dành một vài ngày viết giải pháp cho vấn đề này. Đây là một kịch bản ruby mà bạn có thể thêm vào mục tiêu của dự án của bạn như là một giai đoạn xây dựng kịch bản lệnh chạy. Điều này đã được thử nghiệm với XCode 3.2.4 và ruby 1.8.7.
Để làm việc này, bạn sẽ cần cài đặt đá quý ruby rb-appscript. (Ví dụ: sudo gem install rb-appscript)
Có rất ít thiết lập để làm:
- Đầu tiên nó cần một danh sách các mục tiêu biên dịch cho các tập tin bổ sung.
- Thứ hai nó dự kiến tên nhóm dự án mà nó sẽ đồng bộ hóa với thư mục đĩa được liên kết ('objc' trong trường hợp của tôi). Rõ ràng nhóm này cần phải tồn tại và chỉ vào một thư mục thực sự.
Đây là kịch bản:
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
}
Điều này vẫn còn nóng, đặc biệt là khi bạn nghĩ về việc tạo dao găm và tạo mã API. Có bất kỳ tiến bộ về điều này? –