void Load (string fileName)
		{
			this.FileName = fileName;
			string fileText = File.ReadAllText (fileName);
			
			//find the raw plist within the .mobileprovision file
			int start = fileText.IndexOf ("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
			int length;
			if (start < 0 || (length = (fileText.IndexOf ("</plist>", start) - start)) < 1)
				throw new Exception ("Did not find XML plist in '" + fileName + "'");
			
			length += "</plist>".Length;
			string rawPlist = fileText.Substring (start, length);
			
			
			var doc = new PlistDocument ();
			doc.LoadFromXml (rawPlist);
			var rootDict = (PlistDictionary) doc.Root;
			
			var prefixes = rootDict["ApplicationIdentifierPrefix"] as PlistArray;
			if (prefixes != null)
				this.ApplicationIdentifierPrefix = prefixes.OfType<PlistString> ().Select (x => x.Value).ToArray ();
			
			var creationDate = rootDict ["CreationDate"] as PlistDate;
			if (creationDate != null)
				this.CreationDate = creationDate.Value;
			
			var devCerts = rootDict ["DeveloperCertificates"] as PlistArray;
			if (devCerts != null)
				this.DeveloperCertificates = devCerts.OfType<PlistData> ().Select (x => new X509Certificate2 (x.Value)).ToArray ();
			
			var entl = rootDict ["Entitlements"] as PlistDictionary;
			if (entl != null)
				this.Entitlements = entl; //string application-identifier, bool get-task-allow, string[] keychain-access-groups
			
			var expirationDate = rootDict ["ExpirationDate"] as PlistDate;
			if (expirationDate != null)
				this.ExpirationDate = expirationDate.Value;
			
			var name = rootDict ["Name"] as PlistString;
			if (name != null)
				this.Name = name.Value;
			
			var provDevs = rootDict.TryGetValue ("ProvisionedDevices") as PlistArray;
			if (provDevs != null)
				this.ProvisionedDevices = provDevs.OfType<PlistString> ().Select (x => x.Value).ToArray ();
			
			var ttl = rootDict ["TimeToLive"] as PlistInteger;
			if (ttl != null)
				this.TimeToLive = ttl.Value;
			
			var uuid = rootDict ["UUID"] as PlistString;
			if (uuid != null)
				this.Uuid = uuid.Value;
			
			var version = rootDict ["Version"] as PlistInteger;
			if (version != null)
				this.Version = version.Value;
		}