为构建脚本解析xcodebuild -showsdks

时间:2014-09-25 13:36:44

标签: xcode bash sdk automation xcodebuild

我正在为构建自动化编写构建脚本。

我想要在不同版本的Xcode下运行构建脚本。 (例如,6,5.1.1,6.1b)。

但是,每个都会为-showsdks显示不同的列表,因此可用的sdk可能是。

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

不依靠文字改变体操...... 有没有办法在运行时以易于解析的格式获取此信息? (例如,XML在这里会很棒)。

1 个答案:

答案 0 :(得分: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