class OceanPackage::Package
Attributes
archive_path[RW]
archive 归档路径
company_name[RW]
公司名称
configuration[RW]
配置信息: Debug, Release
date_time[RW]
本次打包的时间
end_time[RW]
结束时间
export_options_plist[RW]
导出ipa包使用的plist文件
extra_export_params[RW]
额外的打底参数,比如对buildsettings进行重写
ipa_max_retain_number[RW]
ipa 最大保存的数目
open_finder[RW]
打包完成是否打开文件夹
scheme[RW]
scheme 名称
start_time[RW]
开始时间
workspace_path[RW]
.xcworkspace 文件路径
Public Class Methods
new(workspace_path, scheme, configuration, archive_path, company_name, export_options_plist, extra_export_params, open_finder)
click to toggle source
# File lib/ocean_package/package.rb, line 35 def initialize(workspace_path, scheme, configuration, archive_path, company_name, export_options_plist, extra_export_params, open_finder) @workspace_path = workspace_path @scheme = scheme @configuration = configuration @archive_path = archive_path @company_name = company_name @date_time = Time.new.strftime("%Y-%m-%d_%H-%M-%S") @export_options_plist = export_options_plist @extra_export_params = extra_export_params @ipa_max_retain_number = 3 @open_finder = open_finder # 预设置开始时间 @start_time = Time.now end
Public Instance Methods
archive()
click to toggle source
archive
# File lib/ocean_package/package.rb, line 266 def archive res = system(archive_cmd) Log.info("archive result: #{res}") unless res == true Log.error("archive fail, please check !!!") exit(1) end end
archive_cmd()
click to toggle source
archive cmd
# File lib/ocean_package/package.rb, line 249 def archive_cmd cmd = 'xcodebuild' cmd += ' -workspace ' + final_workspace_path cmd += ' -scheme ' + @scheme cmd += ' -configuration ' + @configuration cmd += ' -archivePath ' + archive_file_path cmd += ' archive' cmd += ' -allowProvisioningUpdates' Log.divider Log.info("archive command: #{cmd}") Log.divider cmd end
archive_file_path()
click to toggle source
xcarchive 文件路径
# File lib/ocean_package/package.rb, line 238 def archive_file_path path = final_archive_path path += project_name path += '.xcarchive' Log.info("archive file path: #{path}") path end
check()
click to toggle source
一些校验
# File lib/ocean_package/package.rb, line 88 def check workspace_path_value = final_workspace_path unless workspace_path_value.end_with?(".xcworkspace") Log.error("workspace path error, please check !!!") exit(1) end scheme_value = "#{@scheme}" if scheme_value.empty? Log.error("please check scheme value !!!") exit(1) end configuration_value = "#{@configuration}" if configuration_value.empty? Log.error("please check configuration value !!!") exit(1) end # 有可能项目存在自定义的 configuration,所以不进行校验 archive_path_value = "#{@archive_path}" if archive_path_value.empty? Log.error("please check archive path !!!") exit(1) end export_options_plist_value = "#{@export_options_plist}" if export_options_plist_value.empty? Log.error("please check export options plist value !!!") exit(1) end end
clean()
click to toggle source
clean
# File lib/ocean_package/package.rb, line 188 def clean res = system(clean_cmd) Log.info("clean result: #{res}") unless res == true Log.error("clean fail, please check !!!") exit(1) end end
clean_cmd()
click to toggle source
clean cmd
# File lib/ocean_package/package.rb, line 173 def clean_cmd cmd = 'xcodebuild' cmd += ' clean' cmd += ' -workspace ' + @workspace_path cmd += ' -scheme ' + @scheme cmd += ' -configuration ' + @configuration Log.divider Log.info("clean command: #{cmd}") Log.divider cmd end
clean_history_ipa()
click to toggle source
************************************** clean history **************************************
# File lib/ocean_package/package.rb, line 127 def clean_history_ipa path = final_archive_path_company_pro sub_paths = Array.new Dir.each_child(path) do |x| unless "#{x}".eql?(".DS_Store") sub_paths.push("#{x}") end end if sub_paths.length > @ipa_max_retain_number Log.divider Log.info("clean history ipas: begin =======") count = sub_paths.length - @ipa_max_retain_number deleted_paths = sub_paths.first(count) deleted_paths.each do |p| new_path = path + p Log.info(new_path) delete_directory(new_path) end Log.info("clean history ipas: end =======") Log.divider end end
delete_directory(dirPath)
click to toggle source
# File lib/ocean_package/package.rb, line 155 def delete_directory(dirPath) if File.directory?(dirPath) Dir.foreach(dirPath) do |subFile| if subFile != '.' and subFile != '..' delete_directory(File.join(dirPath, subFile)); end end Dir.rmdir(dirPath) else File.delete(dirPath) end end
export()
click to toggle source
# File lib/ocean_package/package.rb, line 307 def export res = system(export_cmd) Log.info("export result: #{res}") unless res == true Log.error("export fail, please check !!!") exit(1) end end
export_cmd()
click to toggle source
************************************** export **************************************
# File lib/ocean_package/package.rb, line 282 def export_cmd cmd = 'xcodebuild' cmd += ' -exportArchive' cmd += ' -archivePath ' + archive_file_path cmd += ' -exportPath ' + final_archive_path cmd += ' -exportOptionsPlist ' + @export_options_plist unless "#{@extra_export_params}".empty? # 分割 params = "#{@extra_export_params}".split(",") # 再拼接 joined_string = params.join(" ") unless joined_string.empty? cmd += ' ' + joined_string end end Log.divider Log.info("export command: #{cmd}") Log.divider cmd end
final_archive_path()
click to toggle source
最终的打包路径
# File lib/ocean_package/package.rb, line 225 def final_archive_path path = final_archive_path_company_pro path += @date_time + '/' Log.info("final archive path: #{path}") # 不存在,需要进行创建,外部传入了 ipa 文件的情况 FileUtils.mkdir_p(path) path end
final_archive_path_company_pro()
click to toggle source
最终的打包路径,包含了公司,项目名称
# File lib/ocean_package/package.rb, line 212 def final_archive_path_company_pro path = processed_archive_path unless "#{@company_name}".empty? path += @company_name + '/' end unless "#{project_name}".empty? path += project_name + '/' end path end
final_workspace_path()
click to toggle source
workspace 的路径
# File lib/ocean_package/package.rb, line 52 def final_workspace_path "#{@workspace_path}" end
ipa_file_path()
click to toggle source
ipa 文件的路径
# File lib/ocean_package/package.rb, line 323 def ipa_file_path path = final_archive_path path += project_name path += '.ipa' Log.info("ipa file path: #{path}") path # 也可以在该目录下查找 ipa 后缀的文件 end
open_ipa_file_path()
click to toggle source
打开所在目录
# File lib/ocean_package/package.rb, line 336 def open_ipa_file_path path = final_archive_path open_cmd = "open #{path}" system(open_cmd) end
processed_archive_path()
click to toggle source
archive 路径,会判断结尾 '/'
# File lib/ocean_package/package.rb, line 203 def processed_archive_path if @archive_path.end_with?('/') @archive_path else @archive_path + '/' end end
project_name()
click to toggle source
项目的名称
# File lib/ocean_package/package.rb, line 62 def project_name File.basename(final_workspace_path, ".*") end
project_root_path()
click to toggle source
项目的根目录,也就是 .xcworkspace 所在的目录
# File lib/ocean_package/package.rb, line 57 def project_root_path File.dirname(final_workspace_path) end
run()
click to toggle source
执行打包相关命令
# File lib/ocean_package/package.rb, line 67 def run @start_time = Time.now # 检查必须参数 check # 清理历史的ipa clean_history_ipa # clean 项目 clean # 打包项目 archive # 导出 ipa 包 export @end_time = Time.now # 返回打包成功的 ipa 文件路径 ipa_file_path if @open_finder open_ipa_file_path end end