rb-appscript を使用して、Xcode プロジェクトにファイルを自動的に追加しようとしています。Ruby や Applescript の経験はあまりありませんが、2 人の人がこれをうまく機能させているようです。
https://github.com/gonzoua/xcs/blob/master/xcs.thor
生成されたソースファイルをXcodeプロジェクトに自動的に追加する
残念ながら、どちらも私には機能しません。グループにファイルを追加することはできますが、ターゲットにファイルを追加すると機能しなくなります。以下は、私にとって機能しない最も単純なコードです。
require 'rubygems'
require 'appscript'
project_path = 'Users:me:Projects:xcode:project:src:AppScaffold.xcodeproj'
project_name = 'AppScaffold'
group_name = 'Classes'
file_name = 'ApplicationDelegate.m'
target_name = 'AppScaffold'
def lookup(sequence, name)
sequence.get.each { |item|
if item.name.get == name
return item
end
}
raise Exception.new("Couldn't find name '" + name + "' in sequence " + sequence.inspect)
end
app = Appscript.app('Xcode')
app.open(project_path)
project = lookup(app.projects, project_name)
target = lookup(project.targets, target_name)
group = lookup(project.root_group.item_references, group_name)
file = lookup(group.item_references, file_name)
file.add({:to => target})
# I also tried this:
# app.add(file, {:to => target})
次のメッセージが表示されて失敗します:
/Library/Ruby/Gems/1.8/gems/rb-appscript-0.6.1/lib/appscript.rb:542:in `_send_command': CommandError (Appscript::CommandError)
OSERROR: -1708
MESSAGE: Application could not handle this command.
COMMAND: app("/Developer/Applications/Xcode.app").workspace_documents["project.xcworkspace"].projects["AppScaffold"].root_group.Xcode_3_groups.ID("080E96DDFE201D6D7F000001").Xcode_3_file_references.ID("1D3623250D0F684500981E51").add({:to=>app("/Developer/Applications/Xcode.app").workspace_documents["project.xcworkspace"].projects["AppScaffold"].targets.ID("1D6058900D05DD3D006BFB54")})
from /Library/Ruby/Gems/1.8/gems/rb-appscript-0.6.1/lib/appscript.rb:642:in `method_missing'
from add_to_target.rb:28
私は Xcode 4 を使用していますが、プロジェクトには「Xcode_3_references」があるようです。これは、最初から作成したプロジェクトでも同じです。理由はわかりません。
とにかく、このエラー メッセージをどう解釈したらよいか、また、これに関するドキュメントをどこで見つければよいかわかりません。(Xcode 辞書を調べましたが、「add」についてはあまり説明がありませんでした。) アドバイスをいただければ幸いです。私は rb-appscript にこだわっているわけではなく、プログラムによってプロジェクトにファイルを追加したいだけです。
ベストアンサー1
あなたが何をしようとしているのか、Mac 用と iOS 用のどちらをビルドしているのか、100% はわかりません。そのため、あまりお役に立てるかどうかわかりません。ビルドでコンパイルするのではなく、バンドルするためにプロジェクトにファイルを追加しようとしているだけであれば、これをコード化する必要はありません。代わりに、左側のパネルのファイル リストの上部にあるプロジェクトをクリックし、メイン ウィンドウで対象のバンドルをクリックします。すると、上部に「概要 - 情報 - ビルド設定 - ビルド フェーズ - ビルド ルール」のオプションが並んだ画面が表示されます。ビルド フェーズをクリックし、下のリストからバンドル リソースのコピーを選択します。次に、このリストの下部にある + 記号をクリックし、ビルド中にバンドルにコピーするファイルを選択します。
とはいえ、ファイルをプログラムで追加する必要がある場合、質問に答えるには私よりも上級のユーザーが必要です。しかし、考えてみると、ファイルのタイプ、ファイルの取得元、iPhone でこれを行うために必要な権限によって異なると思います。OSX 用にビルドしている場合は、未知の領域にいることになりますので、このアドバイスはおそらくあまり役に立ちません。