motion-cross-platform 1.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 56c3e353042268f94150b0dd2f0852e576ab0c2944dc5336d55a6647aef9c907
4
- data.tar.gz: 00bf2f4df6eeef0eb6ed01d926bc3ac807dc22b18af356b15edac1aa0334e027
3
+ metadata.gz: 45f72c8cec1453a4143c63f042a2162bb203e068a6d9a03f2ab81ad5db082e8b
4
+ data.tar.gz: 1adb7cee10c7562f6004cb3e504ad1b327f143af0dea3a24072a0efc975403ac
5
5
  SHA512:
6
- metadata.gz: 7073a861a06f8723e971c747cf650cd867e2e363a2d6c25eb377476c440439e6661aed9146b0cfcb4b62d375454199131e765449523e64c9cc518e03997988c4
7
- data.tar.gz: cd72e96c1a74b08bedb3b234037321ce1984644e941ec29125f1697ed443640413459f8f84f116a912681aee72b50f9ebacbb5a712f44f8e270c1675428839fd
6
+ metadata.gz: 82e70c5e6e82e7e254a5f5fcdcc1f7752a069c74eaf24d68787948260b3f9928b12257bf54675aef7e8ab5763cc917195a94b53a54012a1a72666da338a4bb49
7
+ data.tar.gz: bbcf518db5cfe438e2850045261fc5d2d5318fd3af5037cead6f3428da296687b112aaf3f3fd7d5f5cd62913b2e8bde677ebc3ad2913ff0ac014c8373abfa256
data/CHANGELOG.md ADDED
@@ -0,0 +1,29 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project are documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
6
+
7
+ ## [1.0.1] - 2026-08-03
8
+
9
+ This release is a ground-up rewrite of the gem internals. The public interface — `require "motion-cross-platform"` in your Rakefile and the namespaced rake tasks — is unchanged.
10
+
11
+ ### Fixed
12
+
13
+ - Platform source filtering was broken in 1.0: every platform setup referenced an undefined `path` variable, raising a `NameError` during builds.
14
+
15
+ ### Added
16
+
17
+ - `app/cocoa/` directory convention for code shared between iOS and macOS (excluded from Android builds).
18
+ - Per-platform spec directories: `spec/ios/`, `spec/android/`, and `spec/osx/` are filtered so each platform runs only its own specs, plus any shared specs at the `spec/` root.
19
+ - Android: an emulator is booted automatically when one is needed and none is running (first available AVD, waits for boot to complete).
20
+ - Android: builds output to `build/android` and use `resources/` as the assets directory.
21
+ - A demo app (`demo_app/`) exercising all three platforms, used to develop and test the gem.
22
+
23
+ ### Changed
24
+
25
+ - Internal restructure: code now lives in `lib/motion-cross-platform/` (previously `lib/motion/project/cross_platform/`).
26
+
27
+ ## [1.0] - 2024-03-05
28
+
29
+ - Initial release: namespaced rake tasks (`rake ios`, `rake android`, `rake osx`) proxying RubyMotion's per-platform build templates, platform-specific source directories (`app/ios/`, `app/android/`, `app/osx/`), per-platform configuration in a single Rakefile via `app.platform`, and a combined iOS + Android "super REPL" (`rake mobile`).
data/README.md CHANGED
@@ -1,6 +1,8 @@
1
1
  # motion-cross-platform
2
2
 
3
- Provides a common starting point for cross-platform RubyMotion gems and applications.
3
+ Build iOS, Android, and macOS apps and gems from a single RubyMotion codebase.
4
+
5
+ This gem provides a project structure allowing you to share code across iOS, Android, and macOS platforms while maintaining platform-specific customizations where needed.
4
6
 
5
7
  ## Installation
6
8
 
@@ -18,7 +20,74 @@ Or install it yourself as:
18
20
 
19
21
  ## Usage
20
22
 
