def parse_ipa(ipa_path, app_key): ipa_parser = IPAparser(ipa_path) info = ipa_parser.parseInfo() bundle_id = info['CFBundleIdentifier'] version_name = info['CFBundleShortVersionString'] version_code = info['CFBundleVersion'] icon_keys = filter(lambda i: 'CFBundleIcon' in i, info.keys()) if len(icon_keys): print info[icon_keys[0]] #TODO: implement icons parsing icon_dest = None # icon_dest = os.path.join(os.path.dirname(ipa_path), "%s_icon.png" % app_key) # ipa_parser.saveFileTo(icon_zip_path, icon_dest) build = Build(app_key, version_code, version_name) return {"build": build, "icon_path": icon_dest, "package": bundle_id}
def main(): arguments = docopt(__doc__, version='1.0', options_first=True) ipa = IPAparser(arguments['<IPA>']) InfoPlist = ipa.parseInfo() # # Saving icon files # if arguments['icons']: # Old search icons = InfoPlist.get('CFBundleIconFiles', list()) for icn in icons: icon_path = ipa.findFile(icn) print icon_path ipa.saveFileTo( icon_path, "%s-%s" % (arguments['IPA'].split('/')[-1].split('.')[0], icn)) elif arguments['manifest']: display_name = InfoPlist.get('CFBundleDisplayName') bundle_id = InfoPlist.get('CFBundleIdentifier') bundle_version = InfoPlist.get('CFBundleShortVersionString') ipa_url = arguments['<IPA_URL>'] icon_url = arguments['<ICON_URL>'] manifest_path = 'manifest.plist' if arguments[ '<MANIFEST_FILENAME>'] is None else arguments['<MANIFEST_FILENAME>'] manifest = { 'items': [{ 'assets': [{ 'url': ipa_url, 'kind': 'software-package' }, { 'url': icon_url, 'kind': 'display-image' }, { 'url': icon_url, 'kind': 'full-size-image' }], 'metadata': { 'kind': 'software', 'title': display_name, 'bundle-identifier': bundle_id, 'bundle-version': bundle_version } }], 'custom': 'prova_paolo' } plistlib.writePlist(manifest, manifest_path) else: key_filter = DEFAULT_KEYS if arguments['--keys']: key_filter = arguments['--keys'] if arguments['--all']: d = InfoPlist else: d = dict((k, v) for k, v in InfoPlist.items() if k in key_filter) if arguments['--out'] == 'json': out = json.dumps(d, indent=2) elif arguments['--out'] == 'text': # todo: print list as text in a nicer way out = "\n".join([str(v) for k, v in d.items()]) # todo: other formats?? else: err('Wrong output format: %s' % arguments['--out']) if arguments['FILE']: f = open(arguments['FILE'], "w") f.write(out) f.close() else: print out