2011-02-11 24 views
11

Tôi đang sử dụng IDL tự động tạo tệp nguồn cho dự án xcode của mình. Có ai biết làm thế nào tôi có thể tự động có các tập tin được tạo ra thêm vào dự án? Hiện tại tôi phải xóa các tệp hiện tại khỏi dự án và thêm các tệp mới. Điều này thực sự gây phiền nhiễu.Tự động thêm tệp nguồn đã tạo vào dự án xcode

Sử dụng tham chiếu thư mục hoạt động cho tệp tiêu đề nhưng xcode không muốn nhận dạng bất kỳ tệp nào trong thư mục tham chiếu dưới dạng tệp nguồn. Có ai từng tìm ra giải pháp cho vấn đề này không?

+0

Đ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? –

Trả lời

3

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:

  1. Đầ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.
  2. 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 
} 
+0

Phương pháp này có lỗi thời không? Có vẻ như bạn đã xóa kho lưu trữ minit. –

+0

Tôi đã xóa tham chiếu minit vì nó không còn được cập nhật. Cách tiếp cận này được thiết kế cho một phiên bản cụ thể của xcode như đã đề cập. Các phiên bản mới hơn có thể không hoạt động. – Adrian

+0

Có bản cập nhật về điều này không? –

0

Nhìn vào xcode-editor dự án, một API để thao tác với các file dự án Xcode.

Bạn có thể thêm tệp vào một dự án, chỉ định mục tiêu đó thuộc về, thêm tệp xib và khung công tác.

1

Một ý tưởng tốt có thể được tìm thấy ở đây: https://stackoverflow.com/a/17894337/354018

Về cơ bản, bạn nhập tạo .m file vào một tập tin nguồn đã biết, được bổ sung vào giai đoạn biên dịch.

+0

Điều này hoàn toàn làm việc. Bacon đã được lưu. – Sam

Các vấn đề liên quan