cocoapods-mapfile 0.2.2 → 0.2.3

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 (41) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +65 -64
  3. data/lib/cocoapods_plugin.rb +16 -16
  4. data/lib/hmap/command/hmap_gen.rb +19 -27
  5. data/lib/hmap/command/hmap_reader.rb +5 -5
  6. data/lib/hmap/command/hmap_writer.rb +5 -3
  7. data/lib/hmap/command.rb +3 -1
  8. data/lib/hmap/constants.rb +198 -0
  9. data/lib/hmap/{executable.rb → helper/executable.rb} +5 -6
  10. data/lib/hmap/hmap/hmap_bucketstr.rb +20 -0
  11. data/lib/hmap/{hmap_reader.rb → hmap/hmap_reader.rb} +4 -20
  12. data/lib/hmap/{hmap_saver.rb → hmap/hmap_saver.rb} +11 -6
  13. data/lib/hmap/{hmap_struct.rb → hmap/hmap_struct.rb} +0 -0
  14. data/lib/hmap/hmap/hmap_writer.rb +52 -0
  15. data/lib/hmap/{mapfile.rb → hmap/mapfile.rb} +1 -1
  16. data/lib/hmap/user_interface.rb +22 -0
  17. data/lib/hmap/version.rb +1 -1
  18. data/lib/hmap/xc/context.rb +23 -0
  19. data/lib/hmap/xc/header_entry.rb +55 -0
  20. data/lib/hmap/xc/header_type.rb +32 -0
  21. data/lib/hmap/xc/pbx_helper.rb +68 -0
  22. data/lib/hmap/xc/product_helper.rb +36 -0
  23. data/lib/hmap/xc/resolver.rb +129 -0
  24. data/lib/hmap/xc/target/build_setting.rb +126 -0
  25. data/lib/hmap/xc/target/target.rb +76 -0
  26. data/lib/hmap/xc/target/target_context.rb +29 -0
  27. data/lib/hmap/xc/target/target_helper.rb +114 -0
  28. data/lib/hmap/xc/target/target_vfs.rb +122 -0
  29. data/lib/hmap/xc/target/xcconfig_helper.rb +109 -0
  30. data/lib/hmap/xc/workspace/project.rb +120 -0
  31. data/lib/hmap/xc/workspace/project_helper.rb +92 -0
  32. data/lib/hmap/xc/workspace/workspace.rb +83 -0
  33. data/lib/hmap.rb +16 -14
  34. metadata +58 -20
  35. data/lib/hmap/framework/framework_vfs.rb +0 -94
  36. data/lib/hmap/helper/build_setting_constants.rb +0 -13
  37. data/lib/hmap/helper/hmap_helper.rb +0 -212
  38. data/lib/hmap/helper/pods_helper.rb +0 -98
  39. data/lib/hmap/helper/xcconfig_helper.rb +0 -105
  40. data/lib/hmap/hmap_writer.rb +0 -99
  41. data/lib/hmap/pods_specification.rb +0 -65
