#!/usr/bin/python
# coding: utf-8

# credit: https://retifrav.github.io/blog/2018/10/09/macos-convert-png-to-icns/
# Given proper (512x512x300 dpi/1024x1024x300 dpi) .png image, generate
# iconset folder and .icns icon.
# Ported Python 3 specific code to Python 2.7.10 for Apple Python support
# VikingOSX, 2019-04-04, Apple Support Communities, No Warranty at all.

import subprocess
import os
import sys


def main():
    if len(sys.argv) &lt; 2:
        print(&#34;No path to original / hi-res icon provided&#34;)
        raise SystemExit

    if len(sys.argv) &gt; 2:
        print(&#34;Too many arguments&#34;)
        raise SystemExit

    originalPicture = sys.argv[1]
    if not (os.path.isfile(originalPicture)):
        print(&#34;There is no such file: {}\n&#34;.format(sys.argv[1]))
        raise SystemExit

    fname, ext = os.path.splitext(originalPicture)
    destDir = os.path.dirname(originalPicture)
    iconsetDir = os.path.join(destDir, &#34;{}.iconset&#34;.format(fname))
    if not (os.path.exists(iconsetDir)):
        os.mkdir(iconsetDir, 0755)

    class IconParameters():
        width = 0
        scale = 1

        def __init__(self, width, scale):
            self.width = width
            self.scale = scale

        def getIconName(self):
            if self.scale != 1:
                return &#34;icon_{}x{}{}&#34;.format(self.width, self.width, ext)
            else:
                return &#34;icon_{}x{}@2x{}&#34;.format(self.width // 2, self.width // 2,
                                                ext)

    ListOfIconParameters = [
        IconParameters(16, 1),
        IconParameters(16, 2),
        IconParameters(32, 1),
        IconParameters(32, 2),
        IconParameters(64, 1),
        IconParameters(64, 2),
        IconParameters(128, 1),
        IconParameters(128, 2),
        IconParameters(256, 1),
        IconParameters(256, 2),
        IconParameters(512, 1),
        IconParameters(512, 2),
        IconParameters(1024, 1),
        IconParameters(1024, 2)
    ]

    # generate iconset
    for ip in ListOfIconParameters:
        (subprocess.call([&#34;sips&#34;, &#34;-z&#34;, str(ip.width), str(ip.width),
                         originalPicture, &#34;--out&#34;,
                         os.path.join(iconsetDir, ip.getIconName())]))
        # print(&#34;Generated: {}\n&#34;.format(ip.getIconName()))

    # convert iconset to icns file
    (subprocess.call([&#34;iconutil&#34;, &#34;-c&#34;, &#34;icns&#34;, iconsetDir, &#34;-o&#34;,
                     os.path.join(destDir, &#34;{}.icns&#34;.format(fname))]))


if __name__ == &#39;__main__&#39;:
    sys.exit(main())
