@Afonso Rodrigues
O que você quer dizer que não funciona corretamente? Em que momento é apresentado o erro? Na criação da TRIGGER? No momento do disparo da TRIGGER? Qual erro ORA é apresentado?
Pelo que eu percebi, a TRIGGER deve ser criada no usuário X e o usuário X deve criar o SYNONYM no schema do usuário APP_X. Para criar um SYNONYM em um schema de terceiro, ou seja, em um schema que não é o próprio schema, é necessário ter privilegio de CREATE ANY SYNONYM. Detalhe, isso permite que o usuário possa criar SYNONYM em qualquer schema.
Caso o problema seja falta de privilégio, através de um usuário DBA conceda o privilégio:
GRANT CREATE ANY SYNONYM TO X;
Agora vou deixar minha opinião. Por que o usuário APP_X não é uma copia idêntica do usuário X ? Por que o ambiente de desenvolvimento não é isolado da produção? Isso já resolveria o problema de criação de SYNONYM e daria mais liberdade ao desenvolvedor.
Outra sugestão, o mais indicado é que os ambientes de desenvolvimento, homologação e produção sejam iguais em relação a versão do Oracle Database. Isso evita surpresas ao implantar uma nova versão da aplicação.