Tenho estado a portar uma aplicação Java/SWT para Mac OSX e as coisas até têm estado a correr bem (depois de me ter resignado a usar Carbon em vez de Cocoa…). Isto claro, até me passar pela cabeça que precisava de alterar o comportamento do .app que o Product Export Wizard do Eclipse estava a gerar.
Basicamente queria que em vez de ser invocado o executável que lança a JVM fosse primeiro chamado um shell script para fazer umas validações antes de chamar o executável. Pareceu-me que a forma correcta de o fazer seria editar o ficheiro:
Info.plist
dentro do application bundle, nomeadamente a propriedade:
CFBundleExecutable
que como o próprio nome sugere, indica qual é o executável que deve ser lançado quando o utilizador faz duplo-clique na aplicação em causa.
Infelizmente, por muito que alterasse a bendita propriedade, nada. O sistema continuava tranquilamente a invocar o executável. Aparentemente a alteração estava a ser ignorada por algum motivo.
Não foi fácil de encontrar, mas já alguém tinha tentado fazer o mesmo e obtido o mesmo resultado:
Hi,
I’m trying to customize the behavior of certain application bundles by editing the Info.plist preferences. The idea is to change the CFBundleExecutable key to point to a different file. Unfortunately, my changes seem to be ignored. — by Chadrik in Apple Support Forums
E felizmente alguém tinha respondido:
Some of those things are only read at startup or logiin, hence no change will happen until you logout or restart. — by BDAquain Apple Support Forums
Enfim, só foi pena as horas perdidas… as caches são umas gajas lixadas… sobretudo quando não se sabe que elas existem
Mas ainda assim, não há quem me convença que a coisa está mal feita… seria assim tão difícil ao leopardo, no momento em que guarda o ficheirito em cache registar-se na FAM (ou no kqueue que parece ser a alternativa em Mac / BSD…) para receber notificações de alteração?