Автоматическое добавление сгенерированных исходных файлов в проект xcode - PullRequest
12 голосов
/ 11 февраля 2011

Я использую IDL, который автоматически генерирует исходные файлы для моего проекта xcode.Кто-нибудь знает, как я могу автоматически добавлять сгенерированные файлы в проект?В настоящее время я должен удалить текущие файлы из проекта и добавить новые.Это действительно раздражает.

Использование ссылки на папку работает для заголовочных файлов, но xcode не хочет распознавать файлы в ссылке на папку как исходные файлы.Кто-нибудь когда-нибудь находил решение этой проблемы?

Ответы [ 4 ]

3 голосов
/ 07 июня 2011

Я также потратил пару дней на написание решения этой проблемы. Вот скрипт ruby, который вы можете добавить к цели вашего проекта на этапе сборки сценария запуска. Это было проверено с XCode 3.2.4 и ruby ​​1.8.7.

Чтобы это работало, вам нужно установить rb-appscript ruby ​​gem. (например: sudo gem install 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
}
2 голосов
/ 02 мая 2014

Хорошую идею можно найти здесь: https://stackoverflow.com/a/17894337/354018

По сути, вы импортируете сгенерированные .m файлы в известный исходный файл, который добавляется на этапе компиляции.

0 голосов
/ 20 января 2015

Я добавил радар (подробности на http://www.openradar.me/radar?id=4885314376040448) просят поддержки для этого.

0 голосов
/ 16 апреля 2012

Посмотрите на xcode-editor project, API для управления файлами проекта Xcode.

Вы можете добавлять файлы в проект, указывать, к какой цели он принадлежит, добавлять файлы XIB и фреймворки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...