177 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			177 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/env bash
 | 
						|
# See https://developer.apple.com/library/ios/qa/qa1686/_index.html
 | 
						|
cd "${BASH_SOURCE%/*}"
 | 
						|
source bashlib
 | 
						|
trap 'echo >&2 "ERROR: $?: $BASH_COMMAND"' ERR
 | 
						|
set -eE
 | 
						|
cd ..
 | 
						|
export PATH+=:/usr/local/bin
 | 
						|
 | 
						|
# icons format: [pixel size]@[scale]@[idiom]@[os]:[filename] -- if os is "anything lower", omit it
 | 
						|
icons=(
 | 
						|
# Mac
 | 
						|
    16@1@mac@:
 | 
						|
    32@2@mac@:
 | 
						|
    32@1@mac@:
 | 
						|
    64@2@mac@:
 | 
						|
    128@1@mac@:
 | 
						|
    256@2@mac@:
 | 
						|
    256@1@mac@:
 | 
						|
    512@2@mac@:
 | 
						|
    512@1@mac@:
 | 
						|
    1024@2@mac@:
 | 
						|
# iPhone
 | 
						|
    180@3@iphone@8.0:Icon-60@3x.png
 | 
						|
    120@3@iphone@8.0:Icon-Small-40@3x.png
 | 
						|
    120@2@iphone@7.0:Icon-60@2x.png
 | 
						|
    80@2@iphone@7.0:Icon-Small-40@2x.png
 | 
						|
#    114@2@iphone@:Icon@2x.png
 | 
						|
    87@3@iphone@:Icon-Small@3x.png
 | 
						|
    58@2@iphone@:Icon-Small@2x.png
 | 
						|
#    57@1@iphone@:Icon.png
 | 
						|
#    29@1@iphone@:Icon-Small.png
 | 
						|
# iPad
 | 
						|
    76@1@ipad@7.0:Icon-76.png
 | 
						|
    152@2@ipad@7.0:Icon-76@2x.png
 | 
						|
    40@1@ipad@7.0:Icon-Small-40.png
 | 
						|
    80@2@ipad@7.0:Icon-Small-40@2x.png
 | 
						|
    29@1@ipad@:Icon-Small.png
 | 
						|
    58@2@ipad@:Icon-Small@2x.png
 | 
						|
#    72@1@ipad@:Icon-72.png
 | 
						|
#    144@2@ipad@:Icon-72@2x.png
 | 
						|
#    50@1@ipad@:Icon-Small-50.png
 | 
						|
#    100@2@ipad@:Icon-Small-50@2x.png
 | 
						|
)
 | 
						|
# splashes format: [size name]@[scale]@[idiom]@[os] -- if scale is 1, omit it.  if os is "anything lower", omit it
 | 
						|
splashes=(
 | 
						|
    414-736@3@iphone@8.0
 | 
						|
    375-667@2@iphone@8.0
 | 
						|
    320-568@2@iphone@7.0
 | 
						|
    320-568@2@iphone@
 | 
						|
    320-480@2@iphone@7.0
 | 
						|
    320-480@2@iphone@
 | 
						|
    320-480@@iphone@
 | 
						|
)
 | 
						|
 | 
						|
copyImage() {
 | 
						|
    local src=$1 dst=$2
 | 
						|
 | 
						|
    if [[ $src = *.9.png || $src = *.9@*.png ]]; then
 | 
						|
        pinf '%s -> %s (ninepatch)' "${src##*/}" "${dst##*/}"
 | 
						|
            niftyNinePatch=$(java -Dapple.awt.UIElement=true -jar Scripts/NiftyNinePatchHelper.jar "$src" "$dst") || return
 | 
						|
            while IFS='=' read var value; do
 | 
						|
                [[ $var = imageMode ]] && value=${value#'"resize:'} value=${value%'"'} && IFS=, read capLeft capWidth capRight capTop _ _ _ capHeight _ _ _ capBottom <<< "$value"
 | 
						|
                [[ $var = padding ]] && IFS=, read paddingTop paddingRight paddingBottom paddingLeft <<< "${value//[px\"]}"
 | 
						|
                uinf 'caps: [%d, %d, %d, %d], padding: [%d, %d, %d, %d]' "$capTop" "$capRight" "$capBottom" "$capLeft" "$paddingTop" "$paddingRight" "$paddingBottom" "$paddingLeft"
 | 
						|
                printf ',"resizing":{"capInsets":{"bottom":%d,"left":%d,"right":%d,"top":%d},"center":{"height":%d,"mode":"fill","width":%d},"mode":"9-part"}' \
 | 
						|
                    "$capBottom" "$capLeft" "$capRight" "$capTop" "$capHeight" "$capWidth"
 | 
						|
            done <<< "$niftyNinePatch"
 | 
						|
        fnip
 | 
						|
    else
 | 
						|
        pinf '%s -> %s' "${src##*/}" "${dst##*/}"
 | 
						|
            cp "$src" "$dst"
 | 
						|
        fnip
 | 
						|
    fi
 | 
						|
}
 | 
						|
 | 
						|
xcassets=Resources/Media/Images.xcassets
 | 
						|
appiconset="$xcassets/AppIcon.appiconset"
 | 
						|
launchimage="$xcassets/LaunchImage.launchimage"
 | 
						|
ios_icon=Resources/Media/ios/icon
 | 
						|
ios_launch=Resources/Media/ios/launch
 | 
						|
mac_icon=Resources/Media/mac/icon
 | 
						|
 | 
						|
if [[ "$(latest "$ios_icon"/*)" -nt "$appiconset/Contents.json" ]] ||
 | 
						|
   [[ "$(latest "$mac_icon"/*)" -nt "$appiconset/Contents.json" ]]; then
 | 
						|
    rm -rf "$appiconset"; mkdir -p "$appiconset"
 | 
						|
    {
 | 
						|
        comma=
 | 
						|
        printf '{"images":['
 | 
						|
        for icon in "${icons[@]}"; do
 | 
						|
            IFS=: read icon filename <<< "$icon"
 | 
						|
            IFS=@ read px scale idiom os <<< "$icon"
 | 
						|
            pt=$(( px / scale ))
 | 
						|
 | 
						|
            suffix=
 | 
						|
            [[ $scale != 1 ]] && suffix=@${scale}x
 | 
						|
            [[ $filename ]] || filename="icon_${pt}x${pt}${suffix}.png"
 | 
						|
            source=$ios_icon/$filename
 | 
						|
            if [[ ! -e $source ]]; then
 | 
						|
                source=$mac_icon/$filename
 | 
						|
                [[ -e $source ]] || ftl 'No icon for: %s' "$filename"
 | 
						|
            fi
 | 
						|
 | 
						|
            imageProps=$(copyImage "$source" "$appiconset/$filename")
 | 
						|
            printf '%s{"size":"%dx%d","filename":"%s","scale":"%sx"' \
 | 
						|
                "$comma" "$pt" "$pt" "$filename" "$scale"
 | 
						|
            [[ $idiom ]] && printf ',"idiom":"%s"' "$idiom"
 | 
						|
            [[ $os ]] && printf ',"minimum-system-version":"%s"' "$os"
 | 
						|
            [[ $imageProps ]] && printf '%s' "$imageProps"
 | 
						|
            printf '}'
 | 
						|
 | 
						|
            comma=,
 | 
						|
        done
 | 
						|
        printf '],"info":{"version":1,"author":"genassets"},"properties":{"pre-rendered":true}}\n'
 | 
						|
    } > "$appiconset/Contents.json"
 | 
						|
fi
 | 
						|
 | 
						|
if [[ "$(latest "$ios_launch"/*)" -nt "$launchimage/Contents.json" ]]; then
 | 
						|
    rm -rf "$launchimage"; mkdir -p "$launchimage"
 | 
						|
    {
 | 
						|
        comma=
 | 
						|
        printf '{"images":['
 | 
						|
        for splash in "${splashes[@]}"; do
 | 
						|
            IFS=@ read name scale idiom os <<< "$splash"
 | 
						|
            case "$name" in
 | 
						|
                *-568) subtype=retina4 ;;
 | 
						|
                *-667) subtype=667h ;;
 | 
						|
                *-736) subtype=736h ;;
 | 
						|
                *) subtype= ;;
 | 
						|
            esac
 | 
						|
            filename="Default${os:+-$os}${subtype:+-$subtype}${scale:+@${scale}x}${idiom:+~$idiom}.png"
 | 
						|
 | 
						|
            imageProps=$(copyImage "$ios_launch/$name${scale:+@${scale}x}.png" "$launchimage/$filename"); then
 | 
						|
            printf '%s{"extent":"full-screen","filename":"%s","orientation":"portrait","scale":"%sx"' \
 | 
						|
                "$comma" "$filename" "${scale:-1}"
 | 
						|
            [[ $idiom ]] && printf ',"idiom":"%s"' "$idiom"
 | 
						|
            [[ $os ]] && printf ',"minimum-system-version":"%s"' "$os"
 | 
						|
            [[ $subtype ]] && printf ',"subtype":"%s"' "$subtype"
 | 
						|
            [[ $imageProps ]] && printf '%s' "$imageProps"
 | 
						|
            printf '}'
 | 
						|
 | 
						|
            comma=,
 | 
						|
        done
 | 
						|
        printf '],"info":{"version":1,"author":"genassets"}}\n'
 | 
						|
    } > "$launchimage/Contents.json"
 | 
						|
