Class: KZ::KZPodTarget

Inherits:
Object
  • Object
show all
Defined in:
lib/cocoapods-kz/helpers/kz_pod_target.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(native_pod_target) ⇒ KZPodTarget

Returns a new instance of KZPodTarget.



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/cocoapods-kz/helpers/kz_pod_target.rb', line 41

def initialize(native_pod_target)
  @native_pod_target = native_pod_target
  @name = native_pod_target.name
  @root_name = native_pod_target.root_spec.name
  @version = native_pod_target.version
  @dependent_target_info = {}
  @repair_dependent_target_info = {}
  @repair_import = []
  @is_dev_pod = false
  @config_pod_mode = :kz_pod_origin_mode

  @product_name = native_pod_target.origin_product_name
  @product_basename = native_pod_target.origin_product_basename
  @need_repair_module_import = false
  @use_local_private_headers_path = false

  native_pod_target.file_accessors.each do |file_accessor|
    file_accessor.kz_pod_target = self
  end

  native_pod_target.weakRef_kz_pod_target = WeakRef.new(self)
end

Instance Attribute Details

#config_pod_modeObject

重些config_pod_mode的get方法,force_config_pod_mode优先级最高



22
23
24
# File 'lib/cocoapods-kz/helpers/kz_pod_target.rb', line 22

def config_pod_mode
  @config_pod_mode
end

#dependent_target_infoObject

当前target所有直接或间接依赖的target信息,是一个hash,key为target名字,value为KZPodTarget对象



16
17
18
# File 'lib/cocoapods-kz/helpers/kz_pod_target.rb', line 16

def dependent_target_info
  @dependent_target_info
end

#force_config_pod_modeObject

pod kz install/update 中指定的pod模式,优先级最大



24
25
26
# File 'lib/cocoapods-kz/helpers/kz_pod_target.rb', line 24

def force_config_pod_mode
  @force_config_pod_mode
end

#is_dev_podObject

Returns the value of attribute is_dev_pod.



20
21
22
# File 'lib/cocoapods-kz/helpers/kz_pod_target.rb', line 20

def is_dev_pod
  @is_dev_pod
end

#nameObject (readonly)

Returns the value of attribute name.



11
12
13
# File 'lib/cocoapods-kz/helpers/kz_pod_target.rb', line 11

def name
  @name
end

#native_pod_targetObject (readonly)

Returns the value of attribute native_pod_target.



10
11
12
# File 'lib/cocoapods-kz/helpers/kz_pod_target.rb', line 10

def native_pod_target
  @native_pod_target
end

#need_repair_module_importObject

当手动修改PRODUCT_NAME之后,#import<xx/xxx.h>需要修复为原使用方式,使用hmap进行映射



37
38
39
# File 'lib/cocoapods-kz/helpers/kz_pod_target.rb', line 37

def need_repair_module_import
  @need_repair_module_import
end

#private_header_search_pathObject

用于临时保存hamp过程的配置



27
28
29
# File 'lib/cocoapods-kz/helpers/kz_pod_target.rb', line 27

def private_header_search_path
  @private_header_search_path
end

#product_basenameObject

对应xcode配置PRODUCT_NAME,当多个target的PRODUCT_NAME相同时,需要手动修改,防止打包报错



33
34
35
# File 'lib/cocoapods-kz/helpers/kz_pod_target.rb', line 33

def product_basename
  @product_basename
end

#product_nameObject

target编译最终的产物名称



31
32
33
# File 'lib/cocoapods-kz/helpers/kz_pod_target.rb', line 31

def product_name
  @product_name
end

#repair_dependent_target_infoObject

所有通过kz_pod,:dependency手动配置的依赖target



18
19
20
# File 'lib/cocoapods-kz/helpers/kz_pod_target.rb', line 18

def repair_dependent_target_info
  @repair_dependent_target_info
end

#repair_header_search_pathObject

Returns the value of attribute repair_header_search_path.



28
29
30
# File 'lib/cocoapods-kz/helpers/kz_pod_target.rb', line 28

def repair_header_search_path
  @repair_header_search_path
end

#repair_importObject (readonly)

Returns the value of attribute repair_import.



19
20
21
# File 'lib/cocoapods-kz/helpers/kz_pod_target.rb', line 19

def repair_import
  @repair_import
end

#repair_modulemap_pathObject

当手动修改PRODUCT_NAME之后,@import需要修复为原使用方式



35
36
37
# File 'lib/cocoapods-kz/helpers/kz_pod_target.rb', line 35

def repair_modulemap_path
  @repair_modulemap_path
end

#root_nameObject (readonly)

部分pod配置了subspec,此时获取的name为cocoapods处理之后的名字,可以通过root_name拿到pod本名



13
14
15
# File 'lib/cocoapods-kz/helpers/kz_pod_target.rb', line 13

