O que você descreve funciona perfeitamente se for executado na linha de comando, se tiver problemas, suponho que você esteja tentando fazer isso como parte de um script (dica: esse é o tipo de coisa que você quer mencionar em seu questão).
Os scripts são executados em um shell não interativo e, nesse tipo de aliases de shell, não são expandidos. De man bash
:
Aliases are not expanded when the shell is not interactive, unless the
expand_aliases shell option is set using 'shopt'
Então, você tem algumas escolhas. Primeiro, você pode ativar aliases no seu script:
#!/usr/bin/env bash
shopt -s expand_aliases
alias build='xctool.sh'
type -a xctool.sh 2>/dev/null || alias build='xcodebuild'
build -scheme "${APP_SCHEME}" archive
Como alternativa, você pode evitar todos os aliases usando eval
:
#!/usr/bin/env bash
build='xctool.sh'
type -a xctool.sh 2>/dev/null || build='xcodebuild'
$build -scheme ${APP_SCHEME} archive