add support for configuring server host to support Android simulators

- Genymotion simulator should use 10.0.3.2 instead of localhost
- Stock android emulator should use 10.0.2.2 instead of localhost
This commit is contained in:
Artur Girenko 2015-12-06 20:22:53 +01:00
parent 8ec6608919
commit 577f7c6954
5 changed files with 46 additions and 52 deletions

View File

@ -22,6 +22,7 @@ projNameRx = /\$PROJECT_NAME\$/g
projNameHyphRx = /\$PROJECT_NAME_HYPHENATED\$/g projNameHyphRx = /\$PROJECT_NAME_HYPHENATED\$/g
projNameUsRx = /\$PROJECT_NAME_UNDERSCORED\$/g projNameUsRx = /\$PROJECT_NAME_UNDERSCORED\$/g
platformRx = /\$PLATFORM\$/g platformRx = /\$PLATFORM\$/g
devHostRx = /\$DEV_HOST\$/g
rnVersion = '0.15.0' rnVersion = '0.15.0'
rnPackagerPort = 8081 rnPackagerPort = 8081
podMinVersion = '0.38.2' podMinVersion = '0.38.2'
@ -157,24 +158,29 @@ getBundleId = (name) ->
logErr message logErr message
copyEnvironmentFiles = (projNameHyph, projName) -> copyDevEnvironmentFiles = (projNameHyph, projName, devHost) ->
mainIosDevPath = "env/dev/env/ios/main.cljs" mainIosDevPath = "env/dev/env/ios/main.cljs"
mainIosProdPath = "env/prod/env/ios/main.cljs"
mainAndroidDevPath = "env/dev/env/android/main.cljs" mainAndroidDevPath = "env/dev/env/android/main.cljs"
mainAndroidProdPath = "env/prod/env/android/main.cljs"
exec "cp #{resources}cljs/main_dev.cljs #{mainIosDevPath}" exec "cp #{resources}cljs/main_dev.cljs #{mainIosDevPath}"
edit mainIosDevPath, [[projNameHyphRx, projNameHyph], [projNameRx, projName], [platformRx, "ios"]] edit mainIosDevPath, [[projNameHyphRx, projNameHyph], [projNameRx, projName], [platformRx, "ios"], [devHostRx, devHost] ]
exec "cp #{resources}cljs/main_dev.cljs #{mainAndroidDevPath}"
edit mainAndroidDevPath, [[projNameHyphRx, projNameHyph], [projNameRx, projName], [platformRx, "android"], [devHostRx, devHost]]
requestImgMacroDevPath = "env/dev/env/require_img.clj"
exec "cp #{resources}require_img_dev.clj #{requestImgMacroDevPath}"
edit requestImgMacroDevPath, [[devHostRx, devHost]]
copyProdEnvironmentFiles = (projNameHyph, projName) ->
mainIosProdPath = "env/prod/env/ios/main.cljs"
mainAndroidProdPath = "env/prod/env/android/main.cljs"
exec "cp #{resources}cljs/main_prod.cljs #{mainIosProdPath}" exec "cp #{resources}cljs/main_prod.cljs #{mainIosProdPath}"
edit mainIosProdPath, [[projNameHyphRx, projNameHyph], [projNameRx, projName], [platformRx, "ios"]] edit mainIosProdPath, [[projNameHyphRx, projNameHyph], [projNameRx, projName], [platformRx, "ios"]]
exec "cp #{resources}cljs/main_dev.cljs #{mainAndroidDevPath}"
edit mainAndroidDevPath, [[projNameHyphRx, projNameHyph], [projNameRx, projName], [platformRx, "android"]]
exec "cp #{resources}cljs/main_prod.cljs #{mainAndroidProdPath}" exec "cp #{resources}cljs/main_prod.cljs #{mainAndroidProdPath}"
edit mainAndroidProdPath, [[projNameHyphRx, projNameHyph], [projNameRx, projName], [platformRx, "android"]] edit mainAndroidProdPath, [[projNameHyphRx, projNameHyph], [projNameRx, projName], [platformRx, "android"]]
requestImgMacroDevPath = "env/dev/env/require_img.clj"
requestImgMacroProdPath = "env/prod/env/require_img.clj" requestImgMacroProdPath = "env/prod/env/require_img.clj"
exec "cp #{resources}require_img_dev.clj #{requestImgMacroDevPath}"
exec "cp #{resources}require_img_prod.clj #{requestImgMacroProdPath}" exec "cp #{resources}require_img_prod.clj #{requestImgMacroProdPath}"
copyFigwheelBridge = (projNameUs) -> copyFigwheelBridge = (projNameUs) ->
@ -249,7 +255,8 @@ init = (projName) ->
fs.mkdirSync "env/prod/env/ios" fs.mkdirSync "env/prod/env/ios"
fs.mkdirSync "env/prod/env/android" fs.mkdirSync "env/prod/env/android"
copyEnvironmentFiles(projNameHyph, projName) copyDevEnvironmentFiles(projNameHyph, projName, "localhost")
copyProdEnvironmentFiles(projNameHyph, projName)
exec "cp -r #{resources}images ." exec "cp -r #{resources}images ."
@ -377,13 +384,18 @@ getDeviceUuids = ->
getDeviceList().map (line) -> line.match(/\[(.+)\]/)[1] getDeviceList().map (line) -> line.match(/\[(.+)\]/)[1]
generateDevScripts = () -> generateDevScripts = (devHost) ->
try try
appName = readConfig().name projName = readConfig().name
fs.writeFileSync 'index.ios.js', "require('figwheel-bridge').start('" + appName + "','ios');" projNameHyph = projName.replace(camelRx, '$1-$2').toLowerCase()
fs.writeFileSync 'index.ios.js', "require('figwheel-bridge').start('" + projName + "','ios', '" + devHost + "');"
log 'index.ios.js was regenerated' log 'index.ios.js was regenerated'
fs.writeFileSync 'index.android.js', "require('figwheel-bridge').start('" + appName + "','android');" fs.writeFileSync 'index.android.js', "require('figwheel-bridge').start('" + projName + "','android', '" + devHost + "');"
log 'index.android.js was regenerated' log 'index.android.js was regenerated'
copyDevEnvironmentFiles(projNameHyph, projName, devHost)
log 'Dev server host: ' + devHost
catch {message} catch {message}
logErr \ logErr \
if message.match /EACCES/i if message.match /EACCES/i
@ -391,35 +403,13 @@ generateDevScripts = () ->
else else
message message
startRepl = (name, autoChoose) ->
log 'Starting REPL'
hasRlwrap =
try
exec 'type rlwrap'
true
catch
log '
Warning: rlwrap is not installed.\nInstall it to make the REPL a much
better experience with arrow key support.
', 'red'
false
try
child.spawn (if hasRlwrap then 'rlwrap' else 'lein'),
"#{if hasRlwrap then 'lein ' else ''}figwheel ios",
cwd: process.cwd()
env: process.env
stdio: 'inherit'
catch {message}
logErr message
doUpgrade = (config) -> doUpgrade = (config) ->
projName = config.name; projName = config.name;
projNameHyph = projName.replace(camelRx, '$1-$2').toLowerCase() projNameHyph = projName.replace(camelRx, '$1-$2').toLowerCase()
projNameUs = toUnderscored projName projNameUs = toUnderscored projName
copyEnvironmentFiles(projNameHyph, projName) copyDevEnvironmentFiles(projNameHyph, projName, "localhost")
copyProdEnvironmentFiles(projNameHyph, projName)
log 'upgraded files in env/' log 'upgraded files in env/'
copyFigwheelBridge(projNameUs) copyFigwheelBridge(projNameUs)
@ -484,8 +474,9 @@ cli.command 'deps'
cli.command 'use-figwheel' cli.command 'use-figwheel'
.description 'generate index.ios.js and index.android.js for development with figwheel' .description 'generate index.ios.js and index.android.js for development with figwheel'
.action -> .option "-H, --host [host or IP address}]", 'specify server host (default localhost)', "localhost"
generateDevScripts() .action (cmd) ->
generateDevScripts(cmd.host)
cli.on '*', (command) -> cli.on '*', (command) ->
logErr "unknown command #{command[0]}. See re-natal --help for valid commands" logErr "unknown command #{command[0]}. See re-natal --help for valid commands"

