xcodeproj工程配置腳本化

最近有需求用腳本實(shí)現(xiàn)工程的配置特愿,現(xiàn)記錄一下,實(shí)用的是Xcodeproj來(lái)實(shí)現(xiàn)修改配置。我們的庫(kù)是c++寫(xiě)的蜘矢,依賴(lài)了openssl等庫(kù),需要添加路徑依賴(lài)

1.安裝xcodeproj

[sudo] gem install xcodeproj

2.xcodeproj在工程添加group并引入xx.h和xx.m文件

#添加group
require 'xcodeproj'
 
#獲取target名字
$target_name
file_path=Dir::pwd
aDir=Dir::entries(file_path)
aDir.each do |dir_file|
    if dir_file.include?('xcodeproj')
        $target_name= dir_file.split('.')[0]
    end
end
#工程路徑
$path = File.join(File.dirname(__FILE__), "#{$target_name}.xcodeproj")
puts "獲得當(dāng)前文件的目錄 = #{$path} "
#獲取project
$project = Xcodeproj::Project.open($path)
puts "當(dāng)前project = #{$project} "

#獲取target
$target = $project.targets.first
puts "當(dāng)前target = #{$target} "
$group = $project.main_group.find_subpath(File.join('Vigame'), true)
$group.clear
puts "當(dāng)前group = #{$group} "
$group.set_source_tree('SOURCE_ROOT')

$project.save

3.添加HEADER_SEARCH_PATHS設(shè)置

$target.build_configurations.each do |config|
   nums = Array["\"$(SRCROOT)/Vigame/include\"","\"$(SRCROOT)/Vigame/deps/curl/include/ios\"", "\"$(SRCROOT)/Vigame/deps/openssl/include/ios\"", "\"$(SRCROOT)/Vigame/deps/zlib/include/linux\"", "\"$(SRCROOT)/Vigame/deps/boost/include\""]
   paths = config.build_settings['HEADER_SEARCH_PATHS']
 paths.concat(nums)
 config.build_settings['HEADER_SEARCH_PATHS'] = paths.uniq
 puts config.build_settings['HEADER_SEARCH_PATHS']
 end

4.添加LIBRARY_SEARCH_PATHS設(shè)置

$target.build_configurations.each do |config|
   nums = Array["\"$(SRCROOT)/Vigame\""]
   paths = config.build_settings['LIBRARY_SEARCH_PATHS']

   paths.concat(nums)
   
   config.build_settings['LIBRARY_SEARCH_PATHS'] = paths.uniq
   
   puts "LIBRARY_SEARCH_PATHS設(shè)置成功 "
   
end

5综看、添加其他設(shè)置

$target.build_configurations.each do |config|

   config.build_settings['ENABLE_BITCODE'] = 'NO'
   config.build_settings['ENABLE_BITCODE'] = 'NO'
   config.build_settings['GCC_C_LANGUAGE_STANDARD'] = 'gnu11'
   config.build_settings['CLANG_CXX_LANGUAGE_STANDARD'] = 'gnu++14'
   config.build_settings['GCC_ENABLE_CPP_RTTI'] = 'YES'
   config.build_settings['GCC_ENABLE_OBJC_EXCEPTIONS'] = 'YES'
   config.build_settings['CODE_SIGN_STYLE'] = 'Manual'
   config.build_settings['DEVELOPMENT_TEAM'] = 'xxx'
   config.build_settings['PRODUCT_BUNDLE_IDENTIFIER'] = 'com.xx.xx.xx'
   if config.name == "Release"
       config.build_settings['PROVISIONING_PROFILE_SPECIFIER'] = 'xxx'
        config.build_settings['CODE_SIGN_IDENTITY'] = 'iPhone Distribution'
       config.build_settings['CODE_SIGN_IDENTITY[sdk=iphoneos*]'] = 'iPhone Distribution'
   else
       config.build_settings['PROVISIONING_PROFILE_SPECIFIER'] = 'xxx'
       config.build_settings['CODE_SIGN_IDENTITY'] = 'iPhone Developer'
       config.build_settings['CODE_SIGN_IDENTITY[sdk=iphoneos*]'] = 'iPhone Developer'
   end
end
puts "其他設(shè)置成功 "

6.添加.h,m文件

$file_refs = []
$file_path3 = File.join(File.dirname(__FILE__), "xxx.h")
$file_path4 = File.join(File.dirname(__FILE__), "xxx.mm")
if $group.find_file_by_path($file_path3)
    puts "xx.h已添加"
else
    $file_refs << $group.new_reference($file_path3)
