-
Notifications
You must be signed in to change notification settings - Fork 5.6k
/
ipa_upload_package_builder.rb
53 lines (41 loc) 路 1.75 KB
/
ipa_upload_package_builder.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
require "digest/md5"
require 'securerandom'
require_relative 'globals'
require_relative 'ui/ui'
require_relative 'module'
module FastlaneCore
# Builds a package for the binary ready to be uploaded with the iTunes Transporter
class IpaUploadPackageBuilder
METADATA_FILE_NAME = "metadata.xml"
attr_accessor :package_path
def generate(app_id: nil, ipa_path: nil, package_path: nil, platform: nil)
self.package_path = File.join(package_path, "#{app_id}-#{SecureRandom.uuid}.itmsp")
FileUtils.rm_rf(self.package_path) if File.directory?(self.package_path)
FileUtils.mkdir_p(self.package_path)
ipa_path = copy_ipa(ipa_path)
@data = {
apple_id: app_id,
file_size: File.size(ipa_path),
ipa_path: File.basename(ipa_path), # this is only the base name as the ipa is inside the package
md5: Digest::MD5.file(ipa_path).hexdigest,
archive_type: "bundle",
platform: (platform || "ios") # pass "appletvos" for Apple TV's IPA
}
xml_path = File.join(FastlaneCore::ROOT, "lib/assets/XMLTemplate.xml.erb")
xml = ERB.new(File.read(xml_path)).result(binding) # https://web.archive.org/web/20160430190141/www.rrn.dk/rubys-erb-templating-system
File.write(File.join(self.package_path, METADATA_FILE_NAME), xml)
UI.success("Wrote XML data to '#{self.package_path}'") if FastlaneCore::Globals.verbose?
return self.package_path
end
def unique_ipa_path(ipa_path)
"#{Digest::SHA256.file(ipa_path).hexdigest}.ipa"
end
private
def copy_ipa(ipa_path)
ipa_file_name = unique_ipa_path(ipa_path)
resulting_path = File.join(self.package_path, ipa_file_name)
FileUtils.cp(ipa_path, resulting_path)
return resulting_path
end
end
end