рд╣рд╛рдп, рд╣реИрдмреНрд░ред рдРрд╕реЗ рдХрдИ рдХрд╛рд░реНрдп рд╣реИрдВ рдЬрд┐рдирдХреЗ рд▓рд┐рдП Xcode GUI рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдРрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдХрдо рд╕реЗ рдХрдо Xcode рдХреЗ рдкреНрд░рд╛рд░рдВрдн рд╕рдордп рд╕реЗ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХрд┐рд╕реА рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рд╕рдордп рдХреА рдмрдЪрдд рдирдЧрдгреНрдп рд▓рдЧ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдХрдИ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реИрдВ, рддреЛ рдЙрдиреНрд╣реЗрдВ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрд╣реБрдд рдердХрд╛рдК рд╣реЛ рд╕рдХрддреА рд╣реИред рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд, рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреЗ рд╕реНрд╡рдЪрд╛рд▓рди рдХреЗ рдЕрд╡рд╕рд░реЛрдВ рдХреЛ рдЦреЛрд▓рддрд╛ рд╣реИред
рдореИрдВ рдПрдХ рдирдП рдЯреВрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬрд┐рд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╡рд░реНрдгрд┐рдд рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рд╣реИред XcodeProject рдПрдХ рд░реВрдмреА рд▓реИрдВрдЧреНрд╡реЗрдЬ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ Xcode рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдбреЗрдЯрд╛ рдХреЛ рдкрдврд╝рдиреЗ рдФрд░ рдЗрд╕реЗ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ, рдЖрд░реНрдХрд╛рдЗрд╡ рдмрдирд╛рдиреЗ рдФрд░ рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╕реНрдерд╛рдкрдирд╛
рдкреБрд╕реНрддрдХрд╛рд▓рдп рдПрдХ рд░рддреНрди рд╣реИ; рдЖрдк рдЗрд╕реЗ рдЯрд░реНрдорд┐рдирд▓ рд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
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 рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ :: рдкреНрд░реЛрдЬреЗрдХреНрдЯ:
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
рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдПрдБ рд╡реЗ рд╕рдореВрд╣ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреА рдлрд╝рд╛рдЗрд▓ рдкреНрд░рдгрд╛рд▓реА рдкрд░ рджрд░реНрд╢рд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЙрдирдХреЗ рд▓рд┐рдП, рдЖрдк рдлрд╝рд╛рдЗрд▓рдкрд╛рде рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрде рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдСрдмреНрдЬреЗрдХреНрдЯ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред
group.total_path
рдЖрдк GroupPath рдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдЯ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдХреЗ рд╕рдореВрд╣ рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:
data.add_group('path/from/main_group')
рдпрд╛ рд╡рд░реНрддрдорд╛рди рд╕рдореВрд╣ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖:
group.add_group('path/from/current_group')
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдлрд╝рд╛рдЗрд▓рдкрд╛рде рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
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)
рдЕрд╕реЗрдореНрдмрд▓реА рдХреЛ рдкреНрд░реЛрдХреНрдЯ рдХрд░реЗрдВ
XcodeProject рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП XcodeBuilder рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рд░реЗрдХрдлрд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:
require 'rubygems' require 'xcodeproject' proj = XcodeProject::Project.new('path/to/example.xcodeproj') XcodeProject::Tasks::BuildTask.new(proj)
рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдирд┐рд░реНрдорд╛рдг рд╕рд╣рд┐рдд рдХрдИ рдХрд╛рд░реНрдп рдЕрдм рдЙрдкрд▓рдмреНрдз рд╣реИрдВред рд░реЗрдХ-рдЯреА рдЪрд▓рд╛рдХрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдкреВрд░реА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред
$ rake -T rake example:archive
рдмрд┐рд▓реНрдб рдкреИрд░рд╛рдореАрдЯрд░ рдмрджрд▓реЗрдВ:
XcodeProject::Tasks::BuildTask.new(proj) do |t| t.target = "libexample" t.configuration = "Release" end
XcodeBuilder рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП,
рдпрд╣рд╛рдВ рдХреНрд▓рд┐рдХ
рдХрд░реЗрдВ ред
рдЕрдВрдд рдореЗрдВ, XcodeProject рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдХреБрдЫ рд╢рдмреНрджред рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╡рд┐рдХрд╛рд╕ рдЪрд▓ рд░рд╣рд╛ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ Xcode рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдереЛрдбрд╝реА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╣реИред рдирдП рдЕрд╡рд╕рд░реЛрдВ рдХрд╛ рдЙрджреНрднрд╡ рдЙрдирдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреЛрд░реНрдЯреЗрдмрд┐рд▓рд┐рдЯреА рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реЛрдЧрд╛ред рдкрд░рд┐рдпреЛрдЬрдирд╛ рдПрдордЖрдИрдЯреА рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреЗ рддрд╣рдд рдЙрдкрд▓рдмреНрдз рд╣реИ, рдЖрдк рдЕрдкрдиреА рдЗрдЪреНрдЫрд╛рдиреБрд╕рд╛рд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рдорджрдж рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХреА рд╣реИред
рдЧрд┐рдердм рдкрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдкрддрд╛