pod-builder 2.0.0.beta.18 ā†’ 2.0.0.beta.24

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.
Files changed (58) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -2
  3. data/README.md +13 -13
  4. data/exe/pod_builder +27 -16
  5. data/lib/pod_builder/command/build.rb +28 -159
  6. data/lib/pod_builder/command/build_all.rb +2 -2
  7. data/lib/pod_builder/command/clean.rb +34 -53
  8. data/lib/pod_builder/command/clear_lldbinit.rb +6 -2
  9. data/lib/pod_builder/command/deintegrate.rb +27 -6
  10. data/lib/pod_builder/command/generate_lfs.rb +1 -1
  11. data/lib/pod_builder/command/generate_podspec.rb +3 -2
  12. data/lib/pod_builder/command/info.rb +1 -1
  13. data/lib/pod_builder/command/init.rb +39 -14
  14. data/lib/pod_builder/command/install_sources.rb +20 -13
  15. data/lib/pod_builder/command/none.rb +2 -2
  16. data/lib/pod_builder/command/restore_all.rb +4 -4
  17. data/lib/pod_builder/command/switch.rb +56 -14
  18. data/lib/pod_builder/command/sync_podfile.rb +3 -2
  19. data/lib/pod_builder/command/update.rb +5 -6
  20. data/lib/pod_builder/command/update_lldbinit.rb +10 -8
  21. data/lib/pod_builder/configuration.rb +27 -6
  22. data/lib/pod_builder/core.rb +52 -16
  23. data/lib/pod_builder/info.rb +11 -11
  24. data/lib/pod_builder/install.rb +202 -186
  25. data/lib/pod_builder/licenses.rb +4 -4
  26. data/lib/pod_builder/podfile.rb +243 -85
  27. data/lib/pod_builder/podfile/post_actions.rb +9 -14
  28. data/lib/pod_builder/podfile_cp.rb +93 -0
  29. data/lib/pod_builder/podfile_item.rb +41 -20
  30. data/lib/pod_builder/podspec.rb +33 -16
  31. data/lib/pod_builder/rome/post_install.rb +121 -129
  32. data/lib/pod_builder/rome/pre_install.rb +1 -1
  33. data/lib/pod_builder/templates/build_podfile.template +2 -2
  34. data/lib/pod_builder/version.rb +1 -1
  35. data/pod-builder.gemspec +2 -2
  36. metadata +4 -25
  37. data/Example/Frameworks/.gitignore +0 -6
  38. data/Example/Frameworks/.pod_builder/pod_builder +0 -0
  39. data/Example/Frameworks/PodBuilder.json +0 -38
  40. data/Example/Frameworks/Podfile +0 -23
  41. data/Example/Frameworks/Podfile.restore +0 -40
  42. data/Example/PodBuilderExample.xcodeproj/project.pbxproj +0 -411
  43. data/Example/PodBuilderExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  44. data/Example/PodBuilderExample.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
  45. data/Example/PodBuilderExample.xcodeproj/project.xcworkspace/xcuserdata/tomas.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  46. data/Example/PodBuilderExample.xcworkspace/contents.xcworkspacedata +0 -10
  47. data/Example/PodBuilderExample.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
  48. data/Example/PodBuilderExample/AppDelegate.swift +0 -51
  49. data/Example/PodBuilderExample/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -98
  50. data/Example/PodBuilderExample/Assets.xcassets/Contents.json +0 -6
  51. data/Example/PodBuilderExample/Base.lproj/LaunchScreen.storyboard +0 -25
  52. data/Example/PodBuilderExample/Base.lproj/Main.storyboard +0 -24
  53. data/Example/PodBuilderExample/Info.plist +0 -45
  54. data/Example/PodBuilderExample/ViewController.swift +0 -25
  55. data/Example/Podfile +0 -51
  56. data/Example/Podfile.lock +0 -435
  57. data/Example/Pods-acknowledgements.md +0 -210
  58. data/Example/Pods-acknowledgements.plist +0 -206
@@ -12,19 +12,19 @@
12
12
 
13
13
  if current_licenses.count > 0
14
14
  licenses_header = current_licenses.shift
