Class: Ocean::Config::Builder

Inherits:
Object
  • Object
show all
Includes:
Pod
Defined in:
lib/swordfish/config/config_builder.rb

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Pod

match_version?

Constructor Details

#initializeBuilder

Returns a new instance of Builder.



13
14
15
16
# File 'lib/swordfish/config/config_builder.rb', line 13

def initialize
  load_build_config
  # clean
end

Class Method Details

.instanceObject



9
10
11
# File 'lib/swordfish/config/config_builder.rb', line 9

def self.instance
  @instance ||= new
end

Instance Method Details

#binary_json_dirObject



120
121
122
123
124
125
126
# File 'lib/swordfish/config/config_builder.rb', line 120

def binary_json_dir
  @binary_json_dir ||= begin
                 dir = File.join(root_dir,binary_json_dir_name)
                 Dir.mkdir(dir) unless File.exist?dir
                 Pathname.new(dir)
               end
end

#binary_json_dir_nameObject



116
117
118
# File 'lib/swordfish/config/config_builder.rb', line 116

def binary_json_dir_name
  "swordfish-json"
end

#cleanObject



42
43
44
45
46
47
# File 'lib/swordfish/config/config_builder.rb', line 42

def clean
  #清除之前的缓存
  FileUtils.rm_rf(Dir.glob("#{zip_dir}/*")) if File.exist?(zip_dir)
  FileUtils.rm_rf(Dir.glob("#{binary_json_dir}/*")) if File.exist?(binary_json_dir)
  FileUtils.rm_rf(Dir.glob("#{local_psec_dir}/*")) if File.exist?(local_psec_dir)
end

#framework_file(spec) ⇒ Object



76
77
78
# File 'lib/swordfish/config/config_builder.rb', line 76

def framework_file(spec)
  File.join(zip_dir_name, framework_name(spec))
end

#framework_name(spec) ⇒ Object



64
65
66
# File 'lib/swordfish/config/config_builder.rb', line 64

def framework_name(spec)
  "#{spec.name}.framework"
end

#framework_name_version(spec) ⇒ Object



68
69
70
# File 'lib/swordfish/config/config_builder.rb', line 68

def framework_name_version(spec)
  "#{spec.name}.framework_#{spec.version}"
end

#framework_zip_file(spec) ⇒ Object



72
73
74
# File 'lib/swordfish/config/config_builder.rb', line 72

def framework_zip_file(spec)
  File.join(zip_dir_name, framework_name_version(spec))
end

#gen_dirObject

制作二进制打包 工程目录



55
56
57
58
59
60
61
# File 'lib/swordfish/config/config_builder.rb', line 55

def gen_dir
  @gen_dir ||= begin
                 dir = File.join(root_dir,gen_name)
                 Dir.mkdir(dir) unless File.exist?dir
                 Pathname.new(dir)
               end
end

#gen_nameObject

制作二进制打包 工程目录



50
51
52
# File 'lib/swordfish/config/config_builder.rb', line 50

def gen_name
  'swordfish-archive'
end

#library_file(spec) ⇒ Object



87
88
89
# File 'lib/swordfish/config/config_builder.rb', line 87

def library_file(spec)
  File.join(zip_dir_name, library_name(spec))
end

#library_name(spec) ⇒ Object



80
81
82
# File 'lib/swordfish/config/config_builder.rb', line 80

def library_name(spec)
  library_name_version(spec.name, spec.version)
end

#library_name_version(name, version) ⇒ Object



84
85
86
# File 'lib/swordfish/config/config_builder.rb', line 84

def library_name_version(name,version)
  "swordfish_#{name}_#{version}"
end

#load_build_configObject

加载配置项



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/swordfish/config/config_builder.rb', line 19

def load_build_config
  @pod_source_list = []
  @white_pod_list = []
  project_root = Pod::Config.instance.project_root
  path = File.join(project_root.to_s, 'SwordfishArchiveConfig.json')

  if File.exist?(path)
    config = JSON.parse(File.read(path))

    @pod_source_list = config['pod-source-list'] || []
    # 添加默认source
    @pod_source_list << 'https://github.com/CocoaPods/Specs.git' if @pod_source_list.empty?
    UI.warn "====== archive-pod-source-list = #{@pod_source_list}" if @pod_source_list

    @white_pod_list = config['archive-white-pod-list']
    UI.warn "====== archive-white-pod-list = #{@white_pod_list}" if @white_pod_list

    @xcode_build_name = config['xcode_build_path']
    @root_dir = config['root_dir'] unless config['root_dir'].nil?
  end

end

#local_psec_dirObject



108
109
110
111
112
113
114
# File 'lib/swordfish/config/config_builder.rb', line 108

