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 +4 -4
- data/CHANGELOG.md +29 -0
- data/README.md +71 -2
- data/lib/{motion/project/cross_platform → motion-cross-platform}/config.rb +1 -2
- data/lib/motion-cross-platform/rake_tasks.rb +138 -0
- data/lib/motion-cross-platform/setup_android.rb +89 -0
- data/lib/motion-cross-platform/setup_ios.rb +15 -0
- data/lib/motion-cross-platform/setup_osx.rb +15 -0
- data/lib/{motion/project/cross_platform → motion-cross-platform}/stubs.rb +1 -5
- data/lib/motion-cross-platform.rb +2 -1
- metadata +16 -17
- data/lib/motion/project/cross_platform/android_setup.rb +0 -17
- data/lib/motion/project/cross_platform/ios_setup.rb +0 -12
- data/lib/motion/project/cross_platform/osx_setup.rb +0 -12
- data/lib/motion/project/cross_platform/rake_tasks.rb +0 -95
- data/lib/motion/project/cross_platform.rb +0 -1
- /data/lib/{motion/project/cross_platform → motion-cross-platform}/helpers.rb +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 45f72c8cec1453a4143c63f042a2162bb203e068a6d9a03f2ab81ad5db082e8b
|
|
4
|
+
data.tar.gz: 1adb7cee10c7562f6004cb3e504ad1b327f143af0dea3a24072a0efc975403ac
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
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:
|
|
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:
|
|
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:
|
|
28
|
-
|
|
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/
|
|
38
|
-
- lib/motion/
|
|
39
|
-
- lib/motion/
|
|
40
|
-
- lib/motion/
|
|
41
|
-
- lib/motion/
|
|
42
|
-
- lib/motion/
|
|
43
|
-
- lib/motion/
|
|
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.
|
|
65
|
-
signing_key:
|
|
64
|
+
rubygems_version: 3.7.2
|
|
66
65
|
specification_version: 4
|
|
67
|
-
summary:
|
|
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"
|
|
File without changes
|