21
- TODO: Write usage instructions here
23
+ ### Project Structure
24
+
25
+ Organize your app code into platform-specific directories:
26
+
27
+ ```
28
+ app/
29
+ app_delegate.rb # Shared code (loaded by all platforms)
30
+ ios/ # iOS-specific code
31
+ android/ # Android-specific code
32
+ osx/ # macOS-specific code
33
+ cocoa/ # Shared iOS/macOS code (excluded from Android)
34
+ ```
35
+
36
+ ### Configuration
37
+
38
+ In your `Rakefile`, use the `platform` helper to define platform-specific settings:
39
+
40
+ ```ruby
41
+ Motion::Project::App.setup do |app|
42
+ app.name = 'MyApp'
43
+
44
+ app.platform :ios do
45
+ app.deployment_target = '12.0'
46
+ end
47
+
48
+ app.platform :android do
49
+ app.api_version = '29'
50
+ end
51
+
52
+ app.platform :osx do
53
+ app.deployment_target = '10.14'
54
+ end
55
+ end
56
+ ```
57
+
58
+ ### Running Your App
59
+
60
+ Build and run for each platform using the namespaced rake tasks:
61
+
62
+ ```bash
63
+ # iOS
64
+ rake ios # Build and run in simulator
65
+ rake ios:device # Build and run on device
66
+ rake ios:spec # Run tests in simulator
67
+
68
+ # Android
69
+ rake android # Build and run in emulator
70
+ rake android:device # Build and run on device
71
+ rake android:spec # Run tests in emulator
72
+
73
+ # macOS
74
+ rake osx # Build and run
75
+ rake osx:spec # Run tests
76
+ ```
77
+
78
+ ### Super REPL
79
+
80
+ Run iOS and Android simultaneously with a combined REPL:
81
+
82
+ ```bash
83
+ rake mobile # or: rake super_repl
84
+ ```
85
+
86
+ This launches both simulators and lets you evaluate Ruby expressions on both platforms at once.
87
+
88
+ ### Available Tasks
89
+
90
+ Run `rake -T` to see all available tasks, or `rake ios -T`, `rake android -T`, `rake osx -T` for platform-specific tasks.
22
91
 
23
92
  ## Contributing
24
93
 
@@ -6,8 +6,7 @@ module Motion
6
6
  # Allows us to define the config in one file but only
7
7
  # execute it when it matches the specified platform.
8
8
  def platform(platform_name)
9
- return unless platform_name.to_sym == template
10
- yield
9
+ yield if platform_name.to_sym == template
11
10
  end
12
11
  end
13
12
  end