15
- raise "Unexpected license found in header" if licenses_header.has_key?("License")
15
+ raise "\n\nUnexpected license found in header".red if licenses_header.has_key?("License")
16
16
  end
17
17
  if current_licenses.count > 0
18
18
  license_footer = current_licenses.pop
19
- raise "Unexpected license found in footer" if license_footer.has_key?("License")
19
+ raise "\n\nUnexpected license found in footer".red if license_footer.has_key?("License")
20
20
  end
21
21
  end
22
22
 
23
23
  if licenses.count > 0
24
24
  licenses_header = licenses.shift
25
- raise "Unexpected license found in header" if licenses_header.has_key?("License")
25
+ raise "\n\nUnexpected license found in header".red if licenses_header.has_key?("License")
26
26
  license_footer = licenses.pop
27
- raise "Unexpected license found in footer" if license_footer.has_key?("License")
27
+ raise "\n\nUnexpected license found in footer".red if license_footer.has_key?("License")
28
28
 
29
29
  lincenses_titles = licenses.map { |x| x["Title"] }
30
30
  current_licenses.select! { |x| !lincenses_titles.include?(x["Title"]) }
@@ -1,13 +1,14 @@
1
+ require 'json'
1
2
  module PodBuilder
2
3
  class Podfile
3
4
  PODBUILDER_LOCK_ACTION = ["raise \"\\nšŸšØ Do not launch 'pod install' manually, use `pod_builder` instead!\\n\" if !File.exist?('pod_builder.lock')"].freeze
4
- POST_INSTALL_ACTIONS = ["require 'pod_builder/podfile/post_actions'", "PodBuilder::Podfile::remove_target_support_duplicate_entries", "PodBuilder::Podfile::check_target_support_resource_collisions"].freeze
5
+ POST_INSTALL_ACTIONS = ["require 'pod_builder/podfile/post_actions'", "PodBuilder::Podfile::pod_builder_post_process"].freeze
5
6
 
6
7
  PRE_INSTALL_ACTIONS = ["Pod::Installer::Xcode::TargetValidator.send(:define_method, :verify_no_duplicate_framework_and_library_names) {}"].freeze
7
8
  private_constant :PRE_INSTALL_ACTIONS
8
9
 
9
10
  def self.from_podfile_items(items, analyzer, build_configuration)
10
- raise "no items" unless items.count > 0
11
+ raise "\n\nno items".red unless items.count > 0
11
12
 
12
13
  sources = analyzer.sources
13
14
 
@@ -15,6 +16,11 @@ module PodBuilder
15
16
  podfile = File.read("#{cwd}/templates/build_podfile.template")
16
17
 
17
18
  platform = analyzer.instance_variable_get("@result").targets.first.platform
19
+
20
+ install_using_frameworks = install_using_frameworks(analyzer)
21
+
22
+ podfile.sub!("%%%use_frameworks%%%", install_using_frameworks ? "use_frameworks!" : "")
23
+
18
24
  podfile.sub!("%%%platform_name%%%", platform.name.to_s)
19
25
  podfile.sub!("%%%deployment_version%%%", platform.deployment_target.version)
20
26
 
@@ -49,7 +55,7 @@ module PodBuilder
49
55
 
50
56
  if Configuration.build_system == "Legacy"
51
57
  build_settings['BUILD_LIBRARY_FOR_DISTRIBUTION'] = "NO"
52
- raise "\n\nCan't enable library evolution support with legacy build system!" if Configuration.library_evolution_support
58
+ raise "\n\nCan't enable library evolution support with legacy build system!".red if Configuration.library_evolution_support
53
59
  elsif Configuration.library_evolution_support
54
60
  build_settings['BUILD_LIBRARY_FOR_DISTRIBUTION'] = "YES"
55
61
  end
@@ -151,7 +157,11 @@ module PodBuilder
151
157
  File.write(podfile_restore_path, podfile_content.join("\n"))
152
158
  end
153
159
 
154
- def self.write_prebuilt(all_buildable_items, analyzer)
160
+ def self.write_prebuilt(all_buildable_items, analyzer)
161
+ if Configuration.react_native_project
162
+ return write_prebuilt_react_native(all_buildable_items, analyzer)
163
+ end
164
+
155
165
  puts "Updating Application Podfile".yellow
