Rubyを使用してXcodeプロジェクトの作業を自動化する

こんにちは、Habr。 Xcode GUIを使用する必要がないタスクがいくつかあります。 このようなタスクの実行時間は、少なくともXcodeの開始時間まで短縮できます。 1つのプロジェクトで作業する場合、時間の節約は取るに足らないように思えるかもしれませんが、多くのプロジェクトがある場合、それらを編集するプロセスは非常に退屈です。 しかし、最も重要なことは、このアプローチがプロジェクトとの作業を自動化する機会を開くことです。

説明した問題を解決することを目的とする新しいツールについてお話したいと思います。 XcodeProjectは、Xcodeプロジェクトデータの読み取りと変更、プロジェクトのビルド、アーカイブ、およびタスクの自動化に使用できるRuby言語ライブラリです。

画像


設置


ライブラリはgemであり、次のコマンドを使用してターミナルからインストールできます。

gem install xcodeproject 


はじめに


プロジェクトのすべての目標を表示するライブラリを使用する最も簡単な例:

 require 'rubygems' require 'xcodeproject' proj = XcodeProject::Project.new('path/to/example.xcodeproj') proj.read.targets.each do |target| puts target.name end 


最初に、タイプXcodeProject :: Projectのオブジェクトを作成する必要があります。

 proj = XcodeProject::Project.new('path/to/example.xcodeproj') 


または、特定のディレクトリですべてのXcodeプロジェクトを見つけることができます。

 projs = XcodeProject::Project.find('path/to/dir') 


または、指定されたパターンに従って:

 projs = XcodeProject::Project.find('*/**') 


プロジェクトオブジェクトの作成後、データを読み取ることができます。

 data = proj.read p data.target('example').config('Release').build_settings 


または、データを変更します。

 proj.change do |data| data.target('example').config('Release').build_settings['GCC_VERSION'] = 'com.apple.compilers.llvmgcc42' end 


ファイル、グループ、およびディレクトリ


最高レベルのすべてのグループを表示します。

 data.main_group.children.each do |child| p child.name end 


指定されたグループのファイルのみを表示します。

 group = data.group('path/from/main_group') group.files.each do |file| p file.name end 


GroupPathグループはいつでも取得できます。 GroupPathは、プロジェクトルート(プロジェクトのルートはメイングループ、すべてのプロジェクトグループの親である非表示グループ)または現在のグループに相対的なグループへのパスです。

 group.group_path 


ディレクトリは、ファイルシステムで表されるグループです。 それらの場合、FilePath-オブジェクトが関連付けられているディレクトリへのファイルシステム内の実際のパスを取得できます。

 group.total_path 


プロジェクトのルートを基準にしてGroupPathを指定することで、プロジェクトにグループを追加できます。

 data.add_group('path/from/main_group') 


または現在のグループに関連して:

 group.add_group('path/from/current_group') 


プロジェクトにディレクトリを追加するには、FilePathを指定する必要があります。

 data.add_dir('group_path/to/parent', '/file_path/to/dir') group.add_dir('/file_path/to/dir') 


同じ方法でプロジェクトにファイルを追加できます。

 data.add_file('group_path/to/parent', '/file_path/to/file') group.add_file('/file_path/to/file') 


プロジェクトからファイルとグループを削除することもできます。

 data.remove_file('path/from/main_group') data.remove_group('path/from/main_group') group.remove_file('path/from/current_group') group.remove_group('path/from/current_group') 


目標


ターゲットオブジェクトの取得は簡単です。

 target = data.target('example') 


ファイルがプロジェクトに追加されたら、それを使用してターゲットをビルドできます。

 file = main_group.add_file('/file_path/to/file') target.add_source(file) 


次のようにして、アセンブリからファイルを除外できます。

 target.remove_source(file) 


Proctアセンブリ


XcodeProjectはXcodeBuilderを使用してプロジェクトをビルドします。

開始するには、rakefileを作成する必要があります。 単純な場合、次のようになります。

 require 'rubygems' require 'xcodeproject' proj = XcodeProject::Project.new('path/to/example.xcodeproj') XcodeProject::Tasks::BuildTask.new(proj) 


プロジェクトの構築など、多くのタスクが利用可能になりました。 rake -Tを実行すると、タスクの完全なリストを取得できます。

 $ rake -T rake example:archive # Creates an archive build of the specified target(s). rake example:build # Builds the specified target(s). rake example:clean # Cleans the build using the same build settings. rake example:cleanbuild # Builds the specified target(s) from a clean slate. 


ビルドパラメータを変更します。

 XcodeProject::Tasks::BuildTask.new(proj) do |t| t.target = "libexample" t.configuration = "Release" end 


XcodeBuilderの詳細については、ここをクリックしてください

結論として、XcodeProjectプロジェクトに関するいくつかの言葉。 このプロジェクトは開発中であり、Xcodeで提供される機能はごくわずかです。 新しい機会の出現は、それらの本当の移植性に関連するでしょう。 プロジェクトはMITライセンスの下で利用できます。プロジェクトコードは自由に使用できます。 プロジェクトの開発にご協力いただければ幸いです。

githubのプロジェクトアドレス。

Source: https://habr.com/ru/post/J146034/


All Articles