From cab466f999f507b6f535ce5db298868a3cf3ae5b Mon Sep 17 00:00:00 2001 From: joshaber Date: Tue, 6 Oct 2015 16:14:44 -0400 Subject: [PATCH 01/66] ++crashpad --- vendor/crashpad | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/crashpad b/vendor/crashpad index e6a0d433b0e..cdc8d01d7df 160000 --- a/vendor/crashpad +++ b/vendor/crashpad @@ -1 +1 @@ -Subproject commit e6a0d433b0ee399eecce2bef671794771052ffdb +Subproject commit cdc8d01d7df15d7139729747bff23b96baa28017 From 74be1d5b25cb5b8ceac975f13be7042951e7994d Mon Sep 17 00:00:00 2001 From: joshaber Date: Tue, 6 Oct 2015 16:14:49 -0400 Subject: [PATCH 02/66] ++brightray --- vendor/brightray | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/brightray b/vendor/brightray index c25b9b27845..57bcb55bd48 160000 --- a/vendor/brightray +++ b/vendor/brightray @@ -1 +1 @@ -Subproject commit c25b9b27845a308e6a6a5966dad057d721b1f3d1 +Subproject commit 57bcb55bd4830386d1d499f24064ea8078976167 From 4c3fd3877438dcdd57c83a9d17915e4093fb9d80 Mon Sep 17 00:00:00 2001 From: joshaber Date: Tue, 6 Oct 2015 16:15:03 -0400 Subject: [PATCH 03/66] This now has to be non-nil. --- atom/common/platform_util_mac.mm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/atom/common/platform_util_mac.mm b/atom/common/platform_util_mac.mm index 1aa75effd35..2f9e2b76423 100644 --- a/atom/common/platform_util_mac.mm +++ b/atom/common/platform_util_mac.mm @@ -20,7 +20,7 @@ void ShowItemInFolder(const base::FilePath& full_path) { DCHECK([NSThread isMainThread]); NSString* path_string = base::SysUTF8ToNSString(full_path.value()); if (!path_string || ![[NSWorkspace sharedWorkspace] selectFile:path_string - inFileViewerRootedAtPath:nil]) + inFileViewerRootedAtPath:@""]) LOG(WARNING) << "NSWorkspace failed to select file " << full_path.value(); } From 326af3cbe36fa444e7a6f7ae5bdbbd237b163574 Mon Sep 17 00:00:00 2001 From: joshaber Date: Tue, 6 Oct 2015 16:34:20 -0400 Subject: [PATCH 04/66] Use Xcode 7. --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 4d4cd5dde9f..8b434313899 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,6 +10,7 @@ os: - osx env: - TARGET_ARCH=x64 +osx_image: xcode7 matrix: include: From 871571c65ed7f32034f6fb9fab42d4fd0ddaf707 Mon Sep 17 00:00:00 2001 From: Meyito Date: Tue, 6 Oct 2015 22:09:57 -0500 Subject: [PATCH 05/66] Translations of some of the Electron docs API in Spanish --- docs-translations/es/README.md | 12 +- .../es/api/chrome-command-line-switches.md | 119 ++++++++++++++++++ docs-translations/es/api/process.md | 47 +++++++ docs-translations/es/api/synopsis.md | 47 +++++++ 4 files changed, 219 insertions(+), 6 deletions(-) create mode 100644 docs-translations/es/api/chrome-command-line-switches.md create mode 100644 docs-translations/es/api/process.md create mode 100644 docs-translations/es/api/synopsis.md diff --git a/docs-translations/es/README.md b/docs-translations/es/README.md index 497cc4e05cc..10c1b9fe991 100644 --- a/docs-translations/es/README.md +++ b/docs-translations/es/README.md @@ -10,15 +10,15 @@ ## Tutoriales -* [Introducción](../../docs/tutorial/quick-start.md) -* [Integración con el entorno de escritorio](../../docs/tutorial/desktop-environment-integration.md) -* [Detección del evento en línea/fuera de línea](../../docs/tutorial/online-offline-events.md) +* [Introducción](tutorial/quick-start.md) +* [Integración con el entorno de escritorio](tutorial/desktop-environment-integration.md) +* [Detección del evento en línea/fuera de línea](tutorial/online-offline-events.md) ## API -* [Sinopsis](../../docs/api/synopsis.md) -* [Proceso](../../docs/api/process.md) -* [Parámetros CLI soportados (Chrome)](../../docs/api/chrome-command-line-switches.md) +* [Sinopsis](api/synopsis.md) +* [Proceso](api/process.md) +* [Parámetros CLI soportados (Chrome)](api/chrome-command-line-switches.md) Elementos DOM customizados: diff --git a/docs-translations/es/api/chrome-command-line-switches.md b/docs-translations/es/api/chrome-command-line-switches.md new file mode 100644 index 00000000000..c063869adf9 --- /dev/null +++ b/docs-translations/es/api/chrome-command-line-switches.md @@ -0,0 +1,119 @@ +# Parámetros CLI soportados (Chrome) + +Esta página lista las líneas de comandos usadas por el navegador Chrome que también son +soportadas por Electron. Puedes usar [app.commandLine.appendSwitch][append-switch] para +anexarlas en el script principal de tu aplicación antes de que el evento [ready][ready] del +modulo [app][app] sea emitido: + +```javascript +var app = require('app'); +app.commandLine.appendSwitch('remote-debugging-port', '8315'); +app.commandLine.appendSwitch('host-rules', 'MAP * 127.0.0.1'); + +app.on('ready', function() { + // Your code here +}); +``` + +## --client-certificate=`path` + +Establece el `path` del archivo de certificado del cliente. + +## --ignore-connections-limit=`domains` + +Ignora el límite de conexiones para la lista de `domains` separados por `,`. + +## --disable-http-cache + +Deshabilita la cacheé del disco para las peticiones HTTP. + +## --remote-debugging-port=`port` + +Habilita la depuración remota a través de HTTP en el puerto especificado. + +## --proxy-server=`address:port` + +Usa un servidor proxy especificado, que sobreescribe la configuración del sistema. +Este cambio solo afecta peticiones HTTP y HTTPS. + +## --proxy-pac-url=`url` + +Utiliza el script PAC en la `url` especificada. + +## --no-proxy-server + +No usa un servidor proxy y siempre establece conexiones directas. Anula cualquier +otra bandera de servidor proxy bandera que se pase. + +## --host-rules=`rules` + +Una lista separada por comas de `rules` (reglas) que controlan cómo se asignan los +nombres de host. + +Por ejemplo: + +* `MAP * 127.0.0.1` Obliga a todos los nombres de host a ser asignados a 127.0.0.1 +* `MAP *.google.com proxy` Obliga todos los subdominios google.com a resolverse con + "proxy". +* `MAP test.com [::1]:77` Obliga a resolver "test.com" con un bucle invertido de IPv6. + También obligará a que el puerto de la dirección respuesta sea 77. +* `MAP * baz, EXCLUDE www.google.com` Reasigna todo a "baz", excepto a "www.google.com". + +Estas asignaciones especifican el host final en una petición de red (Anfitrión de la conexión TCP +y de resolución de conexión directa, y el `CONNECT` en una conexión proxy HTTP, y el host final de +la conexión proxy `SOCKS`). + +## --host-resolver-rules=`rules` + +Como `--host-rules` pero estas `rules` solo se aplican al solucionador. + +[app]: app.md +[append-switch]: app.md#appcommandlineappendswitchswitch-value +[ready]: app.md#event-ready + +## --ignore-certificate-errors + +Ignora errores de certificado relacionados. + +## --ppapi-flash-path=`path` + +Asigna la ruta `path` del pepper flash plugin. + +## --ppapi-flash-version=`version` + +Asigna la versión `version` del pepper flash plugin. + +## --log-net-log=`path` + +Permite guardar y escribir eventos de registros de red en `path`. + +## --ssl-version-fallback-min=`version` + +Establece la versión mínima de SSL/TLS ("tls1", "tls1.1" o "tls1.2") que +el repliegue de TLC aceptará. + +## --enable-logging + +Imprime el registro de Chromium en consola. + +Este cambio no puede ser usado en `app.commandLine.appendSwitch` ya que se analiza antes de que la +aplicación del usuario este cargada. + +## --v=`log_level` + +Da el maximo nivel activo de V-logging por defecto; 0 es el predeterminado. Valores positivos +son normalmente usados para los niveles de V-logging. + +Este modificador sólo funciona cuando también se pasa `--enable-logging`. + +## --vmodule=`pattern` + +Da los niveles máximos de V-logging por módulo para sobreescribir el valor dado por +`--v`. Ej. `my_module=2,foo*=3` cambiaria el nivel de registro para todo el código +el archivos de origen `my_module.*` y `foo*.*`. + +Cualquier patron que contiene un slash o un slash invertido será probado contra toda la ruta +y no sólo con el módulo. Ej. `*/foo/bar/*=2` cambiaría el nivel de registro para todo el código +en los archivos origen bajo un directorio `foo/bar`. + +Este modificador sólo funciona cuando también se pasa `--enable-logging`. diff --git a/docs-translations/es/api/process.md b/docs-translations/es/api/process.md new file mode 100644 index 00000000000..e03ef5fa1c3 --- /dev/null +++ b/docs-translations/es/api/process.md @@ -0,0 +1,47 @@ +# process + +El objeto `process` en Electron tiene las siguientes diferencias con respecto +al node convencional: + +* `process.type` String - El tipo del proceso puede ser `browser` (ej. proceso + principal) o `renderer`. +* `process.versions['electron']` String - Versión de Electron. +* `process.versions['chrome']` String - Versión de Chromium. +* `process.resourcesPath` String - Ruta al código fuente JavaScript. + +## Events + +### Event: 'loaded' + +Se emite cuando Electron ha cargado su script de inicialización interna y +está comenzando a cargar la página web o el script principal. + +Puede ser usado por el script precargado para añadir de nuevo los símbolos globales +de Node eliminados, al alcance global cuando la integración de Node está apagada: + +```js +// preload.js +var _setImmediate = setImmediate; +var _clearImmediate = clearImmediate; +process.once('loaded', function() { + global.setImmediate = _setImmediate; + global.clearImmediate = _clearImmediate; +}); +``` + +## Methods + +El objeto `process` tiene los siguientes métodos: + +### `process.hang` + +Interrumpe el hilo principal del proceso actual. + + +### process.setFdLimit(maxDescriptors) _OS X_ _Linux_ + +* `maxDescriptors` Integer + +Establece el límite dinámico del descriptor del archivo en `maxDescriptors` +o en el límite estricto del Sistema Operativo, el que sea menor para el +proceso actual. diff --git a/docs-translations/es/api/synopsis.md b/docs-translations/es/api/synopsis.md new file mode 100644 index 00000000000..0da368dea45 --- /dev/null +++ b/docs-translations/es/api/synopsis.md @@ -0,0 +1,47 @@ +# Synopsis + +Todos los [Módulos integrados de Node.js](http://nodejs.org/api/) se encuentran +disponibles en Electron y módulos de terceros son támbien totalmente compatibles +(incluyendo los [módulos nativos](../tutorial/using-native-node-modules.md)). + +Electron también provee algunos módulos integrados adicionales para desarrollar +aplicaciones nativas de escritorio. Algunos módulos sólo se encuentran disponibles +en el proceso principal, algunos sólo en el proceso renderer (pagina web), y +algunos pueden ser usados en ambos procesos. + +La regla básica es: Si un módulo es +[GUI](https://es.wikipedia.org/wiki/Interfaz_gráfica_de_usuario) o de bajo nivel, +entonces solo estará disponible en el proceso principal. Necesitas familiarizarte +con el concepto de [scripts para proceso principal vs scripts para proceso renderer] +(../tutorial/quick-start.md#the-main-process) para ser capaz de usar esos módulos. + +El script del proceso principal es como un script normal de Node.js: + +```javascript +var app = require('app'); +var BrowserWindow = require('browser-window'); + +var window = null; + +app.on('ready', function() { + window = new BrowserWindow({width: 800, height: 600}); + window.loadUrl('https://github.com'); +}); +``` + +El proceso renderer no es diferente de una página web normal, excepto por la +capacidad extra de utilizar módulos de node: + +```html + + + + + + +``` + +Para ejecutar tu aplicación, lee [Ejecutar la aplicación](../tutorial/quick-start.md#run-your-app). \ No newline at end of file From 821005e6b4d38062fe9c2cd4a6a1eb54d4c3efa2 Mon Sep 17 00:00:00 2001 From: Haojian Wu Date: Wed, 7 Oct 2015 12:15:48 +0800 Subject: [PATCH 06/66] Fix a wrong usage of switch commandline. We should not always save switch path as ascii string, which will not be handled well on Windows. --- atom/app/atom_content_client.cc | 4 ++-- atom/browser/api/atom_api_app.cc | 12 ++++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/atom/app/atom_content_client.cc b/atom/app/atom_content_client.cc index e760c01453d..0931a1b55a4 100644 --- a/atom/app/atom_content_client.cc +++ b/atom/app/atom_content_client.cc @@ -99,7 +99,7 @@ void AtomContentClient::AddAdditionalSchemes( void AtomContentClient::AddPepperPlugins( std::vector* plugins) { auto command_line = base::CommandLine::ForCurrentProcess(); - auto flash_path = command_line->GetSwitchValueNative( + auto flash_path = command_line->GetSwitchValuePath( switches::kPpapiFlashPath); if (flash_path.empty()) return; @@ -108,7 +108,7 @@ void AtomContentClient::AddPepperPlugins( switches::kPpapiFlashVersion); plugins->push_back( - CreatePepperFlashInfo(base::FilePath(flash_path), flash_version)); + CreatePepperFlashInfo(flash_path, flash_version)); } } // namespace atom diff --git a/atom/browser/api/atom_api_app.cc b/atom/browser/api/atom_api_app.cc index 2e7596971f4..70595856c49 100644 --- a/atom/browser/api/atom_api_app.cc +++ b/atom/browser/api/atom_api_app.cc @@ -20,6 +20,7 @@ #include "atom/common/native_mate_converters/callback.h" #include "atom/common/native_mate_converters/file_path_converter.h" #include "atom/common/node_includes.h" +#include "atom/common/options_switches.h" #include "base/command_line.h" #include "base/environment.h" #include "base/files/file_path.h" @@ -27,6 +28,7 @@ #include "brightray/browser/brightray_paths.h" #include "content/public/browser/client_certificate_delegate.h" #include "content/public/browser/gpu_data_manager.h" +#include "content/public/common/content_switches.h" #include "native_mate/dictionary.h" #include "native_mate/object_template_builder.h" #include "net/ssl/ssl_cert_request_info.h" @@ -301,6 +303,16 @@ namespace { void AppendSwitch(const std::string& switch_string, mate::Arguments* args) { auto command_line = base::CommandLine::ForCurrentProcess(); + + if (switch_string == atom::switches::kPpapiFlashPath || + switch_string == atom::switches::kClientCertificate || + switch_string == switches::kLogNetLog) { + base::FilePath path; + args->GetNext(&path); + command_line->AppendSwitchPath(switch_string, path); + return; + } + std::string value; if (args->GetNext(&value)) command_line->AppendSwitchASCII(switch_string, value); From 6f61832a342dce60205df47a0b410ed932192f60 Mon Sep 17 00:00:00 2001 From: Steve Kinney Date: Wed, 7 Oct 2015 09:03:11 -0700 Subject: [PATCH 07/66] :lipstick: Add semicolon to global-shortcut code example This keeps this line consistent with the rest of the documentation. --- docs/api/global-shortcut.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/api/global-shortcut.md b/docs/api/global-shortcut.md index adba06e1adc..fe69881f396 100644 --- a/docs/api/global-shortcut.md +++ b/docs/api/global-shortcut.md @@ -16,7 +16,7 @@ app.on('ready', function() { // Register a 'ctrl+x' shortcut listener. var ret = globalShortcut.register('ctrl+x', function() { console.log('ctrl+x is pressed'); - }) + }); if (!ret) { console.log('registration failed'); From 2978beaeb7fad9a05ffec71ef8256f23ec371f21 Mon Sep 17 00:00:00 2001 From: Steve Kinney Date: Wed, 7 Oct 2015 09:03:46 -0700 Subject: [PATCH 08/66] :lipstick: Add preposition to globalShortcut.unregisterAll() --- docs/api/global-shortcut.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/api/global-shortcut.md b/docs/api/global-shortcut.md index fe69881f396..c9dfb194529 100644 --- a/docs/api/global-shortcut.md +++ b/docs/api/global-shortcut.md @@ -62,4 +62,4 @@ Unregisters the global shortcut of `accelerator`. ### `globalShortcut.unregisterAll()` -Unregisters all the global shortcuts. +Unregisters all of the global shortcuts. From 05f0b5a8a4c7f40cc0b84f27c5f06ce40f0081e2 Mon Sep 17 00:00:00 2001 From: Renato Alencar Date: Wed, 7 Oct 2015 14:11:58 -0300 Subject: [PATCH 09/66] add quick-start guide pt-BR translation --- .../pt-BR/tutorial/quick-start.md | 192 ++++++++++++++++++ 1 file changed, 192 insertions(+) create mode 100644 docs-translations/pt-BR/tutorial/quick-start.md diff --git a/docs-translations/pt-BR/tutorial/quick-start.md b/docs-translations/pt-BR/tutorial/quick-start.md new file mode 100644 index 00000000000..294faaca0e9 --- /dev/null +++ b/docs-translations/pt-BR/tutorial/quick-start.md @@ -0,0 +1,192 @@ +# Introdução + +Electron permite criar aplicações desktop com puro JavaScript através de +um runtime APIs ricas e nativas. Você pode ver isso como uma variação do +runtime do io.js que é focado em aplicações desktop em vez de web servers. + +Isso não significa que o Electron é uma ligação em JavaScript para blibliotécas +de interface gráfica (GUI). Em vez disso, Electron usa páginas web como +interface gráfica, então você pode ver isso também como um navegador Chromium +mínimo, controlado por JavaScript. + +### Processo Principal + +No Electron, o processo que executa o script principal (main) do `package.json` +é chamado __processo principal__. O script que roda no processo principal pode +mostrar uma GUI criando páginas web. + +### Processo Renderizador + +Desde que o Electron usa o Chromium para mostrar as páginas web, a arquitetura +multi-processo do Chromium também é usada. Cada página web no Electron roda em +seu próprio processo, o que é chamado de __processo renderizador__. + +Em navegadores comuns, as páginas web normalmente rodam em um ambiente em sandbox +e não tem permissão de acesso para recursos nativos. Usuários Electron, entretanto, +tem o poder de usar as APIs do io.js nas páginas web, permitindo interações de baixo +nível no sistema operacional. + +### Diferenças Entre o Processo Principal e o Processo Renderizador + +O processo principal cria as páginas web criando instâncias de `BrowserWindow`. +Cada instância de `BrowserWindow` roda a página web em seu próprio processo renderizador. +Quando uma instância de `BrowserWindow` é destruída, o processo renderizador +correspondente também é finalizado. + +O processo principal gerência todas as páginas web de seus processos renderizadores +correspondentes. Cada processo renderizador é isolado e toma conta de sua +respectiva página web. + +Nas páginas web, chamar APIs nativas relacionadas à GUI não é permitido porque +gerênciar recursos de GUI em páginas web é muito perigoso e o fazamento de recursos +se torna fácil. Se você quer realizar operações com GUI em páginas web, o processo +renderizador da página web deve se comunicar com o processo principal para requisitar +que o processo principal realize estas operações. + +No Electron, nós fornecemos o módulo [ipc](../../../docs/api/ipc-renderer.md) para +comunicação entre o processo principal e o processo renderizador. Isso também um +módulo [remoto](../../../docs/api/remote.md) para comunicação RPC. + +## Crie seu Primeiro App Electron + +Geralmente, um app Electron é estruturado assim: + +```text +your-app/ +├── package.json +├── main.js +└── index.html +``` + +O formato de `package.json` é exatamente o mesmo que os dos módulos do Node, e +e o script especificado pelo campo `main` é o script de inicialização do seu app, +que irá executar o processo principal. Um exemplo do seu `package.json` deve parecer +como isso: + +```json +{ + "name" : "your-app", + "version" : "0.1.0", + "main" : "main.js" +} +``` + +__Nota__: Se o campo `main` não estiver presente no `package.jso`, o Electron irá +tentar carregar um `index.js` + +O `main.js` deve criar as janelas e os manipuladores de eventos do sistema, um típico +exemplo: + +```javascript +var app = require('app'); // Módulo para controlar o ciclo de vida do app. +var BrowserWindow = require('browser-window'); // Módulo para criar uma janela nativa do browser. + +// Relate falhas para nossos servidores. +require('crash-reporter').start(); + +// Mantenha uma referência global para o objeto window, se você não o fizer, +// a janela será fechada automaticamente quando o objeto JavaScript for +// coletado pelo garbage collector. +var mainWindow = null; + +// Sair quando todas as janelas estiverem fechadas. +app.on('window-all-closed', function() { + // No OS X é comum para as aplicações na barra de menu + // continuarem ativas até que o usuário saia explicitamente + // com Cmd + Q + if (process.platform != 'darwin') { + app.quit(); + } +}); + +// Esse método irá ser chamado quando o Electron finalizar +// a inicialização e estiver pronto para criar janelas do browser. +app.on('ready', function() { + // Criar a janela do navegador. + mainWindow = new BrowserWindow({width: 800, height: 600}); + + // e carrega o index.html do app. + mainWindow.loadUrl('file://' + __dirname + '/index.html'); + + // Abre os DevTools. + mainWindow.openDevTools(); + + // Emitido quando a janela é fechada. + mainWindow.on('closed', function() { + // Desfaz a referência para o objeto window, normalmente você deverá + // guardar as janelas em um array se seu app suportar várias janelas, + // essa é a hora que você deverá deletar o elemento correspondente. + mainWindow = null; + }); +}); +``` + +Finalmente o `index.html` é a página web que você quer mostrar: + +```html + + + + + Hello World! + + +

