diff --git a/mobile_provision.py b/mobile_provision.py index 7e064be..71ab05b 100644 --- a/mobile_provision.py +++ b/mobile_provision.py @@ -42,24 +42,32 @@ def set_from_provision_file(self, provision_file_path): ) provision_dict = None - with open(provision_file_path) as provision_file: - provision_data = provision_file.read() - - start_tag = '' - stop_tag = '' - - try: - start_index = provision_data.index(start_tag) - stop_index = provision_data.index( - stop_tag, start_index + len(start_tag) - ) + len(stop_tag) - except ValueError: - raise MobileProvisionReadException( - 'This is not a valid mobile provision file' - ) - - plist_data = provision_data[start_index:stop_index] - provision_dict = plistlib.readPlistFromString(plist_data) + provision_data = None + fileName, fileExtension = os.path.splitext(provision_file_path) + if fileExtension == ".ipa": + import zipfile + with zipfile.ZipFile(provision_file_path, 'r') as ipa: + provision_zipinfo = filter(lambda info : info.filename.endswith('embedded.mobileprovision'), ipa.infolist())[0] + provision_data = ipa.read(provision_zipinfo) + else: + with open(provision_file_path) as provision_file: + provision_data = provision_file.read() + + start_tag = '' + stop_tag = '' + + try: + start_index = provision_data.index(start_tag) + stop_index = provision_data.index( + stop_tag, start_index + len(start_tag) + ) + len(stop_tag) + except ValueError: + raise MobileProvisionReadException( + 'This is not a valid mobile provision file' + ) + + plist_data = provision_data[start_index:stop_index] + provision_dict = plistlib.readPlistFromString(plist_data) self.name = provision_dict['Name'] self.uuid = provision_dict['UUID']