모든 개발이 완료되고, 배포를 해야 하는 경우에 윈도우의 경우 exe 파일, macOS의 경우 .app으로 패키징하여야 한다. 물론 소스 파일을 배포하고 사용자가 지난번 포스팅(https://ahnbk.com/?p=366, https://ahnbk.com/?p=383)과 같이 개발환경을 갖추어서 실행할 수 있지만 매우 복잡하고, 릴리즈 모드가 아닌 관계로 살짝 느린 면이있다.
Scratch 3.0은 React.js를 사용하여 개발되었다. 즉 이를 실행하기 위해선 웹브라우저가 필요하다. 개발 시에는 webpack-dev-server를 이용하였다. 이를 대체할 것이 필요한데, 이때 필요한 것이 Electron(https://electronjs.org)이다.
Electron은 NodeJS, Chromium을 이용하여 JavaScript, HTML, CSS를 이용하여 동일한 소스로 Windows, macOS, Linux 등에서 실행 가능한 Desktop 앱을 개발할 수 있는 플랫폼이다.
Electron은 npm을 이용하여 쉽게 설치할 수 있다.
$ npm install -g electron
다음으로 지금까지 개발한 Scratch 3.0을 릴리즈 형태로 빌드한다. Scratch-gui 디렉토리로 이동하여 다음과 같이 입력한다.
$ cd scratch-gui
$ npm run-script build
이제 빌드가 완료되면, build 디렉토리에 release 모드로 빌드된 파일들이 생성되어 있음을 볼 수 있다.
이제 편의상 scratch-app 디렉토리를 하나 생성하고 위 build 디렉토리를 복사한다. 다음으로 election 앱을 만들기 위해 다음과 같이 입력한다.
$ cd scratch-app
$ npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.
See `npm help json` for definitive documentation on these fields
and exactly what they do.
Use `npm install <pkg>` afterwards to install a package and
save it as a dependency in the package.json file.
Press ^C at any time to quit.
package name: (scratch-app)
version: (1.0.0)
description: Scratch 3.0 for OROCA Edubot
entry point: (index.js) main.js
test command:
git repository:
keywords: scratch, oroca, edubot, block-coding
author: Byeong-Kyu Ahn
license: (ISC) BSD-2-Clause
About to write to /Users/byeongkyu/Developer/scratch/scratch-app/package.json:
{
"name": "scratch-app",
"version": "1.0.0",
"description": "Scratch 3.0 for OROCA Edubot",
"main": "main.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [
"scratch",
"oroca",
"edubot",
"block-coding"
],
"author": "Byeong-Kyu Ahn",
"license": "BSD-2-Clause"
}
Is this OK? (yes)
위와 같이 사용자의 환경에 맞추어 입력하게 되면, package.json 파일이 생성되어 있음을 볼수 있다. package.json 파일을 에디터를 이용해 다음과 같이 수정한다.
{
"name": "scratch-app",
"version": "1.0.0",
"description": "Scratch 3.0 for OROCA Edubot",
"main": "main.js",
"scripts": {
"start": "electron ."
},
"keywords": [
"scratch",
"oroca",
"edubot",
"block-coding"
],
"author": "Byeong-Kyu Ahn",
"license": "BSD-2-Clause"
}
이제 main.js 파일을 생성하고 다음과 같이 입력한다.
const { app, BrowserWindow } = require('electron')
var path = require('path')
let win
function createWindow () {
win = new BrowserWindow({
frame: true,
width: 1200,
height: 800,
icon: path.join(__dirname, 'assets/icons/png/64x64.png')
})
win.loadFile('./build/index.html')
win.on('closed', () => {
win = null
})
}
app.on('ready', createWindow)
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit()
}
})
app.on('activate', () => {
if (win === null) {
createWindow()
}
})
다음과 같이 입력하여 실행해 본다.
$ npm start
정상적으로 되었다면, 앱이 실행 됨을 볼 수 있다.
이제 이렇게 생성된 electron 앱을 패키징하는 과정만 남아 있다. 먼저 앱의 아이콘을 생성한다. 기본값은 Electron의 기본 아이콘이다. 이미지 편집기 등을 이용하여 1024×1024 크기의 png 파일을 생성한다.
윈도우 앱의 경우 ico 파일을 사용하고, macOS의 경우 icn 파일을 사용한다. https://icoconvert.com, https://iconverticons.com/online 등의 웹페이지에서 변환이 가능하다. 생성된 파일을 scratch-app 디렉토리에 복사한다.
다음으로 electron-packager를 설치한다. npm을 이용하여 쉽게 설치할 수 있다.
$ npm install -g electron-packager
다음으로 패키징에 필요한 electron을 설치한다.
$ cd scratch-app
$ npm install --save-dev electron
마지막으로 macOS용 앱을 패키지할 경우 다음과 같이 입력한다.
$ electron-packager . --overwrite --platform=darwin --arch=x64 --icon=./assets/icons/edubot_icon.icns --prune=true --out=release-builds
다음과 같은 메시지가 나오면 성공
Packaging app for platform darwin x64 using electron v4.0.8
Wrote new app to release-builds/scratch-app-darwin-x64
이제 위에서 알려준 디렉토리로 이동해 보면 .app 파일이 생성되어 있음을 볼 수 있다. macOS의 경우 /Application으로 복사하여 사용하면 된다.
윈도우용 앱을 패키징 할 때, macOS에서 진행하는 경우 wine 툴이 필요하다. homebrew를 이용하여 쉽게 설치가 가능하다.
$ brew install wine
설치가 완료되면, 다음과 같이 입력하여 윈도우용 앱을 패키징한다.
$ electron-packager . scratch-edubot-app --overwrite --platform=win32 --arch=x64 --icon=assets/icons/edubot_icon.ico --prune=true --out=release-builds --version-string.CompanyName="OROCA" --version-string.FileDescription="OROCA Edubot" --version-string.ProductName="Scratch Edubot"
다음과 같은 메시지가 나오고 해당 디렉토리로 이동하면 exe 파일이 생성됨을 볼 수 있다.
Packaging app for platform win32 x64 using electron v4.0.8
Wrote new app to release-builds/scratch-edubot-app-win32-x64
위 디렉토리를 압축하여 윈도우 환경에서 exe 파일을 실행한다.
끝!
좋은 정보 감사합니다. 혹시 *.apk(스마트폰 실행파일)로 패키징도 가능할까요??
저도 고민했던 내용입니다만, 스크래치의 경우 화면이 작아지면 거의 사용이 불가하므로 안드로이드나 iOS로 패키징하는 것은 큰 의미가 없다고 생각했습니다. 스마트폰은 기능이 비슷한 Blockly를 사용해서 구현중입니다.
가능은 한건가요?? 왜냐하면 태블릿이라는 하드웨어를 생각하면 그래도 의미는 있어보입니다. 관련 자료나 키워드를 알려주실 수 있으시면 제가 학습하는데 큰 도움이 될 것 같습니다.
넵.. React Native로 찾아보시면 될것 같습니다.
안녕하세요. 좋은 정보 감사합니다.
혹시 하나의 sb3 프로젝트 자체를 exe 파일로 만들려면 어떻게 하면 좋을까요?
예를 들어 해당 exe 파일을 클릭하면 해당 프로젝트가 실행화면으로 시작되도록이요.
공개된 스크래치 소스 자체를 건들여야 할 것 같은데 가능하다고 보시나요?
스크래치 자체야 어찌어찌 한다고 해도, 로봇과 연동하려면 연결 과정도 필요하고 하니 쉽지는 않을듯 합니다. 효율적인지도 잘 모르겠고요.
아..스크래치3.0을 지금 아들과함께 공부중입니다. 스크래치웹말고 다른곳에서도 쓸수있게하고싶어 여기저기찾아다녀도 저같은 컴알못에겐 답을 알려주셔도 대체 무슨말인지 어렵군요..ㅠㅠ 역시 블랙홀같은 컴의 세계입니다..
저같은 초보도 쉽게 .sb3파일을 exe파일로 만들수 있는 방법이 없을까요? 실력자님께서 알려주신 저 어려운 공식뿐인걸까요..ㅠㅠ 또하나 궁금한게 sb3파일을 exe파일로 변환하면 바로 제가 만든게임도 실행이 가능한건가요?
컴알못의 수줍은 질문이였어요 오늘도 좋은하루 되세요!!!!
제가 이해하기론 .sb3 파일은 프로젝트 파일 – 스크래치에서 작업하고 저장한 – 아닌가요?? https://scratch.mit.edu/discuss/topic/341617/ 에 설명이 나와 있긴 합니다만…. 시도해보진 않았습니다.