Hello World!

+ Nós estamos usando io.js + e Electron . + + +``` + +## Execute seu App + +Uma vez que você criou seus arquivos `main.js`, `index.html, e `package.json` iniciais, +você provavelmente vai querer tentar executar seu app localmente para testa-lo a ter +certeza que funciona como você espera. + +### electron-prebuilt + +Se você instalou `electron-prebuilt` globalmente com `npm`, então você irá precisar apenas +rodar o seguinte comando no diretório fonte do seu app: + +```bash +electron . +``` + +Se você o instalou localmente, então execute: + +```bash +./node_modules/.bin/electron . +``` + +### Binário do Electron Baixado Manualmente + +Se você baixou o Electron manualmente, você pode também usar o binário incluído para +executar seu app diretamente. + +#### Windows + +```bash +$ .\electron\electron.exe your-app\ +``` + +#### Linux + +```bash +$ ./electron/electron your-app/ +``` + +#### OS X + +```bash +$ ./Electron.app/Contents/MacOS/Electron your-app/ +``` + +`Electron.app` aqui é uma parte do pacote de lançamento do Electron, você pode baixa-lo +[aqui](https://github.com/atom/electron/releases). + +### Executar como umas distribuição + +Depois de terminar seu app, você pode criar uma distribuição seguindo o guia +[Application Distribution](./application-distribution.md) e então executar o app +empacotado. From b1ae60a63909d5b700171fd35b2ba0b33e26c7af Mon Sep 17 00:00:00 2001 From: Renato Alencar Date: Wed, 7 Oct 2015 14:24:09 -0300 Subject: [PATCH 10/66] grammar corrections --- docs-translations/pt-BR/tutorial/quick-start.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs-translations/pt-BR/tutorial/quick-start.md b/docs-translations/pt-BR/tutorial/quick-start.md index 294faaca0e9..16c66e9a85d 100644 --- a/docs-translations/pt-BR/tutorial/quick-start.md +++ b/docs-translations/pt-BR/tutorial/quick-start.md @@ -1,7 +1,7 @@ # Introdução Electron permite criar aplicações desktop com puro JavaScript através de -um runtime APIs ricas e nativas. Você pode ver isso como uma variação do +um runtime com APIs ricas e nativas. Você pode ver isso como uma variação do runtime do io.js que é focado em aplicações desktop em vez de web servers. Isso não significa que o Electron é uma ligação em JavaScript para blibliotécas @@ -38,13 +38,13 @@ correspondentes. Cada processo renderizador é isolado e toma conta de sua respectiva página web. Nas páginas web, chamar APIs nativas relacionadas à GUI não é permitido porque -gerênciar recursos de GUI em páginas web é muito perigoso e o fazamento de recursos -se torna fácil. Se você quer realizar operações com GUI em páginas web, o processo +gerênciar recursos de GUI em páginas web é muito perigoso e torna fácil o vazamento de +recursos. Se você quer realizar operações com GUI em páginas web, o processo renderizador da página web deve se comunicar com o processo principal para requisitar que o processo principal realize estas operações. No Electron, nós fornecemos o módulo [ipc](../../../docs/api/ipc-renderer.md) para -comunicação entre o processo principal e o processo renderizador. Isso também um +comunicação entre o processo principal e o processo renderizador. Que é também um módulo [remoto](../../../docs/api/remote.md) para comunicação RPC. ## Crie seu Primeiro App Electron @@ -61,7 +61,7 @@ your-app/ O formato de `package.json` é exatamente o mesmo que os dos módulos do Node, e e o script especificado pelo campo `main` é o script de inicialização do seu app, que irá executar o processo principal. Um exemplo do seu `package.json` deve parecer -como isso: +com isso: ```json { From c7dc901607b2320cdbe2cb6119e6d84a5765a606 Mon Sep 17 00:00:00 2001 From: Jan Wiemers Date: Wed, 7 Oct 2015 23:14:49 +0200 Subject: [PATCH 11/66] add --app parameter and update the example usage in the default_app #1877 --- atom/browser/default_app/index.html | 2 +- atom/browser/default_app/main.js | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/atom/browser/default_app/index.html b/atom/browser/default_app/index.html index 96e45806d5d..b9bdfffc659 100644 --- a/atom/browser/default_app/index.html +++ b/atom/browser/default_app/index.html @@ -58,7 +58,7 @@ + + +``` + +There may be instances where you want to respond to these events in the +main process as well. The main process however does not have a +`navigator` object and thus cannot detect these events directly. Using +Electron's inter-process communication utilities, the events can be forwarded +to the main process and handled as needed, as shown in the following example. + +_main.js_ + +```javascript +var app = require('app'); +var ipc = require('ipc'); +var BrowserWindow = require('browser-window'); +var onlineStatusWindow; + +app.on('ready', function() { + onlineStatusWindow = new BrowserWindow({ width: 0, height: 0, show: false }); + onlineStatusWindow.loadUrl('file://' + __dirname + '/online-status.html'); +}); + +ipc.on('online-status-changed', function(event, status) { + console.log(status); +}); +``` + +_online-status.html_ + +```html + + + + + + +``` From c71efc8ca54b1f7f4de799eca8c0e49bb558c2e7 Mon Sep 17 00:00:00 2001 From: Eran Tiktin Date: Sat, 10 Oct 2015 08:13:27 +0300 Subject: [PATCH 36/66] Fix `process.std*.write` - Support printing Buffer - Don't add '\n' at the end the chunk --- atom/browser/lib/init.coffee | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/atom/browser/lib/init.coffee b/atom/browser/lib/init.coffee index 2b6b1bb3c23..9f92d700c73 100644 --- a/atom/browser/lib/init.coffee +++ b/atom/browser/lib/init.coffee @@ -21,10 +21,15 @@ globalPaths.push path.resolve(__dirname, '..', 'api', 'lib') if process.platform is 'win32' # Redirect node's console to use our own implementations, since node can not # handle console output when running as GUI program. - print = (args...) -> + consoleLog = (args...) -> process.log util.format(args...) + "\n" - console.log = console.error = console.warn = print - process.stdout.write = process.stderr.write = print + streamWrite = (chunk, encoding, callback) -> + chunk = chunk.toString(encoding) if Buffer.isBuffer chunk + process.log chunk + callback() if callback + true + console.log = console.error = console.warn = consoleLog + process.stdout.write = process.stderr.write = streamWrite # Always returns EOF for stdin stream. Readable = require('stream').Readable From df12f181a4311a4ffd08079c4a302bdebf00a5ac Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Sat, 10 Oct 2015 17:43:38 +0800 Subject: [PATCH 37/66] Can not print string16 in wcout on POSIX --- atom/common/api/atom_bindings.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/atom/common/api/atom_bindings.cc b/atom/common/api/atom_bindings.cc index 1a44d1af0a0..8fb2efd3a3f 100644 --- a/atom/common/api/atom_bindings.cc +++ b/atom/common/api/atom_bindings.cc @@ -41,7 +41,7 @@ void FatalErrorCallback(const char* location, const char* message) { } void Log(const base::string16& message) { - std::wcout << message; + std::cout << message; } } // namespace From 6d20d37101f6db3579452df2a63d6a257a1f881b Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Sat, 10 Oct 2015 17:37:25 +0800 Subject: [PATCH 38/66] Bump v0.33.7 --- atom.gyp | 2 +- atom/browser/resources/mac/Info.plist | 2 +- atom/browser/resources/win/atom.rc | 8 ++++---- atom/common/atom_version.h | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/atom.gyp b/atom.gyp index f06a0c8251b..f5933b8631e 100644 --- a/atom.gyp +++ b/atom.gyp @@ -4,7 +4,7 @@ 'product_name%': 'Electron', 'company_name%': 'GitHub, Inc', 'company_abbr%': 'github', - 'version%': '0.33.6', + 'version%': '0.33.7', }, 'includes': [ 'filenames.gypi', diff --git a/atom/browser/resources/mac/Info.plist b/atom/browser/resources/mac/Info.plist index 50e019c1c77..77a5502de1e 100644 --- a/atom/browser/resources/mac/Info.plist +++ b/atom/browser/resources/mac/Info.plist @@ -17,7 +17,7 @@ CFBundleIconFile atom.icns CFBundleVersion - 0.33.6 + 0.33.7 LSMinimumSystemVersion 10.8.0 NSMainNibFile diff --git a/atom/browser/resources/win/atom.rc b/atom/browser/resources/win/atom.rc index b1aba451dcf..39085d2ed8a 100644 --- a/atom/browser/resources/win/atom.rc +++ b/atom/browser/resources/win/atom.rc @@ -56,8 +56,8 @@ END // VS_VERSION_INFO VERSIONINFO - FILEVERSION 0,33,6,0 - PRODUCTVERSION 0,33,6,0 + FILEVERSION 0,33,7,0 + PRODUCTVERSION 0,33,7,0 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -74,12 +74,12 @@ BEGIN BEGIN VALUE "CompanyName", "GitHub, Inc." VALUE "FileDescription", "Electron" - VALUE "FileVersion", "0.33.6" + VALUE "FileVersion", "0.33.7" VALUE "InternalName", "electron.exe" VALUE "LegalCopyright", "Copyright (C) 2015 GitHub, Inc. All rights reserved." VALUE "OriginalFilename", "electron.exe" VALUE "ProductName", "Electron" - VALUE "ProductVersion", "0.33.6" + VALUE "ProductVersion", "0.33.7" VALUE "SquirrelAwareVersion", "1" END END diff --git a/atom/common/atom_version.h b/atom/common/atom_version.h index 8078551b90e..995a6f916b1 100644 --- a/atom/common/atom_version.h +++ b/atom/common/atom_version.h @@ -7,7 +7,7 @@ #define ATOM_MAJOR_VERSION 0 #define ATOM_MINOR_VERSION 33 -#define ATOM_PATCH_VERSION 6 +#define ATOM_PATCH_VERSION 7 #define ATOM_VERSION_IS_RELEASE 1 From 0cd1195eea926a0650dcc77c4141acd5a0b88c8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafael=20Guimar=C3=A3es?= Date: Sat, 10 Oct 2015 13:41:32 -0300 Subject: [PATCH 39/66] online-offline-events.md translated to pt-BR --- .../pt-BR/tutorial/online-offline-events.md | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/docs-translations/pt-BR/tutorial/online-offline-events.md b/docs-translations/pt-BR/tutorial/online-offline-events.md index 88f9a32f2ec..36b45dc00ff 100644 --- a/docs-translations/pt-BR/tutorial/online-offline-events.md +++ b/docs-translations/pt-BR/tutorial/online-offline-events.md @@ -1,7 +1,8 @@ # Online/Offline Event Detection -Online and offline event detection can be implemented in the renderer process -using standard HTML5 APIs, as shown in the following example. +Os eventos de detecão Online e Offile podem ser implementados no processo +de renderização utilizando a API padrão do HTML, como é mostrado no exemplo +a seguir. _main.js_ @@ -36,11 +37,11 @@ _online-status.html_ ``` -There may be instances where you want to respond to these events in the -main process as well. The main process however does not have a -`navigator` object and thus cannot detect these events directly. Using -Electron's inter-process communication utilities, the events can be forwarded -to the main process and handled as needed, as shown in the following example. +Pode haver casos onde você também deseja responder a estes eventos no processo principal. +Mas o processo principal não consegue detectar esses eventos diretamente, pois não possui +um objeto `navigator`. Utilizando a ferramentas para comunicação entre processos, os eventos +podem ser direcionados para o processo principal e manipulados quando necessário. Você +pode ser isto no exemplo abaixo. _main.js_ From 692816f9d257e4ae82902fc68827a64e288ac555 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafael=20Guimar=C3=A3es?= Date: Sat, 10 Oct 2015 14:01:55 -0300 Subject: [PATCH 40/66] online-offline-events.md translated to pt-BR --- docs-translations/pt-BR/README.md | 2 +- .../tutorial/desktop-environment-integration.md | 12 ++++++------ .../pt-BR/tutorial/online-offline-events.md | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/docs-translations/pt-BR/README.md b/docs-translations/pt-BR/README.md index 767a9e72d6f..74923a411c5 100644 --- a/docs-translations/pt-BR/README.md +++ b/docs-translations/pt-BR/README.md @@ -12,7 +12,7 @@ * [Introdução](tutorial/quick-start.md) * [A integração com o ambiente de desenvolvimento](tutorial/desktop-environment-integration.md) -* [Evento de detecção on-line/off-line](../../docs/tutorial/online-offline-events.md) +* [Evento de detecção on-line/off-line](tutorial/online-offline-events.md) ## API - Referencias diff --git a/docs-translations/pt-BR/tutorial/desktop-environment-integration.md b/docs-translations/pt-BR/tutorial/desktop-environment-integration.md index 9c56cabda2a..20a78d32d53 100644 --- a/docs-translations/pt-BR/tutorial/desktop-environment-integration.md +++ b/docs-translations/pt-BR/tutorial/desktop-environment-integration.md @@ -39,7 +39,7 @@ app.clearRecentDocuments(); ### Notas para Windows A fim de ser possível usar estas funcionalidades no Windows, sua aplicação deve -estar registrada como um handler daquele tipo de documento, caso contrário o +estar registrada como um handler daquele tipo de documento, caso contrário, o arquivo não será exibido no JumpList mesmo depois de você ter adicionado isto. Você pode encontrar qualquer coisa sobre o registro da aplicacão em [Application Registration][app-registration]. @@ -51,7 +51,7 @@ linha de comando. ### Notas para OS X Quando um arquivo for requisitado pelo menu de documentos recentes, o evento `open-file` -do módulo `app` deve ser emitido. +do módulo `app` irá ser emitido. ## Dock Menu customizado (OS X) @@ -82,7 +82,7 @@ app.dock.setMenu(dockMenu); ## Tarefas do Usuário (Windows) -No Windows você pode especificar ações customizadas na categoria `Tasks` do JumpList, +No Windows você pode especificar ações customizadas na categoria `Tarefas` do JumpList, esse texto foi copiado do MSDN: > Applications define tasks based on both the program's features and the key @@ -142,7 +142,7 @@ até sua aplicação ser desinstalada. No Windows você pode adicionar uma miniatura na barra de ferramentas com botões específicos para a janela e barra de tarefas para aplicação. Isso provê ao usuário -uma forma de acessar um comando específico da janela sem ser necessário restaurar +uma forma de acessar um comando específico para janela sem ser necessário restaurar ou ativar a janela. Isto é ilustrado no MSDN: @@ -229,8 +229,8 @@ window.setProgressBar(0.5); ## Representação do arquivo na janela (OS X) No OS X, uma janela pode possuir a representação de um arquivo na barra de título, -para que o ícone do arquivo possa ser exibido na barra de título e uma janela seja -exibida quando o usuário usar um Command-Click ou Control-Click no título. +permitindo que ao usuário acionar um Command-Click ou Control-Click sobre o título da janela, +uma pop-up de navegação entre arquivos é exibida. Você também pode inserir um estado de edição na janela para que o ícone do arquivo possa indicar se o documento nesta janela foi modificado. diff --git a/docs-translations/pt-BR/tutorial/online-offline-events.md b/docs-translations/pt-BR/tutorial/online-offline-events.md index 36b45dc00ff..294a62e7a81 100644 --- a/docs-translations/pt-BR/tutorial/online-offline-events.md +++ b/docs-translations/pt-BR/tutorial/online-offline-events.md @@ -41,7 +41,7 @@ Pode haver casos onde você também deseja responder a estes eventos no processo Mas o processo principal não consegue detectar esses eventos diretamente, pois não possui um objeto `navigator`. Utilizando a ferramentas para comunicação entre processos, os eventos podem ser direcionados para o processo principal e manipulados quando necessário. Você -pode ser isto no exemplo abaixo. +pode ver isto no exemplo abaixo. _main.js_ From 4e8db2c3be8f3c9a172fb87ad8739493ab3dfbb1 Mon Sep 17 00:00:00 2001 From: Eran Tiktin Date: Sat, 10 Oct 2015 20:17:08 +0300 Subject: [PATCH 41/66] Go back to using node's console.* and std*.write It seems that whatever issues we had with using the original implementation of node for `console.*` calls and for `process.std*.write` on Windows were solved. So I removed the patch. Tested it with cmd, cygwin and used spawn and exec and everything seems to work (except for colors/ansi escape codes, but that didn't work before anyway). --- atom/browser/lib/init.coffee | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/atom/browser/lib/init.coffee b/atom/browser/lib/init.coffee index 9f92d700c73..67630a1bd6f 100644 --- a/atom/browser/lib/init.coffee +++ b/atom/browser/lib/init.coffee @@ -18,25 +18,6 @@ require path.resolve(__dirname, '..', '..', 'common', 'lib', 'init') globalPaths = Module.globalPaths globalPaths.push path.resolve(__dirname, '..', 'api', 'lib') -if process.platform is 'win32' - # Redirect node's console to use our own implementations, since node can not - # handle console output when running as GUI program. - consoleLog = (args...) -> - process.log util.format(args...) + "\n" - streamWrite = (chunk, encoding, callback) -> - chunk = chunk.toString(encoding) if Buffer.isBuffer chunk - process.log chunk - callback() if callback - true - console.log = console.error = console.warn = consoleLog - process.stdout.write = process.stderr.write = streamWrite - - # Always returns EOF for stdin stream. - Readable = require('stream').Readable - stdin = new Readable - stdin.push null - process.__defineGetter__ 'stdin', -> stdin - # Don't quit on fatal error. process.on 'uncaughtException', (error) -> # Do nothing if the user has a custom uncaught exception handler. From cb903a09c0cd281f2cb934afe981b7a4f37d8bc3 Mon Sep 17 00:00:00 2001 From: Eran Tiktin Date: Sat, 10 Oct 2015 20:44:22 +0300 Subject: [PATCH 42/66] Block all internal logs when running without `--enable-logging` --- atom/app/atom_main_delegate.cc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/atom/app/atom_main_delegate.cc b/atom/app/atom_main_delegate.cc index 6ba1b89837c..639340bcf09 100644 --- a/atom/app/atom_main_delegate.cc +++ b/atom/app/atom_main_delegate.cc @@ -48,8 +48,10 @@ bool AtomMainDelegate::BasicStartupComplete(int* exit_code) { // Only enable logging when --enable-logging is specified. auto command_line = base::CommandLine::ForCurrentProcess(); - if (!command_line->HasSwitch(switches::kEnableLogging)) + if (!command_line->HasSwitch(switches::kEnableLogging)) { settings.logging_dest = logging::LOG_NONE; + logging::SetMinLogLevel(logging::LOG_NUM_SEVERITIES); + } logging::InitLogging(settings); From 6ec184a2ce700489d1dbe3cb87c3c1e59b3f1039 Mon Sep 17 00:00:00 2001 From: "jinhai.wang" Date: Sun, 11 Oct 2015 13:52:06 +0800 Subject: [PATCH 43/66] add new file: ipc-main-process.md --- .../zh-CN/api/ipc-main-process.md | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 docs-translations/zh-CN/api/ipc-main-process.md diff --git a/docs-translations/zh-CN/api/ipc-main-process.md b/docs-translations/zh-CN/api/ipc-main-process.md new file mode 100644 index 00000000000..1655a1aa5b1 --- /dev/null +++ b/docs-translations/zh-CN/api/ipc-main-process.md @@ -0,0 +1,68 @@ +# ipc (主进程) + +在主进程使用`ipc`模块时,`ipc`负责捕获从渲染进程(网页)发送的同步或者是异步消息. + +## 发送消息 + +主进程也可以向渲染进程发送信息,具体可以看[WebContents.send](web-contents.md#webcontentssendchannel-args). + +- 当发送消息的时候,事件名字为'channel'. +- 回复一个同步消息的时候,你需要使用`event.returnValue` +- 回复一个异步消息的时候,使用`event.sender.send(...)` + +下面是一个主进程和渲染进程的通信例子. + +```javascript +// 在主进程中. +var ipc = require('ipc'); +ipc.on('asynchronous-message', function(event, arg) { + console.log(arg); // 打印 "ping" + event.sender.send('asynchronous-reply', 'pong'); +}); + +ipc.on('synchronous-message', function(event, arg) { + console.log(arg); // 打印 "ping" + event.returnValue = 'pong'; +}); +``` + +```javascript +// 在渲染进程(网页). +var ipc = require('ipc'); +console.log(ipc.sendSync('synchronous-message', 'ping')); // 打印 "pong" + +ipc.on('asynchronous-reply', function(arg) { + console.log(arg); // 打印 "pong" +}); +ipc.send('asynchronous-message', 'ping'); +``` + +## 监听消息 + +`ipc`模块有下列几种方法来监听事件. + +### `ipc.on(channel, callback)` + +* `channel` - 事件名称. +* `callback` - 回调函数. + +当事件发生的时候,会传入`callback` `event`和`arg`参数. + +## IPC 事件 + +传入`callback`的`event`对象含有下列方法. + +### `Event.returnValue` + +在同步消息中,设置这个值将会被返回. + +### `Event.sender` + +返回一个可以发送消息的`WebContents`. + +### `Event.sender.send(channel[.arg1][,arg2][,...])` + +* `channel` - 事件名称. +* `arg` (选用) + +这个可以发送一个可带参数的异步消息回渲染进程. From bd95be23f3a8f29208e757564fce880a0f2129f6 Mon Sep 17 00:00:00 2001 From: "jinhai.wang" Date: Sun, 11 Oct 2015 14:56:23 +0800 Subject: [PATCH 44/66] fix docs-translations/zh-CN/api ipc-main-process.md '' -> bug --- docs-translations/zh-CN/api/ipc-main-process.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs-translations/zh-CN/api/ipc-main-process.md b/docs-translations/zh-CN/api/ipc-main-process.md index 1655a1aa5b1..75d5785b2e5 100644 --- a/docs-translations/zh-CN/api/ipc-main-process.md +++ b/docs-translations/zh-CN/api/ipc-main-process.md @@ -6,7 +6,7 @@ 主进程也可以向渲染进程发送信息,具体可以看[WebContents.send](web-contents.md#webcontentssendchannel-args). -- 当发送消息的时候,事件名字为'channel'. +- 当发送消息的时候,事件名字为`channel`. - 回复一个同步消息的时候,你需要使用`event.returnValue` - 回复一个异步消息的时候,使用`event.sender.send(...)` From 36bbf5d51fe249fd02ceef359eb9eeac5d730c62 Mon Sep 17 00:00:00 2001 From: "Philipp A." Date: Sun, 11 Oct 2015 15:18:27 +0200 Subject: [PATCH 45/66] fixed devtools instructions --- docs/tutorial/devtools-extension.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/tutorial/devtools-extension.md b/docs/tutorial/devtools-extension.md index e9466f14b64..20ba7031d8a 100644 --- a/docs/tutorial/devtools-extension.md +++ b/docs/tutorial/devtools-extension.md @@ -16,11 +16,13 @@ $ cd /some-directory $ git clone --recursive https://github.com/facebook/react-devtools.git ``` +Follow the instructions in [`react-devtools/shells/chrome/Readme.md`](https://github.com/facebook/react-devtools/blob/master/shells/chrome/Readme.md) to build the extension. + Then you can load the extension in Electron by opening DevTools in any window, and running the following code in the DevTools console: ```javascript -require('remote').require('browser-window').addDevToolsExtension('/some-directory/react-devtools'); +require('remote').require('browser-window').addDevToolsExtension('/some-directory/react-devtools/shells/chrome'); ``` To unload the extension, you can call the `BrowserWindow.removeDevToolsExtension` From 9419a2ec2c3a6d8e43e5d7c309c6925438a4cf37 Mon Sep 17 00:00:00 2001 From: kokdemo Date: Sun, 11 Oct 2015 22:26:14 +0800 Subject: [PATCH 46/66] translate the application-distrubution.md --- .../tutorial/application-distribution.md | 109 ++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 docs-translations/zh-CN/tutorial/application-distribution.md diff --git a/docs-translations/zh-CN/tutorial/application-distribution.md b/docs-translations/zh-CN/tutorial/application-distribution.md new file mode 100644 index 00000000000..c1fddce15ea --- /dev/null +++ b/docs-translations/zh-CN/tutorial/application-distribution.md @@ -0,0 +1,109 @@ +# 应用部署 + +为了使用Electron部署你的应用程序,你存放应用程序的文件夹需要叫做 `app` 并且需要放在 Electron 的资源文件夹下(在 OS X 中是指 `Electron.app/Contents/Resources/`,在 Linux 和 Windows 中是指 `resources/`) +就像这样: + +在 OS X 中: + +```text +electron/Electron.app/Contents/Resources/app/ +├── package.json +├── main.js +└── index.html +``` + +在 Windows 和 Linux 中: + +```text +electron/resources/app +├── package.json +├── main.js +└── index.html +``` + +然后运行 `Electron.app` (或者 Linux 中的 `electron`,Windows 中的 `electron.exe`), +接着 Electron 就会以你的应用程序的方式启动。`electron` 文件夹将被部署并可以分发给最终的使用者。 + +## 将你的应用程序打包成一个文件 + +除了通过拷贝所有的资源文件来分发你的应用程序之外,你可以可以通过打包你的应用程序为一个 [asar](https://github.com/atom/asar) 库文件以避免暴露你的源代码。 + +为了使用一个 `asar` 库文件代替 `app` 文件夹,你需要修改这个库文件的名字为 `app.asar` , +然后将其放到 Electron 的资源文件夹下,然后 Electron 就会试图读取这个库文件并从中启动。 +如下所示: + +在 OS X 中: + +```text +electron/Electron.app/Contents/Resources/ +└── app.asar +``` + +在 Windows 和 Linux 中: + +```text +electron/resources/ +└── app.asar +``` + +更多的细节请见 [Application packaging](application-packaging.md). + +## 更换名称与下载二进制文件 + +在使用 Electron 打包你的应用程序之后,你可能需要在分发给用户之前修改打包的名字。 + +### Windows + +你可以将 `electron.exe` 改成任意你喜欢的名字,然后可以使用像 +[rcedit](https://github.com/atom/rcedit) 或者[ResEdit](http://www.resedit.net) +编辑它的icon和其他信息。 + +### OS X + +你可以将 `Electron.app` 改成任意你喜欢的名字,然后你也需要修改这些文件中的 +`CFBundleDisplayName`, `CFBundleIdentifier` 以及 `CFBundleName` 字段。 +这些文件如下: + +* `Electron.app/Contents/Info.plist` +* `Electron.app/Contents/Frameworks/Electron Helper.app/Contents/Info.plist` + +你也可以重命名帮助应用程序以避免在应用程序监视器中显示 `Electron Helper`, +但是请确保你已经修改了帮助应用的可执行文件的名字。 + +一个改过名字的应用程序的构造可能是这样的: + +``` +MyApp.app/Contents +├── Info.plist +├── MacOS/ +│   └── MyApp +└── Frameworks/ + ├── MyApp Helper EH.app + | ├── Info.plist + | └── MacOS/ + |    └── MyApp Helper EH + ├── MyApp Helper NP.app + | ├── Info.plist + | └── MacOS/ + |    └── MyApp Helper NP + └── MyApp Helper.app + ├── Info.plist + └── MacOS/ +    └── MyApp Helper +``` + +### Linux + +你可以将 `electron` 改成任意你喜欢的名字。 + +## 通过重编译源代码来更换名称 + +通过修改产品名称并重编译源代码来更换 Electron 的名称也是可行的。 +你需要修改 `atom.gyp` 文件并彻底重编译一次。 + +### grunt打包脚本 + +手动的检查 Electron 代码并重编译是很复杂晦涩的,因此有一个 Grunt任务可以自动自动的处理 +这些内容 [grunt-build-atom-shell](https://github.com/paulcbetts/grunt-build-atom-shell). + +这个任务会自动的处理编辑 `.gyp` 文件,从源代码进行编译,然后重编译你的应用程序的本地 Node 模块以匹配这个新的可执行文件的名称。 From 5ff97c686ab3ef380d0ed02cf6d9f3835cc20335 Mon Sep 17 00:00:00 2001 From: Robo Date: Tue, 13 Oct 2015 01:13:59 +0530 Subject: [PATCH 47/66] nativemate: handle binary types in v8 value conversion --- .../native_mate_converters/v8_value_converter.cc | 11 +++++++++++ .../native_mate_converters/v8_value_converter.h | 3 +++ 2 files changed, 14 insertions(+) diff --git a/atom/common/native_mate_converters/v8_value_converter.cc b/atom/common/native_mate_converters/v8_value_converter.cc index a91e614fc6d..7d3a1277cb8 100644 --- a/atom/common/native_mate_converters/v8_value_converter.cc +++ b/atom/common/native_mate_converters/v8_value_converter.cc @@ -152,6 +152,10 @@ v8::Local V8ValueConverter::ToV8ValueImpl( return ToV8Object(isolate, static_cast(value)); + case base::Value::TYPE_BINARY: + return ToArrayBuffer(isolate, + static_cast(value)); + default: LOG(ERROR) << "Unexpected value type: " << value->GetType(); return v8::Null(isolate); @@ -200,6 +204,13 @@ v8::Local V8ValueConverter::ToV8Object( return result.GetHandle(); } +v8::Local V8ValueConverter::ToArrayBuffer( + v8::Isolate* isolate, const base::BinaryValue* value) const { + return node::Buffer::Copy(isolate, + value->GetBuffer(), + value->GetSize()).ToLocalChecked(); +} + base::Value* V8ValueConverter::FromV8ValueImpl( FromV8ValueState* state, v8::Local val, diff --git a/atom/common/native_mate_converters/v8_value_converter.h b/atom/common/native_mate_converters/v8_value_converter.h index db108ad9b04..2b695b43747 100644 --- a/atom/common/native_mate_converters/v8_value_converter.h +++ b/atom/common/native_mate_converters/v8_value_converter.h @@ -41,6 +41,9 @@ class V8ValueConverter { v8::Local ToV8Object( v8::Isolate* isolate, const base::DictionaryValue* dictionary) const; + v8::Local ToArrayBuffer( + v8::Isolate* isolate, + const base::BinaryValue* value) const; base::Value* FromV8ValueImpl(FromV8ValueState* state, v8::Local value, From b9d838975d0baf4f65ef93ca0efec1305e431ed7 Mon Sep 17 00:00:00 2001 From: Alex Sherwin Date: Mon, 12 Oct 2015 20:17:06 -0400 Subject: [PATCH 48/66] Fixing "tile" -> "title" typo --- docs/tutorial/desktop-environment-integration.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tutorial/desktop-environment-integration.md b/docs/tutorial/desktop-environment-integration.md index 3132edffcc2..78067f3d8a1 100644 --- a/docs/tutorial/desktop-environment-integration.md +++ b/docs/tutorial/desktop-environment-integration.md @@ -223,7 +223,7 @@ window.setProgressBar(0.5); ## Represented File of Window (OS X) On OS X a window can set its represented file, so the file's icon can show in -the title bar and when users Command-Click or Control-Click on the tile a path +the title bar and when users Command-Click or Control-Click on the title a path popup will show. You can also set the edited state of a window so that the file icon can indicate From b9b25180f83ea512fe51533637fb4e2497d11ed0 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Tue, 13 Oct 2015 09:04:10 +0800 Subject: [PATCH 49/66] Update brightray for #2903 --- vendor/brightray | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/brightray b/vendor/brightray index 375436a777a..e3fa861368e 160000 --- a/vendor/brightray +++ b/vendor/brightray @@ -1 +1 @@ -Subproject commit 375436a777a793f4815f38c13a5226fcd82de567 +Subproject commit e3fa861368e5fca1e8680e0206fe7b19288dc473 From d152b25fb638533560da6da3cb9670bc6ab37f23 Mon Sep 17 00:00:00 2001 From: kokdemo Date: Wed, 14 Oct 2015 00:27:17 +0800 Subject: [PATCH 50/66] translate the supported-platforms.md and update the README.md --- .../zh-CN/tutorial/supported-platforms.md | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 docs-translations/zh-CN/tutorial/supported-platforms.md diff --git a/docs-translations/zh-CN/tutorial/supported-platforms.md b/docs-translations/zh-CN/tutorial/supported-platforms.md new file mode 100644 index 00000000000..a819e3a0817 --- /dev/null +++ b/docs-translations/zh-CN/tutorial/supported-platforms.md @@ -0,0 +1,27 @@ +# 支持的平台 + +以下的平台是 Electron 目前支持的: + +### OS X + +对于 OS X 系统仅有64位的二进制文档,支持的最低版本是 OS X 10.8。 + +### Windows + +仅支持 Windows 7 及其以后的版本,之前的版本中是不能工作的。 + +对于 Windows 提供 `x86` 和 `amd64` (x64) 版本的二进制文件。需要注意的是 +`ARM` 版本的 Windows 目前尚不支持. + +### Linux + +预编译的 `ia32`(`i686`) 和 `x64`(`amd64`) 版本 Electron 二进制文件都是在 +Ubuntu 12.04 下编译的,`arm` 版的二进制文件是在 ARM v7(硬浮点 ABI 与 +Debian Wheezy 版本的 NEON)下完成的。 + +预编译二进制文件是否能够运行,取决于其中是否包括了编译平台链接的库,所以只有 Ubuntu 12.04 +可以保证正常工作,但是以下的平台也被正事可以运行 Electron的预编译版本: + +* Ubuntu 12.04 及更新 +* Fedora 21 +* Debian 8 From 644af0800c4024c7e533351ce89587e7260cfd36 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Wed, 14 Oct 2015 09:47:46 +0800 Subject: [PATCH 51/66] Update brightray for atom/brightray#156 --- vendor/brightray | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/brightray b/vendor/brightray index e3fa861368e..d5ca8556a65 160000 --- a/vendor/brightray +++ b/vendor/brightray @@ -1 +1 @@ -Subproject commit e3fa861368e5fca1e8680e0206fe7b19288dc473 +Subproject commit d5ca8556a65e37575fc39e2b394fa62401b996c5 From a9f5667899b64ad1af5b571c5ad2ea4b68410fd3 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Mon, 28 Sep 2015 14:52:55 +0800 Subject: [PATCH 52/66] mac: Disable crash reporter for MAS build --- atom.gyp | 31 +++++++++++++++----- atom/common/crash_reporter/crash_reporter.cc | 19 ++++++++++++ atom/common/crash_reporter/crash_reporter.h | 4 +-- script/update.py | 6 ++++ 4 files changed, 50 insertions(+), 10 deletions(-) diff --git a/atom.gyp b/atom.gyp index f5933b8631e..9838edf54a5 100644 --- a/atom.gyp +++ b/atom.gyp @@ -285,12 +285,21 @@ 'vendor/breakpad/breakpad.gyp:breakpad_sender', ], }], # OS=="win" - ['OS=="mac"', { + ['OS=="mac" and mas_build==0', { 'dependencies': [ 'vendor/crashpad/client/client.gyp:crashpad_client', 'vendor/crashpad/handler/handler.gyp:crashpad_handler', ], - }], # OS=="mac" + }], # OS=="mac" and mas_build==0 + ['OS=="mac" and mas_build==1', { + 'defines': [ + 'MAS_BUILD', + ], + 'sources!': [ + 'atom/common/crash_reporter/crash_reporter_mac.h', + 'atom/common/crash_reporter/crash_reporter_mac.mm', + ], + }], # OS=="mac" and mas_build==1 ['OS=="linux"', { 'link_settings': { 'ldflags': [ @@ -439,12 +448,6 @@ '<@(copied_libraries)', ], }, - { - 'destination': '<(PRODUCT_DIR)/<(product_name) Framework.framework/Versions/A/Resources', - 'files': [ - '<(PRODUCT_DIR)/crashpad_handler', - ], - }, ], 'postbuilds': [ { @@ -476,6 +479,18 @@ ], }, ], + 'conditions': [ + ['mas_build==0', { + 'copies': [ + { + 'destination': '<(PRODUCT_DIR)/<(product_name) Framework.framework/Versions/A/Resources', + 'files': [ + '<(PRODUCT_DIR)/crashpad_handler', + ], + }, + ], + }], + ], }, # target framework { 'target_name': '<(project_name)_helper', diff --git a/atom/common/crash_reporter/crash_reporter.cc b/atom/common/crash_reporter/crash_reporter.cc index 59b7fd51e45..3658931ec18 100644 --- a/atom/common/crash_reporter/crash_reporter.cc +++ b/atom/common/crash_reporter/crash_reporter.cc @@ -64,4 +64,23 @@ CrashReporter::GetUploadedReports(const std::string& path) { return result; } +#if defined(OS_MACOSX) && defined(MAS_BUILD) +void CrashReporter::InitBreakpad(const std::string& product_name, + const std::string& version, + const std::string& company_name, + const std::string& submit_url, + bool auto_submit, + bool skip_system_crash_handler) { +} + +void CrashReporter::SetUploadParameters() { +} + +// static +CrashReporter* CrashReporter::GetInstance() { + static CrashReporter crash_reporter; + return &crash_reporter; +} +#endif + } // namespace crash_reporter diff --git a/atom/common/crash_reporter/crash_reporter.h b/atom/common/crash_reporter/crash_reporter.h index c7d58ca3aa7..98832fea45d 100644 --- a/atom/common/crash_reporter/crash_reporter.h +++ b/atom/common/crash_reporter/crash_reporter.h @@ -40,8 +40,8 @@ class CrashReporter { const std::string& company_name, const std::string& submit_url, bool auto_submit, - bool skip_system_crash_handler) = 0; - virtual void SetUploadParameters() = 0; + bool skip_system_crash_handler); + virtual void SetUploadParameters(); StringMap upload_parameters_; bool is_browser_; diff --git a/script/update.py b/script/update.py index abb3756ca36..e91e8401cbf 100755 --- a/script/update.py +++ b/script/update.py @@ -55,11 +55,17 @@ def run_gyp(target_arch, component): # Avoid using the old gyp lib in system. env['PYTHONPATH'] = os.path.pathsep.join([gyp_pylib, env.get('PYTHONPATH', '')]) + # Whether to build for Mac App Store. + if os.environ.has_key('MAS_BUILD'): + mas_build = 1 + else: + mas_build = 0 defines = [ '-Dlibchromiumcontent_component={0}'.format(component), '-Dtarget_arch={0}'.format(target_arch), '-Dhost_arch={0}'.format(get_host_arch()), '-Dlibrary=static_library', + '-Dmas_build={0}'.format(mas_build), ] return subprocess.call([python, gyp, '-f', 'ninja', '--depth', '.', 'atom.gyp', '-Icommon.gypi'] + defines, env=env) From b62e3554dc695d45eb789ce89e23d3afd32aec34 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Mon, 28 Sep 2015 15:02:36 +0800 Subject: [PATCH 53/66] mac: Disable auto updater in MAS build --- atom.gyp | 30 +++++++++++++++++++++++------- atom/browser/auto_updater.cc | 8 ++++++++ 2 files changed, 31 insertions(+), 7 deletions(-) diff --git a/atom.gyp b/atom.gyp index 9838edf54a5..bf655c1cbb4 100644 --- a/atom.gyp +++ b/atom.gyp @@ -64,9 +64,6 @@ 'files': [ '<(PRODUCT_DIR)/<(product_name) Helper.app', '<(PRODUCT_DIR)/<(product_name) Framework.framework', - 'external_binaries/Squirrel.framework', - 'external_binaries/ReactiveCocoa.framework', - 'external_binaries/Mantle.framework', ], }, { @@ -109,7 +106,21 @@ '<@(locale_dirs)', ], }, - ] + ], + 'conditions': [ + ['mas_build==0', { + 'copies': [ + { + 'destination': '<(PRODUCT_DIR)/<(product_name).app/Contents/Frameworks', + 'files': [ + 'external_binaries/Squirrel.framework', + 'external_binaries/ReactiveCocoa.framework', + 'external_binaries/Mantle.framework', + ], + }, + ], + }], + ], }, { # OS=="mac" 'dependencies': [ 'make_locale_paks', @@ -296,6 +307,7 @@ 'MAS_BUILD', ], 'sources!': [ + 'atom/browser/auto_updater_mac.mm', 'atom/common/crash_reporter/crash_reporter_mac.h', 'atom/common/crash_reporter/crash_reporter_mac.mm', ], @@ -402,9 +414,6 @@ 'libraries': [ '$(SDKROOT)/System/Library/Frameworks/Carbon.framework', '$(SDKROOT)/System/Library/Frameworks/QuartzCore.framework', - 'external_binaries/Squirrel.framework', - 'external_binaries/ReactiveCocoa.framework', - 'external_binaries/Mantle.framework', ], }, 'mac_bundle': 1, @@ -481,6 +490,13 @@ ], 'conditions': [ ['mas_build==0', { + 'link_settings': { + 'libraries': [ + 'external_binaries/Squirrel.framework', + 'external_binaries/ReactiveCocoa.framework', + 'external_binaries/Mantle.framework', + ], + }, 'copies': [ { 'destination': '<(PRODUCT_DIR)/<(product_name) Framework.framework/Versions/A/Resources', diff --git a/atom/browser/auto_updater.cc b/atom/browser/auto_updater.cc index fd3d412f9bb..7ebae510e9f 100644 --- a/atom/browser/auto_updater.cc +++ b/atom/browser/auto_updater.cc @@ -16,4 +16,12 @@ void AutoUpdater::SetDelegate(AutoUpdaterDelegate* delegate) { delegate_ = delegate; } +#if defined(OS_MACOSX) && defined(MAS_BUILD) +void AutoUpdater::SetFeedURL(const std::string& url) { +} + +void AutoUpdater::CheckForUpdates() { +} +#endif + } // namespace auto_updater From 7b57a945f84c6585ff5dc4658e7da8be6ed9273b Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Mon, 28 Sep 2015 15:07:49 +0800 Subject: [PATCH 54/66] mac: Set process.mas to true for MAS build --- atom/common/api/atom_bindings.cc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/atom/common/api/atom_bindings.cc b/atom/common/api/atom_bindings.cc index 8fb2efd3a3f..06fc30e7e3c 100644 --- a/atom/common/api/atom_bindings.cc +++ b/atom/common/api/atom_bindings.cc @@ -72,6 +72,10 @@ void AtomBindings::BindTo(v8::Isolate* isolate, // Do not warn about deprecated APIs. dict.Set("noDeprecation", true); +#if defined(MAS_BUILD) + dict.Set("mas", true); +#endif + mate::Dictionary versions; if (dict.Get("versions", &versions)) { versions.Set(ATOM_PROJECT_NAME, ATOM_VERSION_STRING); From 3afc9c4ebef721a64ac7bb26226d2e380b260458 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Mon, 28 Sep 2015 15:08:27 +0800 Subject: [PATCH 55/66] spec: Disable crash reporter test for MAS build --- spec/api-crash-reporter-spec.coffee | 3 +++ 1 file changed, 3 insertions(+) diff --git a/spec/api-crash-reporter-spec.coffee b/spec/api-crash-reporter-spec.coffee index 60b630bc2ff..ef60e6ab9ff 100644 --- a/spec/api-crash-reporter-spec.coffee +++ b/spec/api-crash-reporter-spec.coffee @@ -18,6 +18,9 @@ describe 'crash-reporter module', -> # It is not working on 64bit Windows. return if process.platform is 'win32' and process.arch is 'x64' + # It is not working for mas build. + return if process.mas + # The crash-reporter test is not reliable on CI machine. isCI = remote.process.argv[2] == '--ci' return if isCI From df7a9b80b1b6012a1f457e9a28a5c0f6bcff9348 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Mon, 28 Sep 2015 16:45:53 +0800 Subject: [PATCH 56/66] Fix linking error --- atom/common/crash_reporter/crash_reporter.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/atom/common/crash_reporter/crash_reporter.cc b/atom/common/crash_reporter/crash_reporter.cc index 3658931ec18..b87ce54acd5 100644 --- a/atom/common/crash_reporter/crash_reporter.cc +++ b/atom/common/crash_reporter/crash_reporter.cc @@ -64,7 +64,6 @@ CrashReporter::GetUploadedReports(const std::string& path) { return result; } -#if defined(OS_MACOSX) && defined(MAS_BUILD) void CrashReporter::InitBreakpad(const std::string& product_name, const std::string& version, const std::string& company_name, @@ -76,6 +75,7 @@ void CrashReporter::InitBreakpad(const std::string& product_name, void CrashReporter::SetUploadParameters() { } +#if defined(OS_MACOSX) && defined(MAS_BUILD) // static CrashReporter* CrashReporter::GetInstance() { static CrashReporter crash_reporter; From 48faf74f7fc8cd719d4ea8d1381cd03ab6533691 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Tue, 29 Sep 2015 10:59:52 +0800 Subject: [PATCH 57/66] mas: Use mas as platform name in dist --- script/create-dist.py | 10 ++++++---- script/lib/config.py | 7 +++++++ script/upload.py | 11 ++++++----- 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/script/create-dist.py b/script/create-dist.py index ca7e2164287..5f47b2d358f 100755 --- a/script/create-dist.py +++ b/script/create-dist.py @@ -8,7 +8,8 @@ import sys import stat from lib.config import LIBCHROMIUMCONTENT_COMMIT, BASE_URL, PLATFORM, \ - get_target_arch, get_chromedriver_version + get_target_arch, get_chromedriver_version, \ + get_platform_key from lib.util import scoped_cwd, rm_rf, get_atom_shell_version, make_zip, \ execute, atom_gyp @@ -170,7 +171,8 @@ def create_symbols(): def create_dist_zip(): dist_name = '{0}-{1}-{2}-{3}.zip'.format(PROJECT_NAME, ATOM_SHELL_VERSION, - PLATFORM, get_target_arch()) + get_platform_key(), + get_target_arch()) zip_file = os.path.join(SOURCE_ROOT, 'dist', dist_name) with scoped_cwd(DIST_DIR): @@ -182,7 +184,7 @@ def create_dist_zip(): def create_chrome_binary_zip(binary, version): - dist_name = '{0}-{1}-{2}-{3}.zip'.format(binary, version, PLATFORM, + dist_name = '{0}-{1}-{2}-{3}.zip'.format(binary, version, get_platform_key(), get_target_arch()) zip_file = os.path.join(SOURCE_ROOT, 'dist', dist_name) @@ -198,7 +200,7 @@ def create_chrome_binary_zip(binary, version): def create_symbols_zip(): dist_name = '{0}-{1}-{2}-{3}-symbols.zip'.format(PROJECT_NAME, ATOM_SHELL_VERSION, - PLATFORM, + get_platform_key(), get_target_arch()) zip_file = os.path.join(SOURCE_ROOT, 'dist', dist_name) diff --git a/script/lib/config.py b/script/lib/config.py index 68f216785d6..30eedc13e96 100644 --- a/script/lib/config.py +++ b/script/lib/config.py @@ -20,6 +20,13 @@ PLATFORM = { verbose_mode = False +def get_platform_key(): + if os.environ.has_key('MAS_BUILD'): + return 'mas' + else: + return PLATFORM + + def get_target_arch(): try: target_arch_path = os.path.join(__file__, '..', '..', '..', 'vendor', diff --git a/script/upload.py b/script/upload.py index 6fc421e6b7a..318bbb594a1 100755 --- a/script/upload.py +++ b/script/upload.py @@ -7,7 +7,8 @@ import subprocess import sys import tempfile -from lib.config import PLATFORM, get_target_arch, get_chromedriver_version +from lib.config import PLATFORM, get_target_arch, get_chromedriver_version, \ + get_platform_key from lib.util import atom_gyp, execute, get_atom_shell_version, parse_version, \ scoped_cwd from lib.github import GitHub @@ -24,14 +25,14 @@ OUT_DIR = os.path.join(SOURCE_ROOT, 'out', 'R') DIST_DIR = os.path.join(SOURCE_ROOT, 'dist') DIST_NAME = '{0}-{1}-{2}-{3}.zip'.format(PROJECT_NAME, ATOM_SHELL_VERSION, - PLATFORM, + get_platform_key(), get_target_arch()) SYMBOLS_NAME = '{0}-{1}-{2}-{3}-symbols.zip'.format(PROJECT_NAME, ATOM_SHELL_VERSION, - PLATFORM, + get_platform_key(), get_target_arch()) MKSNAPSHOT_NAME = 'mksnapshot-{0}-{1}-{2}.zip'.format(ATOM_SHELL_VERSION, - PLATFORM, + get_platform_key(), get_target_arch()) @@ -85,7 +86,7 @@ def main(): # Upload chromedriver and mksnapshot for minor version update. if parse_version(args.version)[2] == '0': chromedriver = 'chromedriver-{0}-{1}-{2}.zip'.format( - get_chromedriver_version(), PLATFORM, get_target_arch()) + get_chromedriver_version(), get_platform_key(), get_target_arch()) upload_atom_shell(github, release, os.path.join(DIST_DIR, chromedriver)) upload_atom_shell(github, release, os.path.join(DIST_DIR, MKSNAPSHOT_NAME)) From 9e51ff2b4b573d11f77b81026163156903c7f06f Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Tue, 29 Sep 2015 13:25:51 +0800 Subject: [PATCH 58/66] mac: Set CFBundleShortVersionString in Info.plist --- atom/browser/resources/mac/Info.plist | 2 ++ script/bump-version.py | 7 ++++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/atom/browser/resources/mac/Info.plist b/atom/browser/resources/mac/Info.plist index 77a5502de1e..cfd6440bf25 100644 --- a/atom/browser/resources/mac/Info.plist +++ b/atom/browser/resources/mac/Info.plist @@ -18,6 +18,8 @@ atom.icns CFBundleVersion 0.33.7 + CFBundleShortVersionString + 0.33.7 LSMinimumSystemVersion 10.8.0 NSMainNibFile diff --git a/script/bump-version.py b/script/bump-version.py index f910ae3ef95..3ee0b23df3b 100755 --- a/script/bump-version.py +++ b/script/bump-version.py @@ -106,10 +106,11 @@ def update_info_plist(version): line = lines[i] if 'CFBundleVersion' in line: lines[i + 1] = ' {0}\n'.format(version) + if 'CFBundleShortVersionString' in line: + lines[i + 1] = ' {0}\n'.format(version) - with open(info_plist, 'w') as f: - f.write(''.join(lines)) - return + with open(info_plist, 'w') as f: + f.write(''.join(lines)) def tag_version(version): From 96c15f19e39bbf5f5b1c8d24826c99e2d6996a5e Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Tue, 29 Sep 2015 13:27:50 +0800 Subject: [PATCH 59/66] mac: Set LSApplicationCategoryType in Info.plist --- atom/browser/resources/mac/Info.plist | 2 ++ 1 file changed, 2 insertions(+) diff --git a/atom/browser/resources/mac/Info.plist b/atom/browser/resources/mac/Info.plist index cfd6440bf25..e35eaea7713 100644 --- a/atom/browser/resources/mac/Info.plist +++ b/atom/browser/resources/mac/Info.plist @@ -20,6 +20,8 @@ 0.33.7 CFBundleShortVersionString 0.33.7 + LSApplicationCategoryType + public.app-category.developer-tools LSMinimumSystemVersion 10.8.0 NSMainNibFile From d6842751bbd636e63db9d436bc12dfff2286036e Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Tue, 29 Sep 2015 13:32:53 +0800 Subject: [PATCH 60/66] mac: Don't specify CFBundleExecutable in framework --- atom/common/resources/mac/Info.plist | 2 -- 1 file changed, 2 deletions(-) diff --git a/atom/common/resources/mac/Info.plist b/atom/common/resources/mac/Info.plist index 332babe979e..7f4d818c1bd 100644 --- a/atom/common/resources/mac/Info.plist +++ b/atom/common/resources/mac/Info.plist @@ -2,8 +2,6 @@ - CFBundleExecutable - ${PRODUCT_NAME} Framework CFBundleIdentifier ${ATOM_BUNDLE_ID} CFBundleName From 51335934c1eba0eb5b4ebd3ea1508a696b5f9b53 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Fri, 9 Oct 2015 16:16:35 +0800 Subject: [PATCH 61/66] mac: Set CFBundleExecutable for Electron Framework --- atom/common/resources/mac/Info.plist | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/atom/common/resources/mac/Info.plist b/atom/common/resources/mac/Info.plist index 7f4d818c1bd..7b56a46470e 100644 --- a/atom/common/resources/mac/Info.plist +++ b/atom/common/resources/mac/Info.plist @@ -5,7 +5,9 @@ CFBundleIdentifier ${ATOM_BUNDLE_ID} CFBundleName - ${PRODUCT_NAME} Framework + ${PRODUCT_NAME} + CFBundleExecutable + ${PRODUCT_NAME} CFBundlePackageType FMWK NSSupportsAutomaticGraphicsSwitching From b47076231ce5e013a5b0a5378af1ff44beb60ed4 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Fri, 9 Oct 2015 21:30:41 +0800 Subject: [PATCH 62/66] mas: Do not link with QTKit for mas build --- atom.gyp | 6 ++++++ vendor/brightray | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/atom.gyp b/atom.gyp index bf655c1cbb4..3d9b7f59f39 100644 --- a/atom.gyp +++ b/atom.gyp @@ -301,6 +301,12 @@ 'vendor/crashpad/client/client.gyp:crashpad_client', 'vendor/crashpad/handler/handler.gyp:crashpad_handler', ], + 'link_settings': { + # Do not link with QTKit for mas build. + 'libraries': [ + '$(SDKROOT)/System/Library/Frameworks/QTKit.framework', + ], + }, }], # OS=="mac" and mas_build==0 ['OS=="mac" and mas_build==1', { 'defines': [ diff --git a/vendor/brightray b/vendor/brightray index d5ca8556a65..fe2dd437c9e 160000 --- a/vendor/brightray +++ b/vendor/brightray @@ -1 +1 @@ -Subproject commit d5ca8556a65e37575fc39e2b394fa62401b996c5 +Subproject commit fe2dd437c9ef7877bf9d454db8ae401965cd7cb0 From 74d389b2b0a96b30f6d7bf69205cbd18762f62a8 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Wed, 14 Oct 2015 12:36:03 +0800 Subject: [PATCH 63/66] Bump v0.33.8 --- atom.gyp | 2 +- atom/browser/resources/mac/Info.plist | 4 ++-- atom/browser/resources/win/atom.rc | 8 ++++---- atom/common/atom_version.h | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/atom.gyp b/atom.gyp index 3d9b7f59f39..c768289f744 100644 --- a/atom.gyp +++ b/atom.gyp @@ -4,7 +4,7 @@ 'product_name%': 'Electron', 'company_name%': 'GitHub, Inc', 'company_abbr%': 'github', - 'version%': '0.33.7', + 'version%': '0.33.8', }, 'includes': [ 'filenames.gypi', diff --git a/atom/browser/resources/mac/Info.plist b/atom/browser/resources/mac/Info.plist index e35eaea7713..f4725715526 100644 --- a/atom/browser/resources/mac/Info.plist +++ b/atom/browser/resources/mac/Info.plist @@ -17,9 +17,9 @@ CFBundleIconFile atom.icns CFBundleVersion - 0.33.7 + 0.33.8 CFBundleShortVersionString - 0.33.7 + 0.33.8 LSApplicationCategoryType public.app-category.developer-tools LSMinimumSystemVersion diff --git a/atom/browser/resources/win/atom.rc b/atom/browser/resources/win/atom.rc index 39085d2ed8a..08af14987ee 100644 --- a/atom/browser/resources/win/atom.rc +++ b/atom/browser/resources/win/atom.rc @@ -56,8 +56,8 @@ END // VS_VERSION_INFO VERSIONINFO - FILEVERSION 0,33,7,0 - PRODUCTVERSION 0,33,7,0 + FILEVERSION 0,33,8,0 + PRODUCTVERSION 0,33,8,0 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -74,12 +74,12 @@ BEGIN BEGIN VALUE "CompanyName", "GitHub, Inc." VALUE "FileDescription", "Electron" - VALUE "FileVersion", "0.33.7" + VALUE "FileVersion", "0.33.8" VALUE "InternalName", "electron.exe" VALUE "LegalCopyright", "Copyright (C) 2015 GitHub, Inc. All rights reserved." VALUE "OriginalFilename", "electron.exe" VALUE "ProductName", "Electron" - VALUE "ProductVersion", "0.33.7" + VALUE "ProductVersion", "0.33.8" VALUE "SquirrelAwareVersion", "1" END END diff --git a/atom/common/atom_version.h b/atom/common/atom_version.h index 995a6f916b1..205d512b2b5 100644 --- a/atom/common/atom_version.h +++ b/atom/common/atom_version.h @@ -7,7 +7,7 @@ #define ATOM_MAJOR_VERSION 0 #define ATOM_MINOR_VERSION 33 -#define ATOM_PATCH_VERSION 7 +#define ATOM_PATCH_VERSION 8 #define ATOM_VERSION_IS_RELEASE 1 From 95c4847d601f350dab5b4f64cc7dca2db55801e2 Mon Sep 17 00:00:00 2001 From: Nicholas Arcuri Date: Wed, 14 Oct 2015 06:28:27 -0400 Subject: [PATCH 64/66] Update application-distribution.md Fix typo on line 38 --- docs/tutorial/application-distribution.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tutorial/application-distribution.md b/docs/tutorial/application-distribution.md index 4f1f5202a00..d65bc08ca87 100644 --- a/docs/tutorial/application-distribution.md +++ b/docs/tutorial/application-distribution.md @@ -35,7 +35,7 @@ exposing your app's source code to users. To use an `asar` archive to replace the `app` folder, you need to rename the archive to `app.asar`, and put it under Electron's resources directory like -below, and Electron will then try read the archive and start from it. +below, and Electron will then try to read the archive and start from it. On OS X: From 4270eba43896536390a5d3fd454bed4607fcbee6 Mon Sep 17 00:00:00 2001 From: kokdemo Date: Thu, 15 Oct 2015 00:00:52 +0800 Subject: [PATCH 65/66] translate the debugging-main-process.md --- docs-translations/zh-CN/README.md | 1 + .../zh-CN/tutorial/debugging-main-process.md | 48 +++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 docs-translations/zh-CN/tutorial/debugging-main-process.md diff --git a/docs-translations/zh-CN/README.md b/docs-translations/zh-CN/README.md index 124d030c46e..6085cbfb2c6 100644 --- a/docs-translations/zh-CN/README.md +++ b/docs-translations/zh-CN/README.md @@ -1,5 +1,6 @@ ## 向导 +* [支持平台](tutorial/supported-platforms.md) * [应用部署](tutorial/application-distribution.md) * [应用打包](tutorial/application-packaging.md) * [使用原生模块](tutorial/using-native-node-modules.md) diff --git a/docs-translations/zh-CN/tutorial/debugging-main-process.md b/docs-translations/zh-CN/tutorial/debugging-main-process.md new file mode 100644 index 00000000000..48f3579394e --- /dev/null +++ b/docs-translations/zh-CN/tutorial/debugging-main-process.md @@ -0,0 +1,48 @@ +# 主进程调试 + +浏览器窗口的开发工具仅能调试渲染器的进程脚本(比如web 页面)。为了提供一个可以调试主进程 +的方法,Electron 提供了 `--debug` 和 `--debug-brk` 开关。 + +## 命令行开关 + +使用如下的命令行开关来调试 Electron 的主进程: + +### `--debug=[port]` + +当这个开关用于 Electron 时,它将会监听 V8 引擎中有关 `port` 的调试器协议信息。 +默认的 `port` 是 `5858`。 + +### `--debug-brk=[port]` + +就像 `--debug` 一样,但是会在第一行暂停脚本运行。 + +## 使用 node-inspector 来调试 + +__备注:__ Electron 使用 node v0.11.13 版本,目前对 node-inspector支持的不是特别好, +如果你通过 node-inspector 的 console 来检查 `process` 对象,主进程就会崩溃。 + +### 1. 开始 [node-inspector][node-inspector] 服务 + +```bash +$ node-inspector +``` + +### 2. 打开 Electron 的调试模式 + +你也可以用调试参数来运行 Electron : + +```bash +$ electron --debug=5858 your/app +``` + +或者,在第一行暂停你的脚本: + +```bash +$ electron --debug-brk=5858 your/app +``` + +### 3. 加载调试器界面 + +在 Chrome 中打开 http://127.0.0.1:8080/debug?ws=127.0.0.1:8080&port=5858 + +[node-inspector]: https://github.com/node-inspector/node-inspector From 79311af8eb6fc1d6764751fde572ac566c140988 Mon Sep 17 00:00:00 2001 From: Yegun Kim Date: Thu, 15 Oct 2015 16:26:24 -0500 Subject: [PATCH 66/66] translate "/docs-translations/ko-KR/api/app.md" --- docs-translations/ko-KR/api/app.md | 342 +++++++++++++++++++++++++++++ 1 file changed, 342 insertions(+) create mode 100644 docs-translations/ko-KR/api/app.md diff --git a/docs-translations/ko-KR/api/app.md b/docs-translations/ko-KR/api/app.md new file mode 100644 index 00000000000..2fa04368ec3 --- /dev/null +++ b/docs-translations/ko-KR/api/app.md @@ -0,0 +1,342 @@ +# app + +앱 모듈은 어플리케이션의 생명주기(?) 제어를 책임집니다. + +밑의 예제는 마지막 윈도우가 종료되었을 때, 어떻게 어플리케이션을 종료하는지 설명합니다. + +```javascript +var app = require('app'); +app.on('window-all-closed', function() { + app.quit(); +}); +``` + +## Events + +앱 객체는 밑의 이벤트들을 발현(?)시킵니다. + +### Event: 'will-finish-launching' + +'will-finish-launching' 이벤트는 어플리케이션이 기본적인 시동준비(?)를 마치면 발현(?)됩니다. + 윈도우 운영체제와 리눅스 운영체제 안에서, 'will-finish-launching' 이벤트는 'ready' 이벤트와 동일합니다. +OS X 운영체제 안에서는, 이 이벤트는 'NSApplication'의 'applicationWillFinishLaunching' 알림으로 표현됩니다. +유저는 대개 'open-file'과 'open-url' 이벤트를 위한 listeners을 세팅합니다. +그리고, crash reporter와 auto updater를 시작합니다. + +대부분의 경우, 유저는 모든 것을 'ready' 이벤트 handler로 해결합니다. + +### Event: 'ready' + +Electron이 초기화를 끝냈을 때, 이벤트가 발현합니다. + +### Event: 'window-all-closed' + +모든 윈도우창이 종료되었을 때, 이벤트가 발현합니다. + +이 이벤트는 어플리케이션이 정상 종료되지 않았을 때만 발현됩니다. +만약 유저가 'Cmd + Q' 또는 개발자가 'app.quit()'를 호출했다면, Electron은 먼저 모든 윈도우창 종료를 시도합니다. +그 다음에, 'will-quit' 이벤트를 발현시킵니다. +그리고, 'will-quit'가 발현된 경우에는 'window-all-closed' 이벤트는 발현되지 않습니다. + +### Event: 'before-quit' + +Returns: + +* `event` Event + +어플리케이션이 어플리케이션의 윈도우 종료를 시작하기 전에, 발현됩니다. +'event.preventDefault()' 호출은 어플리케이션의 강제종료 행위를 방지합니다. + +### Event: 'will-quit' + +Returns: + +* `event` Event + +모든 윈도우창이 종료되고 어플리케이션이 종료하고자 할 때, 이벤트가 발현됩니다. +'event.preventDefault()'의 호출은 어플리케이션 종료를 방지합니다. +'will-quit' 이벤트와 'window-all-closed' 이벤트와의 차이점을 확인하려면, +'window-all-close' 이벤트의 설명을 참조합시다. + +### Event: 'quit' + +어플리케이션이 종료될 때, 발현됩니다. + +### Event: 'open-file' + +Returns: + +* `event` Event +* `path` String + +어플리케이션을 이용하여 파일을 열고자 할 때, 발현됩니다. + +'open-file' 이벤트는 보통 어플리케이션이 열려 있을 때와, +파일을 열기 위해 OS가 어플리케이션을 재사용할 때 발현됩니다. +'open-file'은 파일이 dock에 추가될 때와 어플리케이션이 실행하기 전에도 발현됩니다. +위의 케이스를 처리하기 위해서는, 'ready' 이벤트가 발현되기도 전에, 어플리케이션 시작 초기 시 +'open-file' 이벤트에 linsten을 걸어 놨는지 반드시 확인해야 합니다. + +이 이벤트를 처리하기 위한다면, 유저는 'even.preventDefault()'를 호출해야 합니다. + +### Event: 'open-url' + +Returns: + +* `event` Event +* `url` String + +유저가 어플리케이션을 이용하여 URL을 열고자 할 경우, 발현됩니다. +어플리케이션을 통해 열기 위해서는 URL 구조가 반드시 등록되어 있어야 합니다. +이 이벤트를 처리하기 위해선, 유저가 'event.preventDefault()'을 호출해야 합니다. + +### Event: 'activate' _OS X_ + +Returns: + +* `event` Event +* `hasVisibleWindows` Bool + +어플리케이션이 활성화 되었을 때 발현됩니다. +(어플리케이션은 dock 아이콘을 click했을 때 주로 활성화됩니다.) + +### Event: 'browser-window-blur' + +Returns: + +* `event` Event +* `window` BrowserWindow + +[browserWindow](browser-window.md)가 흐려졌을 때, 호출됩니다. + +### Event: 'browser-window-focus' + +Returns: + +* `event` Event +* `window` BrowserWindow + +[browserWindow](browser-window.md)을 포커싱했을 때, 호출됩니다. +(포커싱이란? 클릭 또는 활성화했을 때를 의미) + +### Event: 'browser-window-created' + +Returns: + +* `event` Event +* `window` BrowserWindow + +새로운 [browserWindow](browser-window.md)가 생성될 때 발현됩니다. + +### Event: 'select-certificate' + +유저인증이 요청되었을 때 발현됩니다. + +Returns: + +* `event` Event +* `webContents` [WebContents](browser-window.md#class-webcontents) +* `url` String +* `certificateList` [Objects] + * `data` PEM encoded data + * `issuerName` Issuer's Common Name +* `callback` Function + +```javascript +app.on('select-certificate', function(event, host, url, list, callback) { + event.preventDefault(); + callback(list[0]); +}) +``` + +'url' 유저인증 요청의 탐색 항목에 대응합니다. +그리고, 'callback' 는 리스트로 필터링된 항목과 함께 호출될 필요가 있습니다. + +'event.preventDefault()' 호출은 기록소로부터 처음인증된 정보를 사용하는 +어플리케이션을 막습니다. + +### Event: 'gpu-process-crashed' + +GPU가 충돌을 일으켰을 때, 발현됩니다. + +## Methods + +'app' 객체는 밑의 함수를 포함하고 있습니다: + +**Note:** 어떤 함수들은 표시된 특정한 운영체제에서만 사용가능합니다. + +### `app.quit()` + +모든 윈도우창 종료를 시도합니다. 'before-quit' 이벤트가 먼저 발현됩니다. +모든 윈도우창이 성공적으로 종료되었다면, 'will-quit' 이벤트가 발현하고, +디폴트설정으로 어플리케이션이 종료됩니다. + +이 함수는 모든 'beforeunload'과 'unload' 이벤트 처리기가 제대로 실행되었음을 보장합니다. +(즉, 'beforeunload'와 'unload'가 정상 실행되었을 때, 실행가능합니다.) + +'beforeunload' 이벤트 처리기가 'false'를 반환하였을 경우, 윈도우 창 종료가 취소 될 수 있습니다. + + +### `app.getAppPath()` + +현재 어플리케이션의 디렉토리를 반환합니다. + +### `app.getPath(name)` + +* `name` String + +특정한 디렉토리의 경로나 'name' 파일의 경로를 찾아 반환합니다. +실패할 경우, 'Error'를 반환합니다. + +유저는 다음과 같은 이름으로 경로를 요쳥할 수 있습니다: + +* `home` = 유저의 홈 디렉토리. +* `appData` = 유저의 어플리케이션 데이터 디렉토리, 디폴트설정으로: + * `%APPDATA%` = on Windows + * `$XDG_CONFIG_HOME` 또는 `~/.config` = on Linux + * `~/Library/Application Support` = on OS X +* `userData` = 유저 app의 설정파일을 저장하는 디렉토리, +디폴트설정으로 'appData' 디렉토리에 유저 app의 이름을 추가한 형식. +* `temp` = 임시 디렉토리. +* `userDesktop` = 현재 로그인한 유저의 데스트탑 디렉토리. +* `exe` = 현재 실행가능한 파일. +* `module` = `libchromiumcontent` 라이브러리. + +### `app.setPath(name, path)` + +* `name` String +* `path` String + +특정한 디렉토리나 파일이름이 'name'인 'path'를 재정의합니다. +만약 지정된 디렉토리의 경로가 존재하지 않는다면, 디렉토리가 새로 생성됩니다. +실패시, 'Error'를 반환합니다. + +유저는 'app.getPath'에 정의되어 있는 'name' 경로만 재정의할 수 있습니다. + +디폴트설정으로, 웹페이지의 쿠키와 캐시는 'userData' 디렉토리 밑에 저장됩니다. + +만약 유저가 이 위치를 변경하고자 한다면, 'app' 모듈의 'ready' 이벤트가 발현되기 전, +유저는 반드시 'userData' 경로를 재정의해야 합니다. + +### `app.getVersion()` + +로드된 어플리케이션의 버전을 반환합니다. + +만약 'package.json' 파일에서 어플리케이션의 버전을 찾지 못한다면, +현재 번들 또는 실행 파일의 버전이 반환됩니다. + +### `app.getName()` + +응용프로그램(=어플리케이션)의 'package.json' 파일에 있는 +현재 응용프로그램의 이름을 반환합니다. + +NPM 모듈 스펙에 따라, 대부분 'package.json'의 'name' 필드는 소문자 이름입니다. +유저는 'productName'의 필드를 지정해야 합니다. +'productName'는 응용프로그램의 대문자 이름입니다. +'productName'는 Electron에서 선호하는 'name' 입니다. + +### `app.getLocale()` + +현재 응용프로그램의 locale을 반환합니다. + +### `app.resolveProxy(url, callback)` + +* `url` URL +* `callback` Function + +'url'을 위해 프록시 정보를 해석합니다. +'callback'은 'callback(proxy)' 요청이 수행될 때, +호출됩니다. + +### `app.addRecentDocument(path)` + +* `path` String + +최근 문서 목록에 'path'를 추가합니다. + +목록은 운영체제에 의해 관리됩니다. +Windows 운영체제에서는, 작업표시줄에서 참조할 수 있습니다. +OS X 운영체제에서는, dock 메뉴에서 참조할 수 있습니다. + +### `app.clearRecentDocuments()` + +최근 문서 목록을 모두 지웁니다. + +### `app.setUserTasks(tasks)` _Windows_ + +* `tasks` Array - 'Task' 객체의 배열 + +Windows 운영체제에서 JumpList의 [Tasks][tasks] 카테고리로 'tasks'를 추가합니다. + +'tasks'는 밑의 형식을 따르는 'Task' 객체의 배열입니다: + +`Task` Object +* `program` String - 프로그램을 실행할 경로, 대부분 유저는 현재 프로그램을 여는 'process.execPath'를 지정합니다. +* `arguments` String - 'program'이 실행될 때의 명령문 인자. +* `title` String - JumpList에 표시할 문장. +* `description` String - 이 task 객체에 대한 설명. +* `iconPath` String - 아이콘을 포함한 임의의 리소스 파일이며, JumpList에 표시될 아이콘의 절대 경로. +유저는 대부분 프로그램의 아이콘을 표시하기 위해 'process.execPath'를 지정합니다. +* `iconIndex` Integer - 아이콘 파일안의 아이콘 색인(index). 만약, 아이콘 파일 안에 두 개 이상의 아이콘이 있을 경우, + 아이콘을 특정하기 위해 이 값을 설정합니다. 단, 하나의 아이콘만 있을 경우는 0 값을 가집니다. + +### `app.commandLine.appendSwitch(switch[, value])` + +Append a switch (with optional `value`) to Chromium's command line. +Chromium의 명령문에 (선택적으로, 'value'와 함께) switch를 추가합니다. + +**Note:** 이 함수는 'process.argv'에 영향을 주지 않습니다. +그리고, 보통 이 함수는 개발자들이 하드웨어 수준의 Chrominum의 행동을 제어하기 위해 주로 사용됩니다. + +### `app.commandLine.appendArgument(value)` + +Chromium의 명령문에 인자를 추가합니다. 인자는 올바르게 인용될 것입니다. + +**Note:** 'process.argv'에 영향을 주지는 않습니다. + +### `app.dock.bounce([type])` _OS X_ + +* `type` String (optional) - 'critical'이나 'informational'. 디폴트 설정은 'informational' + +'critical'이 input으로 전달되면, dock 아이콘은 응용프로그램이 활성화되거나, 요청이 취소될 때까지 +계속 bounce합니다. + +'informational'이 input으로 전달되면, dock 아이콘은 1초만 bounce합니다. +그러나, 응용프로그램이 활성화되거나 요청이 취소될 때까지 요청은 계속 활성화되어 있습니다. + +요청을 대표하는 ID를 반환합니다. + +### `app.dock.cancelBounce(id)` _OS X_ + +* `id` Integer + +'id'의 반송을 취소합니다. + + +### `app.dock.setBadge(text)` _OS X_ + +* `text` String + +dock의 badge 구역에 표현될 문장을 설정합니다. + +### `app.dock.getBadge()` _OS X_ + +dock의 badge 라인을 반환합니다. + + +### `app.dock.hide()` _OS X_ + +dock 아이콘을 숨깁니다. + +### `app.dock.show()` _OS X_ + +dock 아이콘을 보여줍니다. + +### `app.dock.setMenu(menu)` _OS X_ + +* `menu` Menu + +어플리케이션의 [dock menu][dock-menu]을 결정합니다. + +[dock-menu]:https://developer.apple.com/library/mac/documentation/Carbon/Conceptual/customizing_docktile/concepts/dockconcepts.html#//apple_ref/doc/uid/TP30000986-CH2-TPXREF103 +[tasks]:http://msdn.microsoft.com/en-us/library/windows/desktop/dd378460(v=vs.85).aspx#tasks