cocoapods-mapfile 0.2.2 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
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