Como alterar o comando de execução do aplicativo quando iniciado a partir do Dock?


1

No Windows, você pode editar um atalho de aplicativo e alterar o alvo do atalho. Como você faz isso no Mac OS?

Por exemplo, quero alterar meu aplicativo do Google Chrome para fazer o registro detalhado, anexando-o ao comando de execução: --enable-logging --v=1.



Incrível, que responde a minha pergunta, obrigado!
Ben Simmons

Para garantir que esta pergunta seja respondida, @ 0942v8653 você poderia por favor postar uma resposta com um link para o SuperUser e resumir o conteúdo da resposta lá?
tubedogg

Respostas:


1

Você pode usar o Automator ou o AppleScript para criar um aplicativo que inicie o aplicativo com argumentos específicos:

-- Applescript version
do shell script "open -a 'Google Chrome' --args --enable-logging --v=1"

Ou você pode entrar no pacote de aplicativos e modificar o Info.plist, alterando CFBundleExecutable de (por exemplo) "Google Chrome" ao nome de um novo script de wrapper que você coloca no MacOS. Aqui está um script Python que automatiza isso para você (na verdade, ele cria um novo aplicativo com links simbólicos). Execute-o com python linkapp.py<path to actual app> <where to put new app> no terminal. Quando você pergunta se deve criar um script de wrapper, responda y.

( o script está agora no GitHub , mas vou tentar manter este atualizado)

#!/usr/bin/env python

import sys
import os
import shutil
import subprocess
import re

WRAPPER_SCRIPT = '''\
#!/usr/bin/env bash
executable="$(dirname "$0")/%s"

# add flags here.
"$executable" 
'''

def printerr(message):
    sys.stderr.write("\033[1;31m" + message + "\033[0m")

def link_item(item):
    os.symlink(os.path.join(bundle_contents_path, item),
               os.path.join('.', item))

def replace_executable(filename, new_executable):
    old_executable = subprocess.check_output(['defaults', 'read', os.path.abspath(filename), 'CFBundleExecutable'])
    old_executable = old_executable.rstrip()
    subprocess.call(['defaults', 'write', os.path.abspath(filename), 'CFBundleExecutable', new_executable])
    return old_executable


if len(sys.argv) <= 2:
    printerr("Usage: linkapp.py <app-bundle> <new-place>\n")
    exit(1)


bundle_path = os.path.abspath(sys.argv[1])
bundle_contents_path = os.path.join(bundle_path, 'Contents')
new_contents_path = os.path.abspath(os.path.join(sys.argv[2], 'Contents'))
os.makedirs(new_contents_path)

# loop through the app bundle and symlink everything
#                                        (except Resources, MacOS & Info.plist)
os.chdir(new_contents_path)
for i in os.listdir(bundle_contents_path):
    if i.lower() != 'info.plist':
        if i.lower() in ['resources', 'macos']:
            os.makedirs(i)
            for j in os.listdir(os.path.join(bundle_contents_path, i)):
                link_item(os.path.join(i, j))
        else:
            link_item(i)

# just copy Info.plist for easy editing
shutil.copy(os.path.join(bundle_contents_path, 'Info.plist'), new_contents_path)
subprocess.call(['plutil', '-convert', 'xml1', 'Info.plist'])

printerr("Create wrapper script [y/n]? ")
ans = sys.stdin.read(1)
if ans.lower() == 'y':
    os.chdir('MacOS')

    wrapper_script_file = 'run_with_specified_arguments.sh'

    original_executable = replace_executable('../Info.plist', wrapper_script_file)

    with open(wrapper_script_file, 'w') as f:
        f.write(WRAPPER_SCRIPT % original_executable)
    os.chmod(wrapper_script_file, 0755)

    subprocess.call(['open', '-R', wrapper_script_file])
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.