156
166
 
157
167
  explicit_deps = analyzer.explicit_pods()
@@ -171,45 +181,33 @@ module PodBuilder
171
181
  next
172
182
  end
173
183
 
174
- if pod_name = pod_definition_in(line, true)
184
+ if pod_name = pod_definition_in(line, true)
175
185
  if podfile_item = all_buildable_items.detect { |x| x.name == pod_name }
176
- if Podspec.include?(podfile_item.root_name)
177
- if podfile_item.vendored_framework_path.nil?
178
- marker = podfile_item.prebuilt_marker()
179
-
180
- podfile_item_dependency_items = all_buildable_items.select { |x| podfile_item.dependency_names.include?(x.name) && x.vendored_framework_path.nil? == false }
181
- if podfile_item_dependency_items.count > 0
182
- prebuilt_lines += podfile_item_dependency_items.map { |x| "#{line.detect_indentation}#{x.prebuilt_entry(false)}#{marker}\n" }.uniq
183
- else
184
- prebuilt_lines.push(line)
185
- end
186
- else
187
- prebuilt_lines.push("#{line.detect_indentation}#{podfile_item.prebuilt_entry}\n")
188
-
189
- marker = podfile_item.prebuilt_marker()
190
- non_explicit_dependencies = podfile_item.recursive_dependencies(all_buildable_items) - explicit_deps
191
- non_explicit_dependencies_root_names = non_explicit_dependencies.map(&:root_name).uniq.filter { |t| t != podfile_item.root_name }
192
- non_explicit_dependencies = non_explicit_dependencies_root_names.map { |x|
193
- if item = all_buildable_items.detect { |t| x == t.name }
194
- item
195
- else
196
- item = all_buildable_items.detect { |t| x == t.root_name }
197
- end
198
- }.compact
199
-
200
- non_explicit_dependencies.each do |dep|
201
- dep_item = all_buildable_items.detect { |x| x.name == dep.name }
202
-
203
- if Podspec.include?(dep_item.root_name)
204
- pod_name = dep_item.prebuilt_entry(false)
205
- pod_name.gsub!(dep.name, dep.root_name)
206
- prebuilt_lines.push("#{line.detect_indentation}#{pod_name}#{marker}\n")
207
- end
208
-
209
- explicit_deps.push(dep)
210
- end
186
+ marker = podfile_item.prebuilt_marker()
187
+
188
+ non_explicit_dependencies = podfile_item.recursive_dependencies(all_buildable_items) - explicit_deps
189
+ non_explicit_dependencies_root_names = non_explicit_dependencies.map(&:root_name).uniq.filter { |t| t != podfile_item.root_name }
190
+ non_explicit_dependencies = non_explicit_dependencies_root_names.map { |x|
191
+ if item = all_buildable_items.detect { |t| x == t.name }
192
+ item
193
+ else
194
+ item = all_buildable_items.detect { |t| x == t.root_name }
195
+ end
196
+ }.compact
197
+
198
+ non_explicit_dependencies.each do |dep|
199
+ dep_item = all_buildable_items.detect { |x| x.name == dep.name }
200
+
201
+ if File.exist?(dep_item.prebuilt_podspec_path) && !dep_item.is_prebuilt
202
+ pod_name = dep_item.prebuilt_entry(false, false)
203
+ prebuilt_lines.push("#{line.detect_indentation}#{pod_name}#{marker}\n")
211
204
  end
212
205
 
206
+ explicit_deps.push(dep)
207
+ end
208
+
209
+ if File.exist?(podfile_item.prebuilt_podspec_path) && !podfile_item.is_prebuilt
210
+ prebuilt_lines.push("#{line.detect_indentation}#{podfile_item.prebuilt_entry}\n")
213
211
  next
214
212
  end
215
213
  end
@@ -218,13 +216,37 @@ module PodBuilder
218
216
  prebuilt_lines.push(line)
219
217
  end
220
218
 
