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.
- checksums.yaml +4 -4
- data/README.md +65 -64
- data/lib/cocoapods_plugin.rb +16 -16
- data/lib/hmap/command/hmap_gen.rb +19 -27
- data/lib/hmap/command/hmap_reader.rb +5 -5
- data/lib/hmap/command/hmap_writer.rb +5 -3
- data/lib/hmap/command.rb +3 -1
- data/lib/hmap/constants.rb +198 -0
- data/lib/hmap/{executable.rb → helper/executable.rb} +5 -6
- data/lib/hmap/hmap/hmap_bucketstr.rb +20 -0
- data/lib/hmap/{hmap_reader.rb → hmap/hmap_reader.rb} +4 -20
- data/lib/hmap/{hmap_saver.rb → hmap/hmap_saver.rb} +11 -6
- data/lib/hmap/{hmap_struct.rb → hmap/hmap_struct.rb} +0 -0
- data/lib/hmap/hmap/hmap_writer.rb +52 -0
- data/lib/hmap/{mapfile.rb → hmap/mapfile.rb} +1 -1
- data/lib/hmap/user_interface.rb +22 -0
- data/lib/hmap/version.rb +1 -1
- data/lib/hmap/xc/context.rb +23 -0
- data/lib/hmap/xc/header_entry.rb +55 -0
- data/lib/hmap/xc/header_type.rb +32 -0
- data/lib/hmap/xc/pbx_helper.rb +68 -0
- data/lib/hmap/xc/product_helper.rb +36 -0
- data/lib/hmap/xc/resolver.rb +129 -0
- data/lib/hmap/xc/target/build_setting.rb +126 -0
- data/lib/hmap/xc/target/target.rb +76 -0
- data/lib/hmap/xc/target/target_context.rb +29 -0
- data/lib/hmap/xc/target/target_helper.rb +114 -0
- data/lib/hmap/xc/target/target_vfs.rb +122 -0
- data/lib/hmap/xc/target/xcconfig_helper.rb +109 -0
- data/lib/hmap/xc/workspace/project.rb +120 -0
- data/lib/hmap/xc/workspace/project_helper.rb +92 -0
- data/lib/hmap/xc/workspace/workspace.rb +83 -0
- data/lib/hmap.rb +16 -14
- metadata +58 -20
- data/lib/hmap/framework/framework_vfs.rb +0 -94
- data/lib/hmap/helper/build_setting_constants.rb +0 -13
- data/lib/hmap/helper/hmap_helper.rb +0 -212
- data/lib/hmap/helper/pods_helper.rb +0 -98
- data/lib/hmap/helper/xcconfig_helper.rb +0 -105
- data/lib/hmap/hmap_writer.rb +0 -99
- 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
|
data/lib/hmap/hmap_writer.rb
DELETED
@@ -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
|