react_native_util 0.1.3 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +34 -0
- data/lib/react_native_util/cli.rb +52 -1
- data/lib/react_native_util/converter.rb +25 -7
- data/lib/react_native_util/metadata.rb +1 -1
- data/lib/react_native_util/util.rb +29 -5
- metadata +15 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ee275507e4938a754820b5f6f57ad9ea84c7a3776994678014466610ceed3eb8
|
4
|
+
data.tar.gz: 18b76367f8df90fd0cf53616e36f4935b88d2abc50dcb360e824517c28ec228c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f99663e838c47561e06e62ce2ad252461ad8e9d7ab99c3e416542bee174dd39205feb89c71cac49dfb0899dfc2e519593d99c595cee1afb73f00619e3edfb099
|
7
|
+
data.tar.gz: 498a37155945ca93d42c8de8dab9f7c77aea8eeec275b84e7e7bb1f92acc2bf980b0d4a34cdfb2a059a794c6b4820ec56e7f9d36b41e4de0e3b30640ee772ec2
|
data/README.md
CHANGED
@@ -62,3 +62,37 @@ Now do the conversion:
|
|
62
62
|
rn react_pod
|
63
63
|
git status
|
64
64
|
```
|
65
|
+
|
66
|
+
_Typical command output:_
|
67
|
+
```
|
68
|
+
2019-05-11T12:06:17-07:00 react_native_util react_pod v0.2.0
|
69
|
+
2019-05-11T12:06:17-07:00 Darwin 18.5.0 x86_64
|
70
|
+
2019-05-11T12:06:17-07:00 Ruby 2.6.3: ~/.rvm/rubies/ruby-2.6.3/bin/ruby
|
71
|
+
2019-05-11T12:06:17-07:00 RubyGems 3.0.3: ~/.rvm/rubies/ruby-2.6.3/bin/gem
|
72
|
+
2019-05-11T12:06:17-07:00 Bundler 2.0.1: ~/.rvm/gems/ruby-2.6.3/bin/bundle
|
73
|
+
2019-05-11T12:06:17-07:00 react-native-cli: /usr/local/bin/react-native
|
74
|
+
2019-05-11T12:06:17-07:00 react-native-cli: 2.0.1
|
75
|
+
2019-05-11T12:06:17-07:00 react-native: 0.59.8
|
76
|
+
2019-05-11T12:06:18-07:00 yarn 1.16.0: /usr/local/bin/yarn
|
77
|
+
2019-05-11T12:06:18-07:00 cocoapods 1.6.1: ~/.rvm/gems/ruby-2.6.3/bin/pod
|
78
|
+
2019-05-11T12:06:18-07:00 cocoapods-core: 1.6.1
|
79
|
+
2019-05-11T12:06:18-07:00 package.json:
|
80
|
+
2019-05-11T12:06:18-07:00 app name: "TestApp"
|
81
|
+
2019-05-11T12:06:18-07:00 Found Xcode project at ~/sandbox/TestApp/ios/TestApp.xcodeproj
|
82
|
+
2019-05-11T12:06:18-07:00 Installing NPM dependencies with yarn
|
83
|
+
[✔] yarn success in 0.8 s
|
84
|
+
2019-05-11T12:06:19-07:00 Dependencies:
|
85
|
+
2019-05-11T12:06:19-07:00 react-native-webview
|
86
|
+
2019-05-11T12:06:19-07:00 Unlinking dependencies
|
87
|
+
[✔] react-native unlink react-native-webview success in 0.5 s
|
88
|
+
2019-05-11T12:06:20-07:00 Removing Libraries from TestApp
|
89
|
+
2019-05-11T12:06:20-07:00 Removing Libraries from TestAppTests
|
90
|
+
2019-05-11T12:06:20-07:00 Removing Libraries group
|
91
|
+
2019-05-11T12:06:20-07:00 Generating ios/Podfile
|
92
|
+
2019-05-11T12:06:20-07:00 Linking dependencies
|
93
|
+
[✔] react-native link react-native-webview success in 0.5 s
|
94
|
+
2019-05-11T12:06:20-07:00 Generating Pods project and ios/TestApp.xcworkspace
|
95
|
+
[✔] pod install success in 7.4 s
|
96
|
+
2019-05-11T12:06:28-07:00 Conversion complete ✅
|
97
|
+
2019-05-11T12:06:28-07:00 $ open ios/TestApp.xcworkspace
|
98
|
+
```
|
@@ -1,4 +1,6 @@
|
|
1
|
+
require 'cocoapods-core'
|
1
2
|
require 'commander'
|
3
|
+
require 'rubygems'
|
2
4
|
require_relative 'converter'
|
3
5
|
require_relative 'metadata'
|
4
6
|
|
@@ -22,15 +24,64 @@ module ReactNativeUtil
|
|
22
24
|
|
23
25
|
c.action do |_args, opts|
|
24
26
|
begin
|
27
|
+
report_configuration
|
25
28
|
converter = Converter.new repo_update: opts.repo_update
|
26
29
|
converter.convert_to_react_pod!
|
30
|
+
exit 0
|
31
|
+
rescue ExecutionError => e
|
32
|
+
# Generic command failure.
|
33
|
+
log e.message.red.bold
|
34
|
+
exit(-1)
|
27
35
|
rescue ConversionError => e
|
28
|
-
log "Conversion failed: #{e.message}"
|
36
|
+
log "Conversion failed: #{e.message}".red.bold
|
37
|
+
exit(-1)
|
29
38
|
end
|
30
39
|
end
|
31
40
|
end
|
32
41
|
|
33
42
|
run!
|
34
43
|
end
|
44
|
+
|
45
|
+
def report_configuration
|
46
|
+
log "#{NAME} react_pod v#{VERSION}".bold
|
47
|
+
|
48
|
+
log ' Installed from Homebrew' if ENV['REACT_NATIVE_UTIL_INSTALLED_FROM_HOMEBREW']
|
49
|
+
|
50
|
+
log " #{`uname -msr`}"
|
51
|
+
|
52
|
+
log " Ruby #{RUBY_VERSION}: #{RbConfig.ruby}"
|
53
|
+
log " RubyGems #{Gem::VERSION}: #{`which gem`}"
|
54
|
+
log " Bundler #{Bundler::VERSION}: #{`which bundle`}" if defined?(Bundler)
|
55
|
+
|
56
|
+
log_command_path 'react-native', 'react-native-cli', include_version: false
|
57
|
+
unless `which react-native`.empty?
|
58
|
+
react_native_info = `react-native --version`
|
59
|
+
react_native_info.split("\n").each { |l| log " #{l}" }
|
60
|
+
end
|
61
|
+
|
62
|
+
log_command_path 'yarn'
|
63
|
+
log_command_path 'pod', 'cocoapods'
|
64
|
+
|
65
|
+
log " cocoapods-core: #{Pod::CORE_VERSION}"
|
66
|
+
rescue Errno::ENOENT
|
67
|
+
# On Windows, e.g., which and uname may not work.
|
68
|
+
log 'Conversion failed: macOS required.'.red.bold
|
69
|
+
exit(-1)
|
70
|
+
end
|
71
|
+
|
72
|
+
def log_command_path(command, package = command, include_version: true)
|
73
|
+
path = `which #{command}`
|
74
|
+
if path.empty?
|
75
|
+
log " #{package}: #{'not found'.red.bold}"
|
76
|
+
return
|
77
|
+
end
|
78
|
+
|
79
|
+
if include_version
|
80
|
+
version = `#{command} --version`.chomp
|
81
|
+
log " #{package} #{version}: #{path}"
|
82
|
+
else
|
83
|
+
log " #{package}: #{path}"
|
84
|
+
end
|
85
|
+
end
|
35
86
|
end
|
36
87
|
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'erb'
|
2
2
|
require 'json'
|
3
|
+
require 'tmpdir'
|
3
4
|
require 'tty/platform'
|
4
5
|
require 'xcodeproj'
|
5
6
|
require_relative 'util'
|
@@ -75,9 +76,16 @@ module ReactNativeUtil
|
|
75
76
|
exit 0
|
76
77
|
end
|
77
78
|
|
78
|
-
|
79
|
+
if File.exist? podfile_path
|
80
|
+
log "Podfile already present at #{File.expand_path podfile_path}.".red.bold
|
81
|
+
log "A future release of #{NAME} may support integration with an existing Podfile."
|
82
|
+
log 'This release can only convert apps that do not currently use a Podfile.'
|
83
|
+
exit 1
|
84
|
+
end
|
85
|
+
|
86
|
+
# Don't run yarn until we're sure we're proceeding.
|
79
87
|
log 'Installing NPM dependencies with yarn'
|
80
|
-
|
88
|
+
run_command_with_spinner! 'yarn', log: File.join(Dir.tmpdir, 'yarn.log')
|
81
89
|
|
82
90
|
# Unused, but should be there and parseable
|
83
91
|
load_react_podspec!
|
@@ -90,8 +98,9 @@ module ReactNativeUtil
|
|
90
98
|
deps_to_add = dependencies
|
91
99
|
|
92
100
|
# 3. Run react-native unlink for each one.
|
101
|
+
log 'Unlinking dependencies'
|
93
102
|
dependencies.each do |dep|
|
94
|
-
|
103
|
+
run_command_with_spinner! 'react-native', 'unlink', dep, log: File.join(Dir.tmpdir, "react-native-unlink-#{dep}.log")
|
95
104
|
end
|
96
105
|
|
97
106
|
# reload after react-native unlink
|
@@ -113,14 +122,18 @@ module ReactNativeUtil
|
|
113
122
|
generate_podfile!
|
114
123
|
|
115
124
|
# 6. Run react-native link for each dependency.
|
125
|
+
log 'Linking dependencies'
|
116
126
|
deps_to_add.each do |dep|
|
117
|
-
|
127
|
+
run_command_with_spinner! 'react-native', 'link', dep, log: File.join(Dir.tmpdir, "react-native-link-#{dep}.log")
|
118
128
|
end
|
119
129
|
|
120
130
|
# 7. pod install
|
121
|
-
|
131
|
+
log "Generating Pods project and ios/#{app_name}.xcworkspace"
|
132
|
+
command = %w[pod install]
|
122
133
|
command << '--repo-update' if options[:repo_update]
|
123
|
-
|
134
|
+
run_command_with_spinner!(*command, chdir: 'ios', log: File.join(Dir.tmpdir, 'pod-install.log'))
|
135
|
+
|
136
|
+
log 'Conversion complete ✅'
|
124
137
|
|
125
138
|
# 8. SCM/git (add, commit - optional)
|
126
139
|
|
@@ -253,10 +266,15 @@ module ReactNativeUtil
|
|
253
266
|
raise ConversionError, "Target #{app_name} is not an application target." unless app_target.product_type == 'com.apple.product-type.application'
|
254
267
|
end
|
255
268
|
|
269
|
+
def podfile_path
|
270
|
+
'ios/Podfile'
|
271
|
+
end
|
272
|
+
|
256
273
|
# Generate a Podfile from a template.
|
257
274
|
def generate_podfile!
|
275
|
+
log "Generating #{podfile_path}"
|
258
276
|
podfile_contents = ERB.new(File.read(PODFILE_TEMPLATE_PATH)).result binding
|
259
|
-
File.open
|
277
|
+
File.open podfile_path, 'w' do |file|
|
260
278
|
file.write podfile_contents
|
261
279
|
end
|
262
280
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# Conversion tools for React Native projects
|
2
2
|
module ReactNativeUtil
|
3
3
|
NAME = 'react_native_util'
|
4
|
-
VERSION = '0.
|
4
|
+
VERSION = '0.2.0'
|
5
5
|
SUMMARY = 'Community utility CLI for React Native projects'
|
6
6
|
DESCRIPTION = 'Automatically modifies a project created with react-native ' \
|
7
7
|
'init to use the React pod from node_modules.'
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'colored'
|
2
|
+
require 'tty/spinner'
|
2
3
|
require_relative 'core_ext/io'
|
3
4
|
require_relative 'core_ext/regexp'
|
4
5
|
require_relative 'exceptions'
|
@@ -6,8 +7,27 @@ require_relative 'exceptions'
|
|
6
7
|
module ReactNativeUtil
|
7
8
|
# Module with utility methods
|
8
9
|
module Util
|
9
|
-
#
|
10
|
-
|
10
|
+
# Executes a command with no output to the terminal. A spinner is displayed
|
11
|
+
# instead. Output may be directed to a file.
|
12
|
+
# @param command Variadic command to be executed
|
13
|
+
# @param log [String, Symbol, nil] Output for command (path, IO or a symbol such as :close)
|
14
|
+
# @param chdir [String, nil] Directory in which to execute the command
|
15
|
+
# @raise ExecutionError on failure
|
16
|
+
def run_command_with_spinner!(*command, log: nil, chdir: nil)
|
17
|
+
STDOUT.flush
|
18
|
+
STDERR.flush
|
19
|
+
spinner = TTY::Spinner.new "[:spinner] #{command.shelljoin}", format: :flip
|
20
|
+
spinner.auto_spin
|
21
|
+
start_time = Time.now
|
22
|
+
execute(*command, log: nil, output: log, chdir: chdir)
|
23
|
+
elapsed = Time.now - start_time
|
24
|
+
spinner.success "success in #{format('%.1f', elapsed)} s"
|
25
|
+
rescue ExecutionError
|
26
|
+
elapsed = Time.now - start_time
|
27
|
+
spinner.error "failure in #{format('%.1f', elapsed)} s"
|
28
|
+
STDOUT.log "See #{log} for details." if log && log.kind_of?(String)
|
29
|
+
raise
|
30
|
+
end
|
11
31
|
|
12
32
|
# Execute the specified command. If output is non-nil, generate a log
|
13
33
|
# at that location. Main log (open) is log.
|
@@ -24,7 +44,7 @@ module ReactNativeUtil
|
|
24
44
|
options = chdir.nil? ? {} : { chdir: chdir }
|
25
45
|
system(*command, options.merge(%i[err out] => output))
|
26
46
|
|
27
|
-
raise ExecutionError unless $?.success?
|
47
|
+
raise ExecutionError, "#{command.shelljoin}: #{$?}" unless $?.success?
|
28
48
|
|
29
49
|
nil
|
30
50
|
end
|
@@ -53,12 +73,16 @@ module ReactNativeUtil
|
|
53
73
|
value.to_f
|
54
74
|
end
|
55
75
|
|
76
|
+
# [TTY::Platform] Object with platform information
|
77
|
+
def platform
|
78
|
+
@platform ||= TTY::Platform.new
|
79
|
+
end
|
80
|
+
|
56
81
|
# Convenience method to determine if running on a Mac.
|
57
82
|
# @return true if running on a Mac
|
58
83
|
# @return false otherwise
|
59
84
|
def mac?
|
60
|
-
|
61
|
-
@platform.mac?
|
85
|
+
platform.mac?
|
62
86
|
end
|
63
87
|
|
64
88
|
# Wrapper for STDOUT.log
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: react_native_util
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jimmy Dee
|
@@ -66,6 +66,20 @@ dependencies:
|
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0.2'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: tty-spinner
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0.9'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0.9'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: bundler
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|