2014-09-25 86 views
0

我正在爲構建自動化編寫構建腳本。爲構建腳本解析xcodebuild -showsdks

我打算在不同版本的Xcode下運行構建腳本。 (例如6,5.1.1,6.1b)。

但是,它們中的每一個都會爲-showsdks顯示不同的列表,因此可用的sdk可能會是。

  • -sdk iphoneos8.1
  • -sdk iphoneos8.0
  • -sdk iphoneos7.1
  • -sdk iphoneos7.0
  • 等...

沒有求助於到文本摧毀體操... 有沒有什麼辦法讓這個信息在運行時容易解析格式? (例如XML在這裏會很棒)。

回答

1

不,不可能更改此命令的輸出格式。但輸出總是採用相同的格式,因此解析並不像您想象的那樣困難。

例如使用這個簡單的Python腳本:

#!/usr/bin/env python 

import re 
import subprocess 

sdk_header_pattern = re.compile("^.*SDKs:$") 
sdk_switch_pattern = re.compile("^.*(-sdk)\s[a-z]+\d+\.\d+$") 

def run_command(cmd): 
    return subprocess.Popen(cmd, 
          stdout=subprocess.PIPE, 
          stderr=subprocess.PIPE, 
          stdin=subprocess.PIPE).communicate() 

input = run_command(['xcodebuild', '-showsdks'])[0] # take first element of returned tuple 
sdks = {} 
in_sdk = False 
platform = '' 

for e in input.split('\n'): 
    if sdk_header_pattern.match(e) and not in_sdk: 
     in_sdk = True 
     platform = e[0:e.rfind(' ')] 
     sdks[platform] = [] 
    if in_sdk and sdk_switch_pattern.match(e): 
     sdk = e.split(' ')[-1] 
     sdks[platform].append(sdk) 
    if in_sdk and e == '': 
     in_sdk = False 
     del platform 

for k,v in sdks.iteritems(): 
    print 'Platform: ', k 
    for e in v: 
     print '\t', e 
    print