@@ -1,105 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module HMap
4
- # A collection of xcodeproj Helper functions used throughout hmap.
5
- class XcodeprojHelper
6
- require 'xcodeproj'
7
-
8
- attr_reader :xcconfig_path, :build_setting_key
9
-
10
- def initialize(xcconfig)
11
- @xcconfig_path = xcconfig
12
- @xcconfig = Xcodeproj::Config.new(xcconfig_path)
13
- end
14
-
15
- def change_hmap_build_setting_and_save(values, use_headermap: false, save_origin: false)
16
- ocf = values[BuildSettingConstants::OTHER_CFLAGS]
17
- ocppf = values[BuildSettingConstants::OTHER_CPLUSPLUSFLAGS]
18
- change_xcconfig_build_setting(BuildSettingConstants::OTHER_CFLAGS, ocf, true)
19
- change_xcconfig_build_setting(BuildSettingConstants::OTHER_CPLUSPLUSFLAGS, ocppf, true) if build_setting?(BuildSettingConstants::OTHER_CPLUSPLUSFLAGS)
20
- change_xcconfig_build_setting(BuildSettingConstants::USE_HEADERMAP, 'NO', false) unless use_headermap
21
- build_settings = [BuildSettingConstants::HEAD_SEARCH_PATHS, BuildSettingConstants::USER_HEADER_SEARCH_PATHS]
22
- if save_origin
23
- clean_hmap_build_settings_to_xcconfig(build_settings)
24
- else
25
- save_build_settings_to_xcconfig(build_settings)
26
- end
27
- save_to_path
28
- end
29
-
30
- def change_xcconfig_build_settings(settings, save_origin)
31
- settings.each do |key, value|
32
- change_xcconfig_build_setting(key.to_s, value, save_origin)
33
- end
34
- end
35
-
36
- def change_xcconfig_build_setting(build_setting_key, setting, save_origin)
37
- return if setting.nil?
38
-
39
- save_origin_build_setting = save_build_setting_to_xcconfig(build_setting_key)
40
- value = setting
41
- value = "#{value} ${#{save_key(build_setting_key)}}" if save_origin && !save_origin_build_setting.nil?
42
- @xcconfig.attributes[hmap_key(build_setting_key)] = value
43
- @xcconfig.attributes[build_setting_key] = "${#{hmap_key(build_setting_key)}}"
44
- yield(@xcconfig) if block_given?
45
- end
46
-
47
- def save_build_settings_to_xcconfig(build_settings)
48
- build_settings ||= []
49
- build_settings.each { |key| save_build_setting_to_xcconfig(key) }
50
- end
51
-
52
- def save_build_setting_to_xcconfig(key)
53
- origin_build_setting = @xcconfig.attributes[key]
54
- if origin_build_setting.nil? || !origin_build_setting.include?(hmap_key(key))
55
- @xcconfig.attributes[save_key(key)] = origin_build_setting unless origin_build_setting.nil?
56
- @xcconfig.attributes.delete(key)
57
- end
58
- @xcconfig.attributes[save_key(key)]
59
- end
60
-
61
- def clean_hmap_build_setting_and_save
62
- clean_hmap_build_setting_to_xcconfig(BuildSettingConstants::OTHER_CFLAGS)
63
- clean_hmap_build_setting_to_xcconfig(BuildSettingConstants::OTHER_CPLUSPLUSFLAGS)
64
- clean_hmap_build_setting_to_xcconfig(BuildSettingConstants::HEAD_SEARCH_PATHS)
65
- clean_hmap_build_setting_to_xcconfig(BuildSettingConstants::USER_HEADER_SEARCH_PATHS)
66
- clean_hmap_build_setting_to_xcconfig(BuildSettingConstants::USE_HEADERMAP)
67
- save_to_path
68
- end
69
-
70
- def clean_hmap_build_settings_to_xcconfig(build_settings)
71
- build_settings ||= []
72
- build_settings.each { |build_setting| clean_hmap_build_setting_to_xcconfig(build_setting) }
73
- end
74
-
75
- def clean_hmap_build_setting_to_xcconfig(build_setting)
76
- save_origin_build_setting = @xcconfig.attributes[save_key(build_setting)]
77
- origin_build_setting = @xcconfig.attributes[build_setting]
78
- if save_origin_build_setting.nil? && !origin_build_setting.nil? && origin_build_setting.include?(hmap_key(build_setting))
79
- @xcconfig.attributes.delete(build_setting)
80
- end
81
- @xcconfig.attributes[build_setting] = save_origin_build_setting unless save_origin_build_setting.nil?
82
- @xcconfig.attributes.delete(hmap_key(build_setting))
83
- @xcconfig.attributes.delete(save_key(build_setting))
84
- end
85
-
86
- def save_to_path(path = nil)
87
- path = xcconfig_path if path.nil?
88
- @xcconfig.save_as(path)
89
- end
90
-
91
- private
92
-
93
- def build_setting?(key)
94
- !@xcconfig.attributes[key].nil?
95
- end
96
-
97
- def hmap_key(key)
98
- "HMAP_PODS_#{key}"
99
- end
100
-
101
- def save_key(key)
102
- "SAVE_#{key}"
103
- end
104
- end
105
- end
@@ -1,99 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # require 'cocoapods'
4
-
5
- module HMap
6
- # Helper module which returns handle method from MapFileWriter.
7
- class MapFileWriter
8
- # @param save_origin_header_search_paths save_origin_header_search_paths
9
- # @param clean_hmap clean up all hmap setup
10
- # @param allow_targets this targets will save origin build setting
11
- # @param use_build_in_headermap option use Xcode header map
12
- def initialize(save_origin_build_setting, clean_hmap, allow_targets, use_build_in_headermap: true)
13
- @allow_targets = allow_targets
14
- puts "hmap allow targets: #{allow_targets}" unless allow_targets.empty?
15
- @save_origin_build_setting = save_origin_build_setting
16
- @use_build_in_headermap = use_build_in_headermap
17
- create_mapfile(clean_hmap)
18
- end
19
-
20
- private
21
-
22
- # Integrates the projects mapfile associated
23
- # with the App project and Pods project.
24
- #
25
- # @param [clean] clean hmap dir @see #podfile
26
- # @return [void]
27
- #
28
- def create_mapfile(clean)
29
- analyze = PodsSpecification.instance.analyze
30
- targets = analyze.targets
31
- pod_targets = analyze.pod_targets
32
- return if Pods.clean_hmap_setting(clean, targets, pod_targets)
33
-
34
- merge_all_pods_target_headers_mapfile(pod_targets)
35
- merge_all_target_public_headers_mapfile(targets)
36
- end
37
-
38
- def vfs_from_target(target, helper)
39
- return unless target.build_as_framework?
40
-
41
- spec_path = target.specs.map(&:defined_in_file).uniq.first
42
- platforms = Pods.target_support_platforms(spec_path)
43
- headers = Pods.headers_mappings_by_file(target).flat_map { |h| h }
44
- helper.add_framework_entry(target.user_build_configurations.keys,
45
- platforms, target.name, target.product_basename, target.support_files_dir, headers)
46
- end
47
-
48
- def hmap_from_header_mappings(target, helper, type = :source_files)
49
- Pods.headers_mappings_by_file_accessor(target, type).each do |key, headers|
50
- helper.header_mappings(headers, Pod::Config.instance.sandbox.root.join(target.headers_sandbox),
51
- target.product_basename, key)
52
- end
53
- end
54
-
55
- def hmap_vfs_from_target(target, helper, type = :source_files)
56
- vfs_from_target(target, helper)
57
- hmap_from_header_mappings(target, helper, type)
58
- end
59
-
60
- def merge_all_target_public_headers_mapfile(targets)
61
- helper = HMapHelper.new(Pods.hmap_files_dir)
62
- targets.each do |target|
63
- hmap_name = target.name.to_s
64
- target.pod_targets.each do |p_target|
65
- hmap_from_header_mappings(p_target, helper, :public_header_files)
66
- end
67
- change_hmap_build_setting_and_save(target, false, helper, hmap_name, save_origin: @save_origin_build_setting)
68
- helper.write_hmap_vfs_to_paths(hmap_name)
69
- end
70
- end
71
-
72
- def merge_all_pods_target_headers_mapfile(pod_targets)
73
- return Pods.clean_hmap_build_setting(pod_targets) if @use_build_in_headermap
74
-
75
- helper = HMapHelper.new(Pods.hmap_files_dir)
76
- hmap_name = 'all-pods'
77
- pod_targets.each do |target|
78
- hmap_vfs_from_target(target, helper)
79
- change_hmap_build_setting_and_save(target, target.build_as_framework?, helper, hmap_name,
80
- save_origin: @save_origin_build_setting)
81
- end
82
- helper.write_hmap_vfs_to_paths(hmap_name)
83
- end
84
-
85
- # Cteate hmap files and vfs files
86
- #
87
- # @param [target] Pods project target @see Pod#PodTarget
88
- # @param [hmap_helper] @see HMap#HMapHelper
89
- # @param [hmap_name] hmap file contains pod targets header type
90
- # @param [save_origin] save or not save origin build setting
91
- def change_hmap_build_setting_and_save(target, build_as_framework, hmap_helper, hmap_name, save_origin: false)
92
- save_origin = true if @allow_targets.include?(target.name)
93
- setting = hmap_helper.xcconfig_header_setting(build_as_framework, Pods.pods_hmap_files_dir, hmap_name)
94
- Pods.xcconfig_path_from(target) do |xcconfig|
95
- XcodeprojHelper.new(xcconfig).change_hmap_build_setting_and_save(setting, save_origin: save_origin)
96
- end
97
- end
98
- end
99
- end
@@ -1,65 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module HMap
4
- class PodsSpecification
5
- attr_reader :workspace_path, :analyze, :app_build_dir, :project_temp_dir
6
-
7
- BUILD_DIR = 'BUILD_DIR'
8
- PROJECT_TEMP_DIR = 'PROJECT_TEMP_DIR'
9
-
10
- private_constant :BUILD_DIR
11
- private_constant :PROJECT_TEMP_DIR
12
-
13
- def self.instance
14
- @instance ||= new
15
- end
16
-
17
- def initialize
18
- @workspace_path = workspace
19
- @analyze = pod_analyze
20
- workspace_build_dir
21
- end
22
-
23
- private
24
-
25
- def workspace_build_dir
26
- workspace_dic = xcodebuild('-list', workspace_path)['workspace']
27
- scheme = workspace_dic['schemes'].first
28
- build_settings = xcodebuild('analyze', workspace_path, scheme).first['buildSettings']
29
- @app_build_dir = build_settings[BUILD_DIR]
30
- @project_temp_dir = build_settings[PROJECT_TEMP_DIR]
31
- end
32
-
33
- def xcodebuild(action, workspace, scheme = nil)
34
- command = %W[#{action} -workspace #{workspace} -json]
35
- command += %W[-scheme #{scheme} -showBuildSettings] unless scheme.nil?
36
- results = Executable.execute_command('xcodebuild', command, false)
37
- JSON.parse(results) unless results.nil?
38
- end
39
-
40
- def pod_analyze
41
- podfile = Pod::Podfile.from_file(Pod::Config.instance.podfile_path)
42
- lockfile = Pod::Lockfile.from_file(Pod::Config.instance.lockfile_path)
43
- Pod::Installer::Analyzer.new(Pod::Config.instance.sandbox, podfile, lockfile).analyze
44
- end
45
-
46
- def workspace
47
- podfile = Pod::Podfile.from_file(Pod::Config.instance.podfile_path)
48
- user_project_paths = pod_analyze.targets.map(&:user_project_path).compact.uniq
49
- if podfile.workspace_path
50
- declared_path = podfile.workspace_path
51
- path_with_ext = File.extname(declared_path) == '.xcworkspace' ? declared_path : "#{declared_path}.xcworkspace"
52
- podfile_dir = File.dirname(podfile.defined_in_file || '')
53
- absolute_path = File.expand_path(path_with_ext, podfile_dir)
54
- Pathname.new(absolute_path)
55
- elsif user_project_paths.count == 1
56
- project = user_project_paths.first.basename('.xcodeproj')
57
- Pod::Config.instance.installation_root + "#{project}.xcworkspace"
58
- else
59
- raise Informative, 'Could not automatically select an Xcode ' \
60
- "workspace. Specify one in your Podfile like so:\n\n" \
61
- " workspace 'path/to/Workspace.xcworkspace'\n"
62
- end
63
- end
64
- end
65
- end