def root_name
  @root_name
end

#use_local_private_headers_pathObject

Returns the value of attribute use_local_private_headers_path.



39
40
41
# File 'lib/cocoapods-kz/helpers/kz_pod_target.rb', line 39

def use_local_private_headers_path
  @use_local_private_headers_path
end

#versionObject (readonly)

Returns the value of attribute version.



14
15
16
# File 'lib/cocoapods-kz/helpers/kz_pod_target.rb', line 14

def version
  @version
end

Instance Method Details

#add_kz_pod_config(pod_config) ⇒ Object

配合kz_pod对target进行配置



116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
# File 'lib/cocoapods-kz/helpers/kz_pod_target.rb', line 116

def add_kz_pod_config(pod_config)
  return unless pod_config

  repair_dependency = pod_config[:dependency]
  if repair_dependency
    repair_dependency.each { |repair_dependent_pod_target_name|
      kz_repair_pod_target = yield(repair_dependent_pod_target_name)
      if kz_repair_pod_target
        native_dependent_targets_by_config = self.native_pod_target.dependent_targets_by_config
        native_dependent_targets_by_config.each do |_, dependent_targets|
          dependent_targets << kz_repair_pod_target.native_pod_target
        end
        self.native_pod_target.dependent_targets_by_config = native_dependent_targets_by_config

        @dependent_target_info[repair_dependent_pod_target_name] = kz_repair_pod_target
        @repair_dependent_target_info[repair_dependent_pod_target_name] = kz_repair_pod_target
      end
    }
  end

  repair_import = pod_config[:repair_import]
  if repair_import.is_a?(TrueClass)
    @repair_import = self.recursive_dependent_targets
  elsif repair_import.is_a?(Array)
    repair_import.each do |repair_import_target_name|
      kz_repair_pod_target = yield(repair_import_target_name)
      @repair_import << kz_repair_pod_target
    end
  end
end

#all_headersObject



68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/cocoapods-kz/helpers/kz_pod_target.rb', line 68

def all_headers
  return [] unless have_download_pod?
  @all_headers ||= begin
                     all_headers = []
                     native_pod_target.file_accessors.each do |file_accessor|
                       next if file_accessor.spec.test_specification

                       all_headers.concat(file_accessor.kz_headers)
                     end
                     all_headers
                   end
end

#all_need_repair_importObject

在当前target的所有依赖中,过滤有有修补的target



148
149
150
151
152
153
154
155
# File 'lib/cocoapods-kz/helpers/kz_pod_target.rb', line 148

def all_need_repair_import
  all_need_repair_import = []

  self.recursive_dependent_targets.each do |dependent_target|
    all_need_repair_import << dependent_target if dependent_target.repair_import.count > 0
  end
  all_need_repair_import.uniq
end

#all_repair_dependent_target_infoObject

参考@repair_dependent_target_info,获取所有当前target直接或间接配置的依赖target 用于配置FRAMEWORK_SEARCH_PATHS内容



197
198
199
200
201
202
203
# File 'lib/cocoapods-kz/helpers/kz_pod_target.rb', line 197

def all_repair_dependent_target_info
  all_repair_dependent_target_info = @repair_dependent_target_info
  @dependent_target_info.values.each do |dependent_target|
    all_repair_dependent_target_info.merge!(dependent_target.all_repair_dependent_target_info)
  end
  all_repair_dependent_target_info
end

#all_repair_header_search_pathsObject

获取当前target所有需要修补target的hmap



185
186
187
188
189
190
191
192
193
# File 'lib/cocoapods-kz/helpers/kz_pod_target.rb', line 185

def all_repair_header_search_paths
  all_repair_header_search_paths = []
  all_repair_header_search_paths << KZ.deal_path_for_xcconfig(@repair_header_search_path, true) if @repair_header_search_path
  self.all_need_repair_import.each do |need_repair_target|
    sub_repair_header_search_path = need_repair_target.repair_header_search_path
    all_repair_header_search_paths << KZ.deal_path_for_xcconfig(sub_repair_header_search_path, true) if sub_repair_header_search_path
  end
  all_repair_header_search_paths.uniq
end

#all_repair_modulemap_pathsObject

获取所有用于修复的modulemap路径,原因参考@repair_modulemap_path



231
232
233
234
235
236
237
238
239
# File 'lib/cocoapods-kz/helpers/kz_pod_target.rb', line 231

def all_repair_modulemap_paths
  all_repair_modulemap_paths = []
  all_repair_modulemap_paths << repair_modulemap_path if self.repair_modulemap_path
  recursive_dependent_targets.each do |recursive_dependent_target|
    all_repair_modulemap_paths.concat(recursive_dependent_target.all_repair_modulemap_paths)
  end
  all_repair_modulemap_paths.uniq! if all_repair_modulemap_paths.count > 0
  all_repair_modulemap_paths
