public static XibReferencedClass[] ClassesInXib(string xibPath) { var doc = XDocument.Load(new StreamReader(xibPath, Encoding.UTF8)); var classDesc = doc.Root.Descendants().Where(x => x.Name == "object" && x.Attribute("class").Value == "IBPartialClassDescription"); if (classDesc == null) { Console.WriteLine("Xib '{0}' has no class descriptions, perhaps it is post-compiled?", xibPath); return new XibReferencedClass[0]; } Console.WriteLine("Class Count: {0}", classDesc.Count()); var ret = classDesc.Select(root => { var obj = new XibReferencedClass(); obj.Name = root.Elements().Where(x => x.Name == "string" && x.Attribute("key").Value == "className").Single().Value; obj.Actions = root .XPathSelectElements("//object[@class='IBActionInfo']/string[@key='name']") .Select(x => x.Value).ToArray(); return obj; }).ToArray(); return ret; }
public static XibReferencedClass[] ClassesInXib(string xibPath) { var doc = XDocument.Load(new StreamReader(xibPath, Encoding.UTF8)); var classDesc = doc.Root.Descendants().Where(x => x.Name == "object" && x.Attribute("class").Value == "IBPartialClassDescription"); if (classDesc == null) { Console.WriteLine("Xib '{0}' has no class descriptions, perhaps it is post-compiled?", xibPath); return(new XibReferencedClass[0]); } Console.WriteLine("Class Count: {0}", classDesc.Count()); var ret = classDesc.Select(root => { var obj = new XibReferencedClass(); obj.Name = root.Elements().Where(x => x.Name == "string" && x.Attribute("key").Value == "className").Single().Value; obj.Actions = root .XPathSelectElements("//object[@class='IBActionInfo']/string[@key='name']") .Select(x => x.Value).ToArray(); return(obj); }).ToArray(); return(ret); }