Skip to content

Instantly share code, notes, and snippets.

@xeb
Created July 2, 2013 05:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save xeb/5907008 to your computer and use it in GitHub Desktop.
Save xeb/5907008 to your computer and use it in GitHub Desktop.
A quick script to clean the hierarchy of .xib files as they related to .cs and .designer.cs files
#!/usr/bin/python
import sys, os
import xml.etree.ElementTree as ET
from xml.etree.ElementTree import Element
namespace = "http://schemas.microsoft.com/developer/msbuild/2003"
def find_files_with_ext(extension):
return [f for f in os.listdir('.') if os.path.isfile(f) and os.path.splitext(f)[1] == extension]
def find_ele_in_itemgroup(typestr):
return "{{{0}}}ItemGroup/{{{0}}}{1}".format(namespace, typestr)
def parse_filename_and_base(path):
fname = os.path.basename(path.replace("\\", "/"))
fbasename = fname[:fname.find('.')]
return (fname, fbasename)
if __name__ == "__main__":
csproj_path = find_files_with_ext(".csproj")[0]
print "Parsing %s" % (csproj_path)
ET.register_namespace("", namespace)
tree = ET.parse(csproj_path)
root = tree.getroot()
xibs = root.findall(find_ele_in_itemgroup("InterfaceDefinition"))
for i in xibs:
xib_path = i.attrib["Include"]
xib_name, xib_basename = parse_filename_and_base(xib_path)
code_behinds = root.findall(find_ele_in_itemgroup("Compile"))
for cb in code_behinds:
cs_path = cb.attrib["Include"]
cs_name, cs_basename = parse_filename_and_base(cs_path)
if cs_basename == xib_basename:
lencb = len(cb)
expected_file = "{0}.xib".format(xib_basename)
if lencb == 0:
ele = Element("DependentUpon")
ele.text = expected_file
cb.append(ele)
print "Appending element for %s" % (cs_name)
elif lencb == 1:
if cb[0].text != expected_file:
cb[0].text = expected_file
print "Updating element for %s" % (cs_name)
tree.write(csproj_path)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment