| #!/bin/bash |
| |
| # Helper script to import a flutter p12 identity. |
| # Note: do not enable -x to display expanded values of the variables, as this will leak the passwords. |
| set -e |
| |
| RAW_PASSWORD=$(cat $FLUTTER_P12_PASSWORD) |
| # Only filepath with a .p12 suffix will be recognized |
| mv $FLUTTER_P12 $P12_SUFFIX_FILEPATH |
| |
| # Delete build.keychain if it exists, do no-op if not exist. |
| if /usr/bin/security delete-keychain build.keychain; then |
| : |
| fi |
| # Create build.keychain. |
| /usr/bin/security create-keychain -p '' build.keychain |
| |
| # Retrieve current list of keychains on the search list of current machine. |
| keychains=$(security list-keychains -d user) |
| |
| keychainNames=(); |
| |
| for keychain in $keychains |
| do |
| basename=$(basename "$keychain") |
| keychainName=${basename::${#basename}-4} |
| keychainNames+=("$keychainName") |
| done |
| |
| echo "User keychains on this machine: ${keychainNames[@]}"; |
| |
| # Add keychain name to search list. (FML, took me 5 days to hunt this down) |
| /usr/bin/security -v list-keychains -s "${keychainNames[@]}" build.keychain |
| |
| # Set build.keychain as default. |
| /usr/bin/security default-keychain -s build.keychain |
| |
| # Unlock build.keychain to allow sign commands to use its certs. |
| /usr/bin/security unlock-keychain -p '' build.keychain |
| |
| attempt=0 |
| sleep_time=2 |
| while [ $attempt -lt 3 ]; do |
| /usr/bin/security import $P12_SUFFIX_FILEPATH -k build.keychain -P $RAW_PASSWORD -T $CODESIGN_PATH -T /usr/bin/codesign |
| /usr/bin/security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k '' build.keychain |
| if /usr/bin/security find-identity -v build.keychain | grep 'FLUTTER.IO LLC'; then |
| exit 0 |
| fi |
| sleep $sleep_time |
| attempt=$(( attempt + 1 )) |
| sleep_time=$(( sleep_time * sleep_time )) |
| done |
| exit 1 |