end
if $group.find_file_by_path($file_path4)
    puts "xx.mm已添加"
else
    $file_refs << $group.new_reference($file_path4)
end

$target.add_file_references($file_refs)
$target.source_build_phase.remove_file_reference($file_refs)
$target.headers_build_phase.remove_file_reference($file_refs)

$file_path7 = File.join(File.dirname(__FILE__), "xx.plist")
if $group.find_file_by_path($file_path7)
    puts "xxx.plist已添加"
else
    $target.resources_build_phase.add_file_reference($group.new_reference($file_path7))
end

end

6.添加xx.a的引用(bundle品腹,framework)

$file_path2 = File.join(File.dirname(__FILE__), "xxx/xxx.a")
    
#先移除.a
$file_ref = $project.frameworks_group.new_file($file_path2)
$target.frameworks_build_phases.remove_file_reference($file_ref)
$project.frameworks_group.remove_reference($file_ref)
#再添加.a
$target.frameworks_build_phases.add_file_reference($file_ref)

#添加xx.framework的引用
#file_ref = project.frameworks_group.new_file('xxPath/xx.framework')
#target.frameworks_build_phases.add_file_reference(file_ref)

#添加xx.bundle的引用
#file_ref = project.frameworks_group.new_file('xxPath/xx.bundle')
#target.resources_build_phase.add_file_reference(file_ref)

 #添加.plist
$target.resources_build_phase.add_file_reference($group.new_reference($file_path8))

7.通過(guò)xcodeproj設(shè)置證書(shū)

$target.build_configurations.each do |config|
  if config.name == 'Debug'
    config.build_settings["PROVISIONING_PROFILE_SPECIFIER"] = "xxProfileName"
    config.build_settings["DEVELOPMENT_TEAM"] = "xxTeamName"
    config.build_settings["CODE_SIGN_IDENTITY"] = "xxIdentityName"
    config.build_settings["CODE_SIGN_IDENTITY[sdk=iphoneos*]"] = "iPhone Developer"
  end
end

##8.添加系統(tǒng)庫(kù)(framework、tbd) 現(xiàn)已修復(fù)
Xcodeprj提供的添加方式有問(wèn)題:target.add_system_framework(),問(wèn)題是路徑有問(wèn)題導(dǎo)致的

sys_path = "Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Metal.framework"
sys_group = $project.frameworks_group()
unless ref = sys_group.find_file_by_path(sys_path)
  ref = sys_group.new_file(sys_path, :developer_dir)
end
$target.frameworks_build_phase.add_file_reference(ref, true)
ref

$target.add_system_library_tbd("sqlite3.0")

9.參考文檔

Xcodeproj
項(xiàng)目工程的配置庫(kù)xcodeproj
iOS自動(dòng)打包之xcodeproj
http://www.rubydoc.info/gems/xcodeproj/Xcodeproj

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末红碑,一起剝皮案震驚了整個(gè)濱河市舞吭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖镣典,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件兔毙,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡兄春,警方通過(guò)查閱死者的電腦和手機(jī)澎剥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)赶舆,“玉大人哑姚,你說(shuō)我怎么就攤上這事∥咭穑” “怎么了叙量?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)九串。 經(jīng)常有香客問(wèn)我绞佩,道長(zhǎng),這世上最難降的妖魔是什么猪钮? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任品山,我火速辦了婚禮,結(jié)果婚禮上烤低,老公的妹妹穿的比我還像新娘肘交。我一直安慰自己,他們只是感情好扑馁,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布涯呻。 她就那樣靜靜地躺著,像睡著了一般腻要。 火紅的嫁衣襯著肌膚如雪复罐。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,365評(píng)論 1 302
  • 那天闯第,我揣著相機(jī)與錄音市栗,去河邊找鬼。 笑死咳短,一個(gè)胖子當(dāng)著我的面吹牛填帽,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播咙好,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼篡腌,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了勾效?” 一聲冷哼從身側(cè)響起嘹悼,我...
    開(kāi)封第一講書(shū)人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤叛甫,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后杨伙,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體其监,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年限匣,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了抖苦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡米死,死狀恐怖锌历,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情峦筒,我是刑警寧澤究西,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站物喷,受9級(jí)特大地震影響卤材,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜峦失,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一商膊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧宠进,春花似錦、人聲如沸藐翎。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)吝镣。三九已至堤器,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間末贾,已是汗流浹背闸溃。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留拱撵,地道東北人辉川。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像拴测,于是被迫代替她去往敵國(guó)和親乓旗。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354