fi
 | 
						|
 | 
						|
#for file in resources/images/mdpi/*.png; do
 | 
						|
#    name=${file##*/} name=${name%.*} name=${name/.9/}
 | 
						|
#    mdpiFile=$file
 | 
						|
#    xhdpiFile=${file%/*/*.*}/xhdpi/${file##*/}
 | 
						|
#    mdpiFilename=$name.png
 | 
						|
#    xhdpiFilename=$name@2x.png
 | 
						|
#
 | 
						|
#    [[ -e "$xcassets/$name.imageset/$mdpiFilename" && $mdpiFile -ot "$xcassets/$name.imageset/$mdpiFilename" &&
 | 
						|
#        -e "$xcassets/$name.imageset/$xhdpiFilename" && $xhdpiFile -ot "$xcassets/$name.imageset/$xhdpiFilename" ]] && continue
 | 
						|
#    rm -rf "$xcassets/$name.imageset"; mkdir -p "$xcassets/$name.imageset"
 | 
						|
#
 | 
						|
#    {
 | 
						|
#        comma=
 | 
						|
#        printf '{"images":['
 | 
						|
#        if imageProps=$(copyImage "$mdpiFile" "$xcassets/$name.imageset/$mdpiFilename"); then
 | 
						|
#            printf '%s{"idiom":"universal","scale":"1x","filename":"%s"' "$comma" "$mdpiFilename"
 | 
						|
#            [[ $imageProps ]] && printf '%s' "$imageProps"
 | 
						|
#            printf '}'
 | 
						|
#            comma=,
 | 
						|
#        fi
 | 
						|
#        if imageProps=$(copyImage "$xhdpiFile" "$xcassets/$name.imageset/$xhdpiFilename"); then
 | 
						|
#            printf '%s{"idiom":"universal","scale":"2x","filename":"%s"' "$comma" "$xhdpiFilename"
 | 
						|
#            [[ $imageProps ]] && printf '%s' "$imageProps"
 | 
						|
#            printf '}'
 | 
						|
#            comma=,
 | 
						|
#        fi
 | 
						|
#        printf '],"info":{"version":1,"author":"genassets"}}\n'
 | 
						|
#    } > "$xcassets/$name.imageset/Contents.json"
 | 
						|
#done
 |