@@ -0,0 +1,138 @@
1
+ # encoding: utf-8
2
+
3
+ if platform = ENV["platform"]
4
+ require_relative "config"
5
+ require_relative "setup_#{platform}"
6
+ else
7
+ require_relative "helpers"
8
+
9
+ desc "Build the app, then run it in the emulator"
10
+ task :android => "android:emulator"
11
+
12
+ define_rake_tasks(
13
+ android: {
14
+ "build" => "Create an application package file (.apk)",
15
+ "clean" => "Clear local build objects",
16
+ "clean:all" => "Clean all build objects",
17
+ "config" => "Show project config",
18
+ "ctags" => "Generate ctags",
19
+ "device" => "Build the app then run it on the device",
20
+ "device:install" => "Install the app on the device",
21
+ "device:start" => "Start the app's main intent on the device",
22
+ "emulator" => "Build the app then run it in the emulator",
23
+ "emulator:boot" => "Boot an emulator if one is not already running",
24
+ "emulator:install" => "Install the app in the emulator",
25
+ "emulator:start" => "Start the app's main intent in the emulator",
26
+ "release" => "Create an application package file (.apk) for release (Google Play)",
27
+ "spec" => "Same as spec:emulator",
28
+ "spec:device" => "Run the test/spec suite on the device",
29
+ "spec:emulator" => "Run the test/spec suite in the emulator",
30
+ "gradle:install" => "Download and build dependencies"
31
+ }
32
+ )
33
+
34
+ desc "Build the app, then run it in the simulator"
35
+ task :ios => "ios:simulator"
36
+
37
+ define_rake_tasks(
38
+ ios: {
39
+ "archive" => "Create an .ipa archive",
40
+ "archive:distribution" => "Create an .ipa archive for distribution (AppStore)",
41
+ "build" => "Build everything",
42
+ "build:device" => "Build the device version",
43
+ "build:simulator" => "Build the simulator version",
44
+ "clean" => "Clear local build objects",
45
+ "clean:all" => "Clean all build objects",
46
+ "config" => "Show project config",
47
+ "crashlog" => "Same as crashlog:simulator",
48
+ "crashlog:device" => "Retrieve and symbolicate crash logs generated by the app on the device, and open the latest generated one",
49
+ "crashlog:simulator" => "Open the latest crash report generated by the app in the simulator",
50
+ "ctags" => "Generate ctags",
51
+ "device" => "Deploy on the device",
52
+ "profile" => "Same as profile:simulator",
53
+ "profile:device" => "Run a build on the device through Instruments",
54
+ "profile:device:templates" => "List all built-in device Instruments templates",
55
+ "profile:simulator" => "Run a build on the simulator through Instruments",
56
+ "profile:simulator:templates" => "List all built-in Simulator Instruments templates",
57
+ "simulator" => "Run the simulator",
58
+ "spec" => "Same as spec:simulator",
59
+ "spec:device" => "Run the test/spec suite on the device",
60
+ "spec:simulator" => "Run the test/spec suite in the simulator",
61
+ "static" => "Create a .a static library",
62
+ "watch" => "Same as watch:simulator",
63
+ "watch:simulator" => "Run the Watch application on the simulator"
64
+ }
65
+ )
66
+
67
+ desc "Build the app, then run it"
68
+ task :osx => "osx:run"
69
+
70
+ define_rake_tasks(
71
+ osx: {
72
+ "archive" => "Create a .pkg archive",
73
+ "archive:distribution" => "Create a .pkg archive for distribution (AppStore)",
74
+ "build" => "Build the project for development",
75
+ "build:release" => "Build the project for release",
76
+ "clean" => "Clear local build objects",
77
+ "config" => "Show project config",
78
+ "crashlog" => "Open the latest crash report generated for the app",
79
+ "run" => "Run the project",
80
+ "spec" => "Run the test/spec suite",
81
+ "static" => "Create a .a static library"
82
+ }
83
+ )
84
+
85
+ desc "Build and launch both iOS and Android in a combined REPL"
86
+ task mobile: :super_repl
87
+
88
+ desc "Start a combined iOS/Android REPL"
89
+ task "super_repl" do
90
+ require "readline"
91
+
92
+ cmd = %w{ rake }
93
+ ios_cmd = cmd + ["ios:simulator"]
94
+ android_cmd = cmd + ["android:emulator:start"]
95
+
96
+ if ENV.fetch("skip_build", nil)
97
+ ios_cmd << "skip_build=1"
98
+ android_cmd << "skip_build=1"
99
+ end
100
+
101
+ ios_io = nil
102
+ android_io = nil
103
+
104
+ begin
105
+ puts "Starting iOS simulator..."
106
+ ios_io = IO.popen(ios_cmd.join(" "), "w")
107
+
108
+ puts "Starting Android emulator..."
109
+ android_io = IO.popen(android_cmd.join(" "), "w")
110
+
111
+ puts "Super REPL ready. Type expressions to evaluate on both platforms."
112
+ puts "Press Ctrl-D or type 'exit' to quit.\n\n"
113
+
114
+ while expr = Readline.readline("> ", true)
115
+ break if expr.strip.downcase == "exit"
116
+
117
+ ios_io.puts expr unless ios_io.closed?
118
+ android_io.puts expr unless android_io.closed?
119
+ sleep 0.2
120
+ end
121
+ rescue Interrupt
122
+ puts "\nInterrupted."
123
+ rescue Errno::EPIPE => e
124
+ puts "\nError: Lost connection to a simulator process."
125
+ puts "One of the processes may have crashed: #{e.message}"
126
+ ensure
127
+ puts "\nShutting down..."
128
+ [ios_io, android_io].compact.each do |io|
129
+ begin
130
+ io.close unless io.closed?
131
+ rescue IOError
132
+ # Already closed, ignore
133
+ end
134
+ end
135
+ puts "Super REPL closed."
136
+ end
137
+ end
138
+ end
@@ -0,0 +1,89 @@
1
+ # encoding: utf-8
2
+
3
+ require "motion/project/template/android"
4
+ begin
5
+ require "motion-gradle"
6
+ rescue LoadError
7
+ end
8
+
9
+ Motion::Project::App.setup do |app|
10
+ app.build_dir = "build/android"
11
+ app.assets_dirs << "resources"
12
+ app.resources_dirs = []
13
+
14
+ app.files.delete_if {|path| path.start_with?("./app/ios") }
15
+ app.files.delete_if {|path| path.start_with?("./app/osx") }
16
+ app.files.delete_if {|path| path.start_with?("./app/cocoa") }
17
+
18
+ app.spec_files.delete_if {|path| path.start_with?("./spec/ios") }
19
+ app.spec_files.delete_if {|path| path.start_with?("./spec/osx") }
20
+ end
21
+
22
+ # adb_path is provided by the android template.
23
+ def emulator_path
24
+ "#{App.config.sdk_path}/emulator/emulator"
25
+ end
26
+
27
+ def available_avds
28
+ `"#{emulator_path}" -list-avds 2>/dev/null`.strip.split("\n").reject(&:empty?)
29
+ end
30
+
31
+ def running_emulator_id
32
+ output = `"#{adb_path}" -e devices 2>/dev/null`
33
+ # Parse output to find emulator device (e.g., "emulator-5554")
34
+ output.lines.drop(1).each do |line|
35
+ device = line.split.first
36
+ return device if device && device.start_with?("emulator-")
37
+ end
38
+ nil
39
+ end
40
+
41
+ def ensure_emulator_running
42
+ if running_emulator_id
43
+ App.info "Emulate", "Emulator is already running"
44
+ return
45
+ end
46
+
47
+ avds = available_avds
48
+ if avds.empty?
49
+ App.fail "No emulators found. Create one with Android Studio or `avdmanager`."
50
+ end
51
+
52
+ avd_name = avds.first
53
+ App.info "Emulate", "Starting emulator \"#{avd_name}\"..."
54
+
55
+ # Start emulator in background
56
+ Process.detach(spawn(emulator_path, "-avd", avd_name, [:out, :err] => "/dev/null"))
57
+
58
+ # Wait for emulator to be ready
59
+ App.info "Emulate", "Waiting for emulator to boot..."
60
+ timeout = 120 # seconds
61
+ start_time = Time.now
62
+
63
+ loop do
64
+ if Time.now - start_time > timeout
65
+ App.fail "Emulator failed to start within #{timeout} seconds"
66
+ end
67
+
68
+ if running_emulator_id
69
+ boot_completed = `"#{adb_path}" -e shell getprop sys.boot_completed 2>/dev/null`.strip
70
+ if boot_completed == "1"
71
+ break
72
+ end
73
+ end
74
+
75
+ sleep 2
76
+ end
77
+ end
78
+
79
+ namespace :emulator do
80
+ desc "Boot an emulator if one is not already running"
81
+ task :boot do
82
+ ensure_emulator_running
83
+ end
84
+ end
85
+
86
+ # adb-based emulator tasks fail unless an emulator is already running.
87
+ %w[emulator:install emulator:start].each do |task_name|
88
+ Rake::Task[task_name].enhance(["emulator:boot"])
89
+ end
@@ -0,0 +1,15 @@
1
+ # encoding: utf-8
2
+
3
+ require "motion/project/template/ios"
4
+ begin
5
+ require "motion-cocoapods"
6
+ rescue LoadError
7
+ end
8
+
9
+ Motion::Project::App.setup do |app|
10
+ app.files.delete_if {|path| path.start_with?("./app/android") }
11
+ app.files.delete_if {|path| path.start_with?("./app/osx") }
12
+
13
+ app.spec_files.delete_if {|path| path.start_with?("./spec/android") }
14
+ app.spec_files.delete_if {|path| path.start_with?("./spec/osx") }
15
+ end
@@ -0,0 +1,15 @@
1
+ # encoding: utf-8
2
+
3
+ require "motion/project/template/osx"
4
+ begin
5
+ require "motion-cocoapods"
6
+ rescue LoadError
7
+ end
8
+
9
+ Motion::Project::App.setup do |app|
10
+ app.files.delete_if {|path| path.start_with?("./app/android") }
11
+ app.files.delete_if {|path| path.start_with?("./app/ios") }
12
+
13
+ app.spec_files.delete_if {|path| path.start_with?("./spec/android") }
14
+ app.spec_files.delete_if {|path| path.start_with?("./spec/ios") }
15
+ end
@@ -2,13 +2,9 @@ module Motion
2
2
  module Project
