react_native_util 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +2 -3
- data/lib/assets/templates/Podfile.erb +1 -11
- data/lib/react_native_util/converter.rb +80 -18
- data/lib/react_native_util/metadata.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 44ea8dd51fe614a4e2783d13f25c4d9b3a07fe363817b0beae8e625419c5bfa2
|
4
|
+
data.tar.gz: 9cda19321bfb85e2ef98a45ec0c0837d72f54da09e4e9a85d094a1d6a6d19a4e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 37d07a4d245c1eba1d5a359b254aee5f7c62c69b3c19884d3481d4c8546e1c34f293e89c68248ae91b087ce2c2ac74c0e136ebedbdb25cf4e43ed7a1843310bb
|
7
|
+
data.tar.gz: 165f4085612334cb8d1d89c1be685ededdac5f64ba176933d420b38a4ffe9a8475aaec18e690e2b3fdd2c2c201ea681de0dd640aac621a276c16276fa62cfe64
|
data/README.md
CHANGED
@@ -14,7 +14,7 @@ Community utility CLI for React Native projects.
|
|
14
14
|
_macOS required_
|
15
15
|
|
16
16
|
```bash
|
17
|
-
brew install yarn
|
17
|
+
brew install yarn # Not necessary if installing from Homebrew tap
|
18
18
|
npm install -g react-native-cli
|
19
19
|
```
|
20
20
|
|
@@ -27,8 +27,7 @@ npm install -g react-native-cli
|
|
27
27
|
## Install from Homebrew tap
|
28
28
|
|
29
29
|
```bash
|
30
|
-
brew
|
31
|
-
brew install react_native_util
|
30
|
+
brew install jdee/tap/react_native_util
|
32
31
|
```
|
33
32
|
|
34
33
|
## Gemfile
|
@@ -7,17 +7,7 @@ target '<%= app_name %>' do
|
|
7
7
|
Core
|
8
8
|
CxxBridge
|
9
9
|
DevSupport
|
10
|
-
|
11
|
-
RCTAnimation
|
12
|
-
RCTBlob
|
13
|
-
RCTGeolocation
|
14
|
-
RCTImage
|
15
|
-
RCTLinkingIOS
|
16
|
-
RCTNetwork
|
17
|
-
RCTSettings
|
18
|
-
RCTText
|
19
|
-
RCTVibration
|
20
|
-
RCTWebSocket
|
10
|
+
<%= @subspecs_from_libraries.join("\n ") %>
|
21
11
|
]
|
22
12
|
pod 'yoga', path: '../node_modules/react-native/ReactCommon/yoga'
|
23
13
|
pod 'Folly', podspec: '../node_modules/react-native/third-party-podspecs/Folly.podspec'
|
@@ -9,17 +9,21 @@ module ReactNativeUtil
|
|
9
9
|
class Converter
|
10
10
|
include Util
|
11
11
|
|
12
|
-
# [Array<String>]
|
12
|
+
# [Array<String>] Xcode projects from react-native that may be in the Libraries group
|
13
13
|
DEFAULT_DEPENDENCIES = %w[
|
14
|
-
|
14
|
+
ART
|
15
15
|
React
|
16
16
|
RCTActionSheet
|
17
|
+
RCTAnimation
|
17
18
|
RCTBlob
|
19
|
+
RCTCameraRoll
|
18
20
|
RCTGeolocation
|
19
21
|
RCTImage
|
20
22
|
RCTLinking
|
21
23
|
RCTNetwork
|
24
|
+
RCTPushNotification
|
22
25
|
RCTSettings
|
26
|
+
RCTTest
|
23
27
|
RCTText
|
24
28
|
RCTVibration
|
25
29
|
RCTWebSocket
|
@@ -38,6 +42,7 @@ module ReactNativeUtil
|
|
38
42
|
attr_reader :xcodeproj
|
39
43
|
|
40
44
|
attr_reader :options
|
45
|
+
attr_reader :react_podspec
|
41
46
|
|
42
47
|
def initialize(repo_update: nil)
|
43
48
|
@options = {}
|
@@ -60,11 +65,8 @@ module ReactNativeUtil
|
|
60
65
|
log 'package.json:'
|
61
66
|
log " app name: #{app_name.inspect}"
|
62
67
|
|
63
|
-
log 'Installing NPM dependencies with yarn'
|
64
|
-
execute 'yarn'
|
65
|
-
|
66
68
|
# 1. Detect project. TODO: Add an option to override.
|
67
|
-
@xcodeproj_path = File.expand_path "ios/#{
|
69
|
+
@xcodeproj_path = File.expand_path "ios/#{app_name}.xcodeproj"
|
68
70
|
load_xcodeproj!
|
69
71
|
log "Found Xcode project at #{xcodeproj_path}"
|
70
72
|
|
@@ -73,6 +75,13 @@ module ReactNativeUtil
|
|
73
75
|
exit 0
|
74
76
|
end
|
75
77
|
|
78
|
+
# Don't run yarn until we're sure we're proceeding,
|
79
|
+
log 'Installing NPM dependencies with yarn'
|
80
|
+
execute 'yarn'
|
81
|
+
|
82
|
+
# Unused, but should be there and parseable
|
83
|
+
load_react_podspec!
|
84
|
+
|
76
85
|
# 2. Detect native dependencies in Libraries group.
|
77
86
|
log 'Dependencies:'
|
78
87
|
dependencies.each { |d| log " #{d}" }
|
@@ -88,17 +97,19 @@ module ReactNativeUtil
|
|
88
97
|
# reload after react-native unlink
|
89
98
|
load_xcodeproj!
|
90
99
|
|
91
|
-
# 4a.
|
100
|
+
# 4a. Add Start Packager script
|
92
101
|
validate_app_target!
|
93
102
|
add_packager_script
|
94
103
|
|
104
|
+
# Make a note of pod subspecs to replace Libraries group
|
105
|
+
load_subspecs_from_libraries
|
106
|
+
|
95
107
|
# 4b. Remove Libraries group from Xcode project.
|
96
108
|
remove_libraries_group_from_project!
|
97
109
|
|
98
110
|
xcodeproj.save
|
99
111
|
|
100
112
|
# 5. Generate boilerplate Podfile.
|
101
|
-
# TODO: Determine appropriate subspecs from contents of Libraries group
|
102
113
|
generate_podfile!
|
103
114
|
|
104
115
|
# 6. Run react-native link for each dependency.
|
@@ -138,6 +149,17 @@ module ReactNativeUtil
|
|
138
149
|
raise ConversionError, "Failed to load #{xcodeproj_path}: #{e.message}"
|
139
150
|
end
|
140
151
|
|
152
|
+
def load_react_podspec!
|
153
|
+
podspec_dir = 'node_modules/react-native'
|
154
|
+
podspec_contents = File.read "#{podspec_dir}/React.podspec"
|
155
|
+
podspec_contents.gsub!(/__dir__/, podspec_dir.inspect)
|
156
|
+
|
157
|
+
require 'cocoapods-core'
|
158
|
+
# rubocop: disable Security/Eval
|
159
|
+
@react_podspec = eval(podspec_contents)
|
160
|
+
# rubocop: enable Security/Eval
|
161
|
+
end
|
162
|
+
|
141
163
|
# A representation of the Libraries group (if any) from the Xcode project.
|
142
164
|
# @return the Libraries group
|
143
165
|
def libraries_group
|
@@ -189,12 +211,27 @@ module ReactNativeUtil
|
|
189
211
|
paths.map { |p| File.expand_path p, File.join(Dir.pwd, 'ios') }
|
190
212
|
end
|
191
213
|
|
214
|
+
def library_roots
|
215
|
+
libraries_group.children.map do |library|
|
216
|
+
File.basename(library.path).sub(/\.xcodeproj$/, '')
|
217
|
+
end
|
218
|
+
end
|
219
|
+
|
192
220
|
# All static libraries from the Libraries group
|
193
221
|
# @return [Array<String>] an array of filenames
|
194
222
|
def static_libs
|
195
|
-
|
196
|
-
|
197
|
-
|
223
|
+
library_roots.map { |root| "lib#{root}.a" }
|
224
|
+
end
|
225
|
+
|
226
|
+
def load_subspecs_from_libraries
|
227
|
+
roots = library_roots - %w[React]
|
228
|
+
@subspecs_from_libraries = roots.select { |r| DEFAULT_DEPENDENCIES.include?(r) }.map do |root|
|
229
|
+
case root
|
230
|
+
when 'RCTLinking'
|
231
|
+
'RCTLinkingIOS'
|
232
|
+
else
|
233
|
+
root
|
234
|
+
end
|
198
235
|
end
|
199
236
|
end
|
200
237
|
|
@@ -242,17 +279,38 @@ module ReactNativeUtil
|
|
242
279
|
raise ConversionError, 'Uncommitted changes in repo. Please commit or stash before continuing.'
|
243
280
|
end
|
244
281
|
|
282
|
+
# Adds the Start Packager script from the React.xcodeproj under node_modules
|
283
|
+
# to the main application target before deleting React.xcodeproj from the
|
284
|
+
# Libraries group. Adjusts paths in the script to account for the different
|
285
|
+
# project location. If React.xcodeproj cannot be opened, or if the relevant
|
286
|
+
# build phase is not found, a warning is logged, and this step is skipped.
|
287
|
+
#
|
288
|
+
# TODO: The build phase is added after all other build phases. Ideally it
|
289
|
+
# can be moved to the beginning. The packager is independent of the Xcode
|
290
|
+
# build process. It may be started at any time. Starting it early is an
|
291
|
+
# optimization that allows it to load while the build is in progress.
|
292
|
+
# Currently it's possible to simply drag the build phase in Xcode to a
|
293
|
+
# higher position after running the react_pod command.
|
245
294
|
def add_packager_script
|
246
|
-
|
247
|
-
|
295
|
+
old_packager_phase = packager_phase_from_react_project
|
296
|
+
unless old_packager_phase
|
297
|
+
log 'Could not find packager build phase in React.xcodeproj. Skipping.'.yellow
|
298
|
+
return
|
299
|
+
end
|
248
300
|
|
301
|
+
# location of project is different relative to packager script
|
302
|
+
script = old_packager_phase.shell_script.gsub(%r{../scripts}, '../node_modules/react-native/scripts')
|
303
|
+
|
304
|
+
# target can't be nil. Already validated earlier by #validate_app_target!
|
249
305
|
target = xcodeproj.targets.find { |t| t.name == app_name }
|
250
|
-
phase = target.new_shell_script_build_phase
|
306
|
+
phase = target.new_shell_script_build_phase old_packager_phase.name
|
251
307
|
phase.shell_script = script
|
252
|
-
|
253
|
-
# TODO: Move this build phase to the top of the list before the pod install.
|
254
308
|
end
|
255
309
|
|
310
|
+
# Returns a Project object with the contents of the React.xcodeproj project
|
311
|
+
# from node_modules.
|
312
|
+
# @return [Xcodeproj::Project] a Project object with the contents of React.xcodeproj from node_modules
|
313
|
+
# @raise Xcodeproj::PlainInformative in case of most failures
|
256
314
|
def react_project!
|
257
315
|
return @react_project if @react_project
|
258
316
|
|
@@ -260,8 +318,12 @@ module ReactNativeUtil
|
|
260
318
|
@react_project = Xcodeproj::Project.open path
|
261
319
|
end
|
262
320
|
|
263
|
-
|
264
|
-
|
321
|
+
# Returns the original Start Packager build phase from the React.xcodeproj
|
322
|
+
# under node_modules. This contains the original script.
|
323
|
+
# @return the packager build phase if found
|
324
|
+
# @return nil if not found or React.xcodeproj cannot be opened
|
325
|
+
def packager_phase_from_react_project
|
326
|
+
react_project!.targets.first.build_phases.find { |p| p.name =~ /packager/i }
|
265
327
|
rescue Errno::ENOENT
|
266
328
|
log 'Could not open React.xcodeproj. File not found.'
|
267
329
|
nil
|
@@ -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.1.
|
4
|
+
VERSION = '0.1.3'
|
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.'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: react_native_util
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jimmy Dee
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-05-
|
11
|
+
date: 2019-05-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: cocoapods
|