pod-builder 2.0.0.beta.19 → 2.0.0.beta.21

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