3
3
  class Config
4
4
  end
5
- end
6
- end
7
5
 
8
- module Motion
9
- module Project
10
6
  class App
11
- def template
7
+ def self.template
12
8
  :cross_platform
13
9
  end
14
10
 
@@ -1,3 +1,4 @@
1
1
  # encoding: utf-8
2
2
 
3
- require_relative "motion/project/cross_platform/rake_tasks"
3
+ require_relative "motion-cross-platform/stubs"
4
+ require_relative "motion-cross-platform/rake_tasks"
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: motion-cross-platform
3
3
  version: !ruby/object:Gem::Version
4
- version: '1.0'
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Havens
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2024-03-05 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: rake
@@ -24,29 +23,30 @@ dependencies:
24
23
  - - ">="
25
24
  - !ruby/object:Gem::Version
26
25
  version: '0'
27
- description: Provides a common starting point for cross-platform RubyMotion gems and
28
- applications.
26
+ description: Adds namespaced rake tasks (rake ios, rake android, rake osx) and source
27
+ directory conventions so one RubyMotion project can target iOS, Android, and macOS
28
+ — shared code lives in app/, platform-specific code in app/ios, app/android, and
29
+ app/osx, and per-platform configuration in a single Rakefile.
29
30
  email:
30
31
  - email@andrewhavens.com