219
+ podfile_content = prebuilt_lines.join
220
+
221
+ podfile_content = Podfile.update_path_entries(podfile_content, Podfile.method(:podfile_path_transform))
222
+ podfile_content = Podfile.update_project_entries(podfile_content, Podfile.method(:podfile_path_transform))
223
+ podfile_content = Podfile.update_require_entries(podfile_content, Podfile.method(:podfile_path_transform))
224
+
225
+ podfile_content = add_pre_install_actions(podfile_content)
226
+ podfile_content = add_post_install_checks(podfile_content)
227
+
221
228
  project_podfile_path = PodBuilder::project_path("Podfile")
222
- File.write(project_podfile_path, prebuilt_lines.join)
223
- Podfile.update_path_entires(project_podfile_path, false)
224
- Podfile.update_project_entries(project_podfile_path, false)
229
+ File.write(project_podfile_path, podfile_content)
230
+ end
231
+
232
+ def self.write_prebuilt_react_native(all_buildable_items, analyzer)
233
+ puts "Updating Application Podfile".yellow
225
234
 
226
- add_pre_install_actions(project_podfile_path)
227
- add_post_install_checks(project_podfile_path)
235
+ podbuilder_podfile_path = PodBuilder::basepath("Podfile")
236
+ rel_path = Pathname.new(podbuilder_podfile_path).relative_path_from(Pathname.new(PodBuilder::project_path)).to_s
237
+
238
+ podfile_content = ["# Autogenerated by PodBuilder (https://github.com/Subito-it/PodBuilder)\n", "# Any change to this file should be done on #{rel_path}\n", "\n"].join
239
+ podfile_content += analyzer.podfile.pb_to_s(all_buildable_items)
240
+
241
+ podfile_content = Podfile.update_path_entries(podfile_content, PodfileCP.method(:podfile_path_transform))
242
+ podfile_content = Podfile.update_project_entries(podfile_content, Podfile.method(:podfile_path_transform))
243
+ podfile_content = Podfile.update_require_entries(podfile_content, Podfile.method(:podfile_path_transform))
244
+
245
+ podfile_content = add_pre_install_actions(podfile_content)
246
+ podfile_content = add_post_install_checks(podfile_content)
247
+
248
+ project_podfile_path = PodBuilder::project_path("Podfile")
249
+ File.write(project_podfile_path, podfile_content)
228
250
  end
229
251
 
230
252
  def self.install
@@ -241,10 +263,6 @@ module PodBuilder
241
263
  return stripped_line.gsub("\"", "'").gsub(" ", "").gsub("\t", "").gsub("\n", "")
242
264
  end
243
265
 
244
- def self.add_install_block(podfile_path)
245
- add(PODBUILDER_LOCK_ACTION, "pre_install", podfile_path)
246
- end
247
-
248
266
  def self.pod_definition_in(line, include_commented)
249
267
  stripped_line = strip_line(line)
250
268
  matches = stripped_line.match(/(^pod')(.*?)(')/)
@@ -330,7 +348,7 @@ module PodBuilder
330
348
 
331
349
  if stripped_line.match(/(pod')(.*?)(')/) != nil
332
350
  starting_def_found = stripped_line.start_with?("def") && (line.match("\s*def\s") != nil)
333
- raise "Unsupported single line def/pod. `def` and `pod` shouldn't be on the same line, please modify the following line:\n#{line}" if starting_def_found
351
+ raise "\n\nUnsupported single line def/pod. `def` and `pod` shouldn't be on the same line, please modify the following line:\n#{line}".red if starting_def_found
334
352
  end
335
353
  end
336
354
  end
@@ -369,9 +387,23 @@ module PodBuilder
369
387
 
370
388
  private
371
389
 
372
- def self.indentation_from_file(path)
373
- content = File.read(path)
390
+ def self.podfile_path_transform(path)
391
+ use_absolute_paths = false
392
+ podfile_path = PodBuilder::project_path("Podfile")
393
+ original_basepath = PodBuilder::basepath
394
+
395
+ podfile_base_path = Pathname.new(File.dirname(podfile_path))
396
+
397
+ original_path = Pathname.new(File.join(original_basepath, path))
398
+ replace_path = original_path.relative_path_from(podfile_base_path)
399
+ if use_absolute_paths
400
+ replace_path = replace_path.expand_path(podfile_base_path)
401
+ end
374
402
 
