Unityから出力したXcodeのプロジェクトの設定の、とあるファイルのcompiler flagsに-fno-objc-arcを追加したかったので、方法を調べた。

Ruby の xcodeproj gemを使って、

#!/usr/bin/env ruby
# -*- coding: utf-8 -*-

require 'xcodeproj'

PROJECT = 'Unity-iPhone'
TARGET = 'Unity-iPhone'

# Xcodeのプロジェクトのターゲットの Build Phases > Compile Sources
# の指定のファイルにフラグを追加する
def add_compiler_flags(xcproj, file_names, flags)
  xcproj.targets.each do |target|
    next unless target.name == TARGET
    target.source_build_phase.files_references.each do |fileref|
      next unless file_names.include?(fileref.name)
      fileref.build_files.each do |bf|
        # TODO: 元々のsettingsとマージする
        bf.settings = {'COMPILER_FLAGS' => flags}
      end
    end
  end
end

def main
  unity_proj_path = ARGV.shift

  file_names = ARGV.shift.split(',')
  flags = ARGV.shift

  xcproj_path = "#{unity_proj_path}/Unity-iPhone.xcodeproj"

  xcproj = Xcodeproj::Project.new(xcproj_path)
  xcproj.initialize_from_file

  add_compiler_flags(xcproj, file_names, flags)

  xcproj.save
end

main

使い方: ruby add_compiler_flags.rb [xcodeprojパス] "ファイル名,..." "追加するフラグ..."

# Facebookのパッケージを使用しているUnityプロジェクトをBuildで出力したXcodeのプロジェクトに "-fno-objc-arc" を追加する
$ ruby add_compiler_flags.rb /path/to/unityproj/exported "FbUnityInterface.mm" "-fno-objc-arc"