31
32
  executables: []
32
33
  extensions: []
33
34
  extra_rdoc_files: []
34
35
  files:
36
+ - CHANGELOG.md
35
37
  - README.md
36
38
  - lib/motion-cross-platform.rb
37
- - lib/motion/project/cross_platform.rb
38
- - lib/motion/project/cross_platform/android_setup.rb
39
- - lib/motion/project/cross_platform/config.rb
40
- - lib/motion/project/cross_platform/helpers.rb
41
- - lib/motion/project/cross_platform/ios_setup.rb
42
- - lib/motion/project/cross_platform/osx_setup.rb
43
- - lib/motion/project/cross_platform/rake_tasks.rb
44
- - lib/motion/project/cross_platform/stubs.rb
39
+ - lib/motion-cross-platform/config.rb
40
+ - lib/motion-cross-platform/helpers.rb
41
+ - lib/motion-cross-platform/rake_tasks.rb
42
+ - lib/motion-cross-platform/setup_android.rb
43
+ - lib/motion-cross-platform/setup_ios.rb
44
+ - lib/motion-cross-platform/setup_osx.rb
45
+ - lib/motion-cross-platform/stubs.rb
45
46
  homepage: https://github.com/rubymotion-community/motion-cross-platform
46
47
  licenses:
47
48
  - MIT
48
49
  metadata: {}
49
- post_install_message:
50
50
  rdoc_options: []
51
51
  require_paths:
52
52
  - lib
@@ -61,8 +61,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
61
61
  - !ruby/object:Gem::Version
62
62
  version: '0'
63
63
  requirements: []
64
- rubygems_version: 3.4.22
65
- signing_key:
64
+ rubygems_version: 3.7.2
66
65
  specification_version: 4
67
- summary: Provides a common starting point for cross-platform RubyMotion gems and applications.
66
+ summary: Build iOS, Android, and macOS apps and gems from a single RubyMotion codebase.
68
67
  test_files: []