View File

@ -1,8 +1,14 @@
(ns ^:figwheel-no-load env.$PLATFORM$.main (ns ^:figwheel-no-load env.$PLATFORM$.main
(:require [$PROJECT_NAME_HYPHENATED$.$PLATFORM$.core :as core])) (:require [$PROJECT_NAME_HYPHENATED$.$PLATFORM$.core :as core]
[figwheel.client :as figwheel :include-macros true]))
(enable-console-print!) (enable-console-print!)
(figwheel/watch-and-reload
:websocket-url "ws://$DEV_HOST$:3449/figwheel-ws"
:heads-up-display false
:jsload-callback core/mount-root)
(core/init) (core/init)
(core/mount-root) (core/mount-root)

View File

@ -9,7 +9,6 @@ var CLOSURE_UNCOMPILED_DEFINES = null;
var React = require('react-native'); var React = require('react-native');
var config = { var config = {
server: 'http://localhost:8081',
basePath: "target/", basePath: "target/",
googBasePath: 'goog/', googBasePath: 'goog/',
splash: React.createClass({ splash: React.createClass({
@ -25,6 +24,7 @@ var config = {
}; };
var scriptQueue = []; var scriptQueue = [];
var server = null; // will be set dynamically
var fileBasePath = null; // will be set dynamically var fileBasePath = null; // will be set dynamically
var evaluate = eval; // This is needed, direct calls to eval does not work (RN packager???) var evaluate = eval; // This is needed, direct calls to eval does not work (RN packager???)
@ -56,7 +56,7 @@ function customEval(url, javascript, success, error) {
} }
} }
function asyncImportScripts(path, success, error) { function asyncImportScripts(path, success, error) {
var url = config.server + '/' + path; var url = server + '/' + path;
console.info('(asyncImportScripts) Importing: ' + url); console.info('(asyncImportScripts) Importing: ' + url);
scriptQueue.push(url); scriptQueue.push(url);
@ -92,7 +92,8 @@ function importJs(src, success, error) {
} }
function loadApp(platform) { function loadApp(platform, devHost) {
server = "http://"+ devHost + ":8081";
fileBasePath = config.basePath + platform; fileBasePath = config.basePath + platform;
if (typeof goog === "undefined") { if (typeof goog === "undefined") {
@ -116,10 +117,10 @@ function loadApp(platform) {
} }
} }
function startApp(appName, platform) { function startApp(appName, platform, devHost) {
React.AppRegistry.registerComponent(appName, () => config.splash); React.AppRegistry.registerComponent(appName, () => config.splash);
if (typeof goog === "undefined") { if (typeof goog === "undefined") {
loadApp(platform); loadApp(platform, devHost);
} }
} }

View File

@ -15,17 +15,13 @@
["with-profile" "prod" "cljsbuild" "once" "ios"] ["with-profile" "prod" "cljsbuild" "once" "ios"]
["with-profile" "prod" "cljsbuild" "once" "android"]]} ["with-profile" "prod" "cljsbuild" "once" "android"]]}
:profiles {:dev {:cljsbuild {:builds {:ios {:source-paths ["src" "env/dev"] :profiles {:dev {:cljsbuild {:builds {:ios {:source-paths ["src" "env/dev"]
:figwheel {:on-jsload $PROJECT_NAME_HYPHENATED$.ios.core/mount-root :figwheel true
:heads-up-display false
:debug false}
:compiler {:output-to "target/ios/not-used.js" :compiler {:output-to "target/ios/not-used.js"
:main "env.ios.main" :main "env.ios.main"
:output-dir "target/ios" :output-dir "target/ios"
:optimizations :none}} :optimizations :none}}
:android {:source-paths ["src" "env/dev"] :android {:source-paths ["src" "env/dev"]
:figwheel {:on-jsload $PROJECT_NAME_HYPHENATED$.android.core/mount-root :figwheel true
:heads-up-display false
:debug true}
:compiler {:output-to "target/android/not-used.js" :compiler {:output-to "target/android/not-used.js"
:main "env.android.main" :main "env.android.main"
:output-dir "target/android" :output-dir "target/android"

View File

@ -3,4 +3,4 @@
(defmacro require-img (defmacro require-img
"Load image from local packager service" "Load image from local packager service"
[src] [src]
{:uri (str "http://localhost:8081/" src)}) {:uri (str "http://$DEV_HOST$:8081/" src)})