end

#have_download_pod?Boolean

Returns:

  • (Boolean)


245
246
247
248
# File 'lib/cocoapods-kz/helpers/kz_pod_target.rb', line 245

def have_download_pod?
  native_pod_dir = @native_pod_target.sandbox.pod_dir(@root_name)
  File.exist?(native_pod_dir) && !File.empty?(native_pod_dir)
end

#header_search_pathsObject

直接用于配置HEADER_SEARCH_PATHS



171
172
173
174
175
176
177
178
179
180
181
182
# File 'lib/cocoapods-kz/helpers/kz_pod_target.rb', line 171

def header_search_paths
  header_search_paths = ''
  header_search_paths = KZ.deal_path_for_xcconfig(@private_header_search_path, true) if @private_header_search_path
  repair_header_search_paths = self.all_repair_header_search_paths.join(' ')
  if repair_header_search_paths.length > 0
    header_search_paths += (' ' + repair_header_search_paths)
  end
  if @use_local_private_headers_path
    header_search_paths += (' ' + KZ.deal_path_for_xcconfig(local_private_headers_path, true))
  end
  header_search_paths
end

#kz_module_nameObject

获取target中的module name,默认为product_module_name与target.name也相同。部分target导入的framework名字与modulemap中的名字不对应,需要特殊处理eg.AMapSearch,product_module_name为AMapSearch,modulemap中的名字为AMapSearchKit



216
217
218
219
220
221
222
223
224
225
226
227
228
# File 'lib/cocoapods-kz/helpers/kz_pod_target.rb', line 216

def kz_module_name
  return @native_pod_target.product_module_name  unless all_headers.count > 0

  one_header_path = all_headers.first.to_s
  if one_header_path.include?('.framework')
    one_header_path.split('/').each do |name|
      if name.include?('.framework')
        return name.split('.').first
      end
    end
  end
  return @native_pod_target.product_module_name
end

#local_private_headers_pathObject



258
259
260
261
262
263
264
# File 'lib/cocoapods-kz/helpers/kz_pod_target.rb', line 258

def local_private_headers_path
  @local_private_headers_path ||= begin
                                    path = KZ_POD_CONFIG_ROOT + @name + "Headers"
                                    FileUtils.mkdir_p(path) unless File.exist?(path)
                                    path
                                  end
end

#pod_config_cache_path(concat_version) ⇒ Object

获取target对应的配置根目录,部分文件需要依赖版本进行存储



206
207
208
209
210
211
# File 'lib/cocoapods-kz/helpers/kz_pod_target.rb', line 206

def pod_config_cache_path(concat_version)
  kz_target_framework_folder = KZ_POD_CONFIG_ROOT + @name
  kz_target_framework_folder += @version if concat_version
  FileUtils.mkdir_p(kz_target_framework_folder) unless File.exist?(kz_target_framework_folder) || concat_version
  kz_target_framework_folder
end

#prefix_header_pathObject



241
242
243
# File 'lib/cocoapods-kz/helpers/kz_pod_target.rb', line 241

def prefix_header_path
  @native_pod_target.prefix_header_path
end

#public_headersObject



81
82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/cocoapods-kz/helpers/kz_pod_target.rb', line 81

def public_headers
  return [] unless have_download_pod?

  @public_headers ||= begin
                        public_headers = []
                        native_pod_target.file_accessors.each do |file_accessor|
                          next if file_accessor.spec.test_specification

                          public_headers.concat(file_accessor.kz_public_headers)
                        end
                        public_headers
                      end
end

#recursive_dependent_targetsObject

获取当前target所有依赖,包括手动补充的



158
159
160
161
162
163
164
165
166
167
168
# File 'lib/cocoapods-kz/helpers/kz_pod_target.rb', line 158

def recursive_dependent_targets
  recursive_dependent_targets = []
  @dependent_target_info.values.each do |dependent_target|
    recursive_dependent_targets << dependent_target
    recursive_dependent_targets.concat(dependent_target.recursive_dependent_targets)
  end
  if recursive_dependent_targets.count > 0
    recursive_dependent_targets.uniq
  end
  recursive_dependent_targets
end

#should_build?Boolean

Returns:

  • (Boolean)


250
251
252
# File 'lib/cocoapods-kz/helpers/kz_pod_target.rb', line 250

def should_build?
  have_download_pod? ? @native_pod_target.should_build? : false
end

#uses_swiftObject



64
65
66
# File 'lib/cocoapods-kz/helpers/kz_pod_target.rb', line 64

def uses_swift
  native_pod_target.uses_swift?
end

#uses_swift?Boolean

Returns:

  • (Boolean)


254
255
256
# File 'lib/cocoapods-kz/helpers/kz_pod_target.rb', line 254

def uses_swift?
  @native_pod_target.uses_swift?
end