403
+ return replace_path
404
+ end
405
+
406
+ def self.indentation_from_string(content)
375
407
  lines = content.split("\n").select { |x| !x.empty? }
376
408
 
377
409
  if lines.count > 2
@@ -392,13 +424,13 @@ module PodBuilder
392
424
  def self.project_swift_version(analyzer)
393
425
  swift_versions = analyzer.instance_variable_get("@result").targets.map { |x| x.target_definition.swift_version }.compact.uniq
394
426
 
395
- raise "Found different Swift versions in targets. Expecting one, got `#{swift_versions}`" if swift_versions.count > 1
427
+ raise "\n\nFound different Swift versions in targets. Expecting one, got `#{swift_versions}`".red if swift_versions.count > 1
396
428
 
397
429
  return swift_versions.first || PodBuilder::system_swift_version
398
430
  end
399
431
 
400
432
  def self.podfile_items_at(podfile_path, include_prebuilt = false)
401
- raise "Expecting basepath folder!" if !File.exist?(PodBuilder::basepath("Podfile"))
433
+ raise "\n\nExpecting basepath folder!".red if !File.exist?(PodBuilder::basepath("Podfile"))
402
434
 
403
435
  if File.basename(podfile_path) != "Podfile"
404
436
  File.rename(PodBuilder::basepath("Podfile"), PodBuilder::basepath("Podfile.tmp"))
@@ -427,18 +459,20 @@ module PodBuilder
427
459
  return buildable_items
428
460
  end
429
461
 
430
- def self.add_pre_install_actions(podfile_path)
431
- add(PRE_INSTALL_ACTIONS + [" "], "pre_install", podfile_path)
462
+ def self.add_install_block(podfile_content)
463
+ return add(PODBUILDER_LOCK_ACTION, "pre_install", podfile_content)
432
464
  end
433
465
 
434
- def self.add_post_install_checks(podfile_path)
435
- add(POST_INSTALL_ACTIONS + [" "], "post_install", podfile_path)
466
+ def self.add_pre_install_actions(podfile_content)
467
+ return add(PRE_INSTALL_ACTIONS + [" "], "pre_install", podfile_content)
436
468
  end
437
469
 
438
- def self.add(entries, marker, podfile_path)
439
- podfile_content = File.read(podfile_path)
470
+ def self.add_post_install_checks(podfile_content)
471
+ return add(POST_INSTALL_ACTIONS + [" "], "post_install", podfile_content)
472
+ end
440
473
 
441
- file_indentation = indentation_from_file(podfile_path)
474
+ def self.add(entries, marker, podfile_content)
475
+ file_indentation = indentation_from_string(podfile_content)
442
476
 
443
477
  entries = entries.map { |x| "#{file_indentation}#{x}\n"}
444
478
 
@@ -455,28 +489,28 @@ module PodBuilder
455
489
  end
456
490
 
457
491
  if !marker_found
492
+ if podfile_lines.last.strip.length > 0
493
+ podfile_lines.push("\n")
494
+ end
458
495
  podfile_lines.push("\n#{marker} do |installer|\n")
459
496
  podfile_lines.push(entries)
460
497
  podfile_lines.push("end\n")
461
498
  end
462
499
 
463
- File.write(podfile_path, podfile_lines.join)
500
+ return podfile_lines.join
464
501
  end
465
502
 
466
- def self.update_path_entires(podfile_path, use_absolute_paths = false, path_base = PodBuilder::basepath(""))
467
- podfile_content = File.read(podfile_path)
468
-
469
- base_path = Pathname.new(File.dirname(podfile_path))
470
- regex = "(\s*pod\s*['|\"])(.*?)(['|\"])(.*?)(:path\s*=>\s*['|\"])(.*?)(['|\"])"
503
+ def self.update_path_entries(podfile_content, path_transform)
504
+ regex = "(\s*pod\s*['|\"])(.*?)(['|\"])(.*?):(path|podspec)(\s*=>\s*['|\"])(.*?)(['|\"])"
471
505
 
