Пример #1
0
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}
Пример #2
0
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