def local_psec_dir
  @local_psec_dir ||= begin
                         dir = File.join(root_dir,local_spec_dir_name)
                         Dir.mkdir(dir) unless File.exist?dir
                         Pathname.new(dir)
                       end
end

#local_spec_dir_nameObject

本地



104
105
106
# File 'lib/swordfish/config/config_builder.rb', line 104

def local_spec_dir_name
  "swordfish-spec"
end

#pod_source_listObject

制作pod源



210
211
212
# File 'lib/swordfish/config/config_builder.rb', line 210

def pod_source_list
  @pod_source_list
end

#root_dirObject

处理编译产物后存储根目录,会存放spec、 json、zip的父目录,默认是工程的同级目录下,“#basename-build-temp”



193
194
195
196
197
198
199
200
201
202
# File 'lib/swordfish/config/config_builder.rb', line 193

def root_dir
  @root_dir ||= begin
                   basename = File.basename(Pod::Config.instance.installation_root)
                   parent_dir = File.dirname(Pod::Config.instance.installation_root)
                   root_name = File.join(parent_dir,"#{basename}-build-temp")
                   Dir.mkdir(root_name) unless File.exist?root_name
                   Pathname.new(root_name)
                 end

end

#target_nameObject

编译target名,如 seeyou



131
132
133
134
135
136
# File 'lib/swordfish/config/config_builder.rb', line 131

def target_name
  @target_name ||= begin
                     target_name_str =  Pod::Config.instance.podfile.root_target_definitions.first.children.first.to_s
                     target_name_str[5,target_name_str.length]
                   end
end

#white_pod_listObject

制作二进制 白名单



205
206
207
# File 'lib/swordfish/config/config_builder.rb', line 205

def white_pod_list
  @white_pod_list
end

#xcode_build_dirObject

完整的xcodebuild 输出路径



160
161
162
163
164
165
166
167
168
169
170
# File 'lib/swordfish/config/config_builder.rb', line 160

def xcode_build_dir
  @xcode_build_dir ||= begin
                          temp_xcode_build_name = xcode_build_name
                          if File.exist?(temp_xcode_build_name)
                              Pathname.new(temp_xcode_build_name)
                          else
                              dir = File.join(root_dir,xcode_build_name)
                              Pathname.new(dir)
                          end
                       end
end

#xcode_build_nameObject

编译缓存文件目录,如Xcodebuild的编译缓存目录 如果有配置, 配置完整路径,会使用



140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
# File 'lib/swordfish/config/config_builder.rb', line 140

def xcode_build_name
  @xcode_build_name ||= begin
                            project_root = Pod::Config.instance.project_root
                            path = File.join(project_root.to_s, 'SwordfishArchive.json')

                            if File.exist?(path)
                              config = JSON.parse(File.read(path))
                              @xcode_build_name = config['xcode_build_path']
                            end
                            #默认值,在美柚上使用默认
                            if @xcode_build_name.nil? || Dir.exist?(@xcode_build_name)
                              @xcode_build_name = "xcode-build/Build/Intermediates.noindex/ArchiveIntermediates/#{target_name}/IntermediateBuildFilesPath/UninstalledProducts/iphoneos/"
                            end
                            puts @xcode_build_name
                            @xcode_build_name
                        end
end

#xcode_BuildProductsPath_dirObject

完整的xcodebuild BuildProductsPath输出路径,



172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
# File 'lib/swordfish/config/config_builder.rb', line 172

def xcode_BuildProductsPath_dir
  @xcode_BuildProductsPath_dir ||= begin
                                     temp_xcode_BuildProductsPath_dir = "xcode-build/Build/Intermediates.noindex/ArchiveIntermediates/#{target_name}/BuildProductsPath/"
                                     full_path = File.join(root_dir, temp_xcode_BuildProductsPath_dir)

                                     if (File.exist?(full_path))
                                       Dir.chdir(full_path) do
                                         iphoneos = Dir.glob('*-iphoneos')
                                         if iphoneos.length > 0
                                           full_path = File.join(full_path,iphoneos.first)
                                         else
                                           UI.warn "====== 找不到 *-iphoneos @xcode_BuildProductsPath_dir = #{@xcode_BuildProductsPath_dir}"
                                         end
                                       end
                                     end
                                     Pathname.new(full_path)
                                   end
end

#zip_dirObject



95
96
97
98
99
100
101
# File 'lib/swordfish/config/config_builder.rb', line 95

def zip_dir
  @zip_dir ||= begin
                 dir = File.join(root_dir,zip_dir_name)
                 Dir.mkdir(dir) unless File.exist?dir
                 Pathname.new(dir)
               end
end

#zip_dir_nameObject



91
92
93
# File 'lib/swordfish/config/config_builder.rb', line 91

def zip_dir_name
  "swordfish-zip"
end