472
506
  podfile_lines = []
473
507
  podfile_content.each_line do |line|
474
508
  stripped_line = strip_line(line)
475
509
  matches = line.match(/#{regex}/)
476
510
 
477
- if matches&.size == 8 && !stripped_line.start_with?("#")
511
+ if matches&.size == 9 && !stripped_line.start_with?("#")
478
512
  pod_name = matches[2]
479
- path = matches[6]
513
+ path = matches[7]
480
514
 
481
515
  is_absolute = ["~", "/"].include?(path[0])
482
516
  unless !PodBuilder::prebuiltpath.end_with?(path) && !is_absolute
@@ -484,26 +518,19 @@ module PodBuilder
484
518
  next
485
519
  end
486
520
 
487
- original_path = Pathname.new(File.join(path_base, path))
488
- replace_path = original_path.relative_path_from(base_path)
489
- if use_absolute_paths
490
- replace_path = replace_path.expand_path(base_path)
491
- end
521
+ replace_path = path_transform.call(path)
492
522
 
493
- updated_path_line = line.gsub(/#{regex}/, '\1\2\3\4\5' + replace_path.to_s + '\7\8')
523
+ updated_path_line = line.gsub(/#{regex}/, '\1\2\3\4:\5\6' + replace_path.to_s + '\8\9')
494
524
  podfile_lines.push(updated_path_line)
495
525
  else
496
526
  podfile_lines.push(line)
497
527
  end
498
528
  end
499
529
 
500
- File.write(podfile_path, podfile_lines.join)
530
+ return podfile_lines.join
501
531
  end
502
532
 
503
- def self.update_project_entries(podfile_path, use_absolute_paths = false, path_base = PodBuilder::basepath(""))
504
- podfile_content = File.read(podfile_path)
505
-
506
- base_path = Pathname.new(File.dirname(podfile_path))
533
+ def self.update_project_entries(podfile_content, path_transform)
507
534
  regex = "(\s*project\s*['|\"])(.*?)(['|\"])"
508
535
 
509
536
  podfile_lines = []
@@ -520,11 +547,36 @@ module PodBuilder
520
547
  next
521
548
  end
522
549
 
523
- original_path = Pathname.new(File.join(path_base, path))
524
- replace_path = original_path.relative_path_from(base_path)
525
- if use_absolute_paths
526
- replace_path = replace_path.expand_path(base_path)
550
+ replace_path = path_transform.call(path)
551
+
552
+ updated_path_line = line.gsub(/#{regex}/, '\1' + replace_path.to_s + '\3\4')
553
+ podfile_lines.push(updated_path_line)
554
+ else
555
+ podfile_lines.push(line)
556
+ end
557
+ end
558
+
559
+ return podfile_lines.join
560
+ end
561
+
562
+ def self.update_require_entries(podfile_content, path_transform)
563
+ regex = "(\s*require_relative\s*['|\"])(.*?)(['|\"])"
564
+
565
+ podfile_lines = []
566
+ podfile_content.each_line do |line|
567
+ stripped_line = strip_line(line)
568
+ matches = line.match(/#{regex}/)
569
+
570
+ if matches&.size == 4 && !stripped_line.start_with?("#")
571
+ path = matches[2]
572
+
573
+ is_absolute = ["~", "/"].include?(path[0])
574
+ unless !is_absolute
575
+ podfile_lines.push(line)
576
+ next
527
577
  end
578
+
579
+ replace_path = path_transform.call(path)
528
580
 
529
581
  updated_path_line = line.gsub(/#{regex}/, '\1' + replace_path.to_s + '\3\4')
530
582
  podfile_lines.push(updated_path_line)
@@ -533,7 +585,113 @@ module PodBuilder
533
585
  end
534
586
  end
535
587
 
536
- File.write(podfile_path, podfile_lines.join)
588
+ return podfile_lines.join
589
+ end
590
+
591
+ def self.prepare_for_react_native_write_pb_configuration(podfile_content)
592
+ base = File.expand_path(File.join(PodBuilder::project_path, ".."))
593
+ bin_js = Dir.glob("#{base}/node_modules/@react-native-community/cli/build/bin.js")
594
+
595
+ raise "\n\nReact native cli bin_js not found!".red unless bin_js.count == 1
596
+ bin_js = bin_js.first
597
+
598
+ config_dest_path = PodBuilder::basepath("rn_config.json")
599
+
600
+ raise "\n\nFailed generating react native configuration file".red unless system("node '#{bin_js}' config > #{config_dest_path}")
601
+
602
+ content = File.read(config_dest_path)
603
+
604
+ content.gsub!(PodBuilder::project_path, "..")
605
+ content.gsub!(File.expand_path(PodBuilder::project_path("..")), "../..")
606
+
607
+ json = JSON.parse(content)
608
+ begin
609
+ json["project"]["ios"]["sourceDir"] = "./"
610
+ json["project"]["ios"]["podfile"] = "./"
611
+ rescue => exception
612
+ raise "\n\nFailed updating react native configuration json".red
613
+ end
614
+
615
+ File.write(config_dest_path, JSON.pretty_generate(json))
616
+
617
+ return "rn_config = JSON.load(File.read(\"rn_config.json\")) # pb added\n\n" + podfile_content
618
+ end
619
+
620
+ def self.prepare_for_react_native_rn_pods_file(podfile_content)
621
+ lines = []
622
+ podfile_content.each_line do |line|
623
+ if line.include?("use_react_native!")
624
+ matches = line.match(/(\s*)/)
625
+ unless matches&.size == 2
626
+ return podfile_content
627
+ end
628
+
629
+ indentation = matches[1]
630
+ lines.push("#{indentation}use_react_native!(:path => rn_config[\"reactNativePath\"]) # pb added\n")
631
+ lines.push("#{indentation}# #{line.strip} # pb removed\n")
632
+ else
633
+ lines.push(line)
634
+ end
635
+ end
636
+
637
+ return lines.join
638
+ end
639
+
640
+ def self.prepare_for_react_native_native_modules_file(podfile_content)
641
+ lines = []
642
+ podfile_content.each_line do |line|
643
+ if line.include?("use_native_modules!")
644
+ matches = line.match(/(\s*)/)
645
+ unless matches&.size == 2
646
+ return podfile_content
647
+ end
648
+
649
+ indentation = matches[1]
650
+ lines.push("#{indentation}use_native_modules!(rn_config) # pb added\n")
651
+ lines.push("#{indentation}# #{line.strip} # pb removed\n")
652
+ else
653
+ lines.push(line)
654
+ end
655
+ end
656
+
657
+ return lines.join
658
+ end
659
+
660
+ def self.prepare_for_react_native(podfile_content)
661
+ original_podfile_content = podfile_content.dup
662
+
663
+ podfile_content = prepare_for_react_native_write_pb_configuration(podfile_content)
664
+ content = prepare_for_react_native_rn_pods_file(podfile_content)
665
+ if content == podfile_content
666
+ return original_podfile_content
667
+ end
668
+ podfile_content = content
669
+ content = prepare_for_react_native_native_modules_file(podfile_content)
670
+ if content == podfile_content
671
+ return original_podfile_content
672
+ end
673
+ podfile_content = content
674
+
675
+ Configuration.build_using_repo_paths = true
676
+ Configuration.react_native_project = true
677
+
678
+ return podfile_content
679
+ end
680
+
681
+ def self.install_using_frameworks(analyzer)
682
+ target_settings = analyzer.podfile.target_definition_list.map(&:uses_frameworks?).uniq
683
+ if target_settings.count == 1
684
+ if target_settings.first == false
685
+ raise "\n\nOnly framework packaging currently supported. Please add 'use_frameworks!' at Podfile root level (not nested in targets)".red
686
+ end
687
+ return target_settings.first
688
+ elsif target_settings.count > 1
689
+ raise "\n\n'use_frameworks!' should be declared only once at Podfile root level (not nested in targets)".red
690
+ else
691
+ raise "\n\nFailed detecting use_frameworks!"
692
+ end
693
+
694
+ return true
537
695
  end
538
696
  end
539
697
  end