#!/bin/sh set -e usage() { cat </dev/null 2>&1; then echo "iconutil failed and perl is not available for the fallback icns writer" >&2 exit 1 fi echo "iconutil rejected the iconset; writing icns directly" >&2 perl - "$icns" "$iconset" <<'PERL' use strict; use warnings; my ($icns, $iconset) = @ARGV; my @icons = ( [ 'icp4', "$iconset/icon_16x16.png" ], [ 'ic11', "$iconset/icon_16x16\@2x.png" ], [ 'icp5', "$iconset/icon_32x32.png" ], [ 'ic12', "$iconset/icon_32x32\@2x.png" ], [ 'ic07', "$iconset/icon_128x128.png" ], [ 'ic13', "$iconset/icon_128x128\@2x.png" ], [ 'ic08', "$iconset/icon_256x256.png" ], [ 'ic14', "$iconset/icon_256x256\@2x.png" ], [ 'ic09', "$iconset/icon_512x512.png" ], [ 'ic10', "$iconset/icon_512x512\@2x.png" ], ); my $body = ''; for my $icon (@icons) { my ($type, $path) = @$icon; open my $fh, '<:raw', $path or die "$path: $!"; local $/; my $png = <$fh>; $body .= $type . pack('N', length($png) + 8) . $png; } open my $out, '>:raw', $icns or die "$icns: $!"; print {$out} 'icns' . pack('N', length($body) + 8) . $body; PERL fi