xcodeprojでXcodeのターゲットのCompiler flagsに"-fno-objc-arc"を追加する

2015-01-08

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"