@@ -1,17 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require "motion/project/template/android"
4
- begin
5
- require "motion-gradle"
6
- rescue LoadError
7
- end
8
-
9
- Motion::Project::App.setup do |app|
10
- app.build_dir = "build/android"
11
- app.assets_dirs << "resources"
12
- app.resources_dirs = []
13
-
14
- app.files.delete_if { path.start_with?("./app/ios") }
15
- app.files.delete_if { path.start_with?("./app/osx") }
16
- app.files.delete_if { path.start_with?("./app/cocoa") }
17
- end
@@ -1,12 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require "motion/project/template/ios"
4
- begin
5
- require "motion-cocoapods"
6
- rescue LoadError
7
- end
8
-
9
- Motion::Project::App.setup do |app|
10
- app.files.delete_if { path.start_with?("./app/android") }
11
- app.files.delete_if { path.start_with?("./app/osx") }
12
- end
@@ -1,12 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require "motion/project/template/osx"
4
- begin
5
- require "motion-cocoapods"
6
- rescue LoadError
7
- end
8
-
9
- Motion::Project::App.setup do |app|
10
- app.files.delete_if { path.start_with?("./app/android") }
11
- app.files.delete_if { path.start_with?("./app/ios") }
12
- end
@@ -1,95 +0,0 @@
1
- # encoding: utf-8
2
-
3
- if platform = ENV["platform"]
4
- require_relative "config"
5
- require_relative "#{platform}_setup"
6
- else
7
- require_relative "stubs"
8
- require_relative "helpers"
9
-
10
- define_rake_tasks(
11
- android: {
12
- "build" => "Create an application package file (.apk)",
13
- "clean" => "Clear local build objects",
14
- "clean:all" => "Clean all build objects",
15
- "config" => "Show project config",
16
- "ctags" => "Generate ctags",
17
- "default" => "Same as emulator",
18
- "device" => "Build the app then run it on the device",
19
- "device:install" => "Install the app on the device",
20
- "device:start" => "Start the app's main intent on the device",
21
- "emulator" => "Build the app then run it in the emulator",
22
- "emulator:install" => "Install the app in the emulator",
23
- "emulator:start" => "Start the app's main intent in the emulator",
24
- "release" => "Create an application package file (.apk) for release (Google Play)",
25
- "spec" => "Same as spec:emulator",
26
- "spec:device" => "Run the test/spec suite on the device",
27
- "spec:emulator" => "Run the test/spec suite in the emulator",
28
- "gradle:install" => "Download and build dependencies"
29
- },
30
- ios: {
31
- "archive" => "Create an .ipa archive",
32
- "archive:distribution" => "Create an .ipa archive for distribution (AppStore)",
33
- "build" => "Build everything",
34
- "build:device" => "Build the device version",
35
- "build:simulator" => "Build the simulator version",
36
- "clean" => "Clear local build objects",
37
- "clean:all" => "Clean all build objects",
38
- "config" => "Show project config",
39
- "crashlog" => "Same as crashlog:simulator",
40
- "crashlog:device" => "Retrieve and symbolicate crash logs generated by the app on the device, and open the latest generated one",
41
- "crashlog:simulator" => "Open the latest crash report generated by the app in the simulator",
42
- "ctags" => "Generate ctags",
43
- "default" => "Build the project, then run the simulator",
44
- "device" => "Deploy on the device",
45
- "profile" => "Same as profile:simulator",
46
- "profile:device" => "Run a build on the device through Instruments",
47
- "profile:device:templates" => "List all built-in device Instruments templates",
48
- "profile:simulator" => "Run a build on the simulator through Instruments",
49
- "profile:simulator:templates" => "List all built-in Simulator Instruments templates",
50
- "simulator" => "Run the simulator",
51
- "spec" => "Same as spec:simulator",
52
- "spec:device" => "Run the test/spec suite on the device",
53
- "spec:simulator" => "Run the test/spec suite in the simulator",
54
- "static" => "Create a .a static library",
55
- "watch" => "Same as watch:simulator",
56
- "watch:simulator" => "Run the Watch application on the simulator"
57
- },
58
- osx: {
59
- "archive" => "Create a .pkg archive",
60
- "archive:distribution" => "Create a .pkg archive for distribution (AppStore)",
61
- "build" => "Build the project for development",
62
- "build:release" => "Build the project for release",
63
- "clean" => "Clear local build objects",
64
- "config" => "Show project config",
65
- "crashlog" => "Open the latest crash report generated for the app",
66
- "default" => "Build the project, then run the app",
67
- "run" => "Run the project",
68
- "spec" => "Run the test/spec suite",
69
- "static" => "Create a .a static library"
70
- }
71
- )
72
-
73
- desc "Start a combined iOS/Android REPL"
74
- task "super_repl" do
75
- require "readline"
76
-
77
- cmd = %w{ rake }
78
- ios_cmd = cmd + ["ios:simulator"]
79
- android_cmd = cmd + ["android:emulator:start"]
80
-
81
- if ENV.fetch("skip_build", nil)
82
- ios_cmd << "skip_build=1"
83
- android_cmd << "skip_build=1"
84
- end
85
-
86
- ios_io = IO.popen(ios_cmd.join(" "), "w")
87
- android_io = IO.popen(android_cmd.join(" "), "w")
88
-
89
- while expr = Readline.readline("> ", true)
90
- ios_io.puts expr
91
- android_io.puts expr
92
- sleep 0.2
93
- end
94
- end
95
- end
@@ -1 +0,0 @@
1
- require_relative "cross_platform/rake_tasks"