souyuz 0.7.2 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/README.md +3 -1
- data/bin/souyuz +1 -1
- data/lib/souyuz/commands_generator.rb +0 -1
- data/lib/souyuz/detect_values.rb +38 -26
- data/lib/souyuz/generators/apk_sign_command_generator.rb +47 -0
- data/lib/souyuz/generators/build_command_generator.rb +11 -11
- data/lib/souyuz/generators/zip_dsym_command_generator.rb +1 -2
- data/lib/souyuz/generators/zipalign_command_generator.rb +42 -0
- data/lib/souyuz/manager.rb +0 -1
- data/lib/souyuz/msbuild/project.rb +5 -6
- data/lib/souyuz/msbuild/solution.rb +0 -1
- data/lib/souyuz/msbuild/solution_parser.rb +3 -4
- data/lib/souyuz/options.rb +11 -4
- data/lib/souyuz/platform.rb +0 -1
- data/lib/souyuz/runner.rb +15 -16
- data/lib/souyuz/version.rb +2 -2
- data/lib/souyuz.rb +2 -3
- metadata +20 -35
- data/lib/souyuz/generators/android_zipalign_command_generator.rb +0 -59
- data/lib/souyuz/generators/java_sign_command_generator.rb +0 -52
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: cfcbc75e52ece5af9c4eb049045525f607d7d3454189ad822727b6750185a659
|
4
|
+
data.tar.gz: 62b4b6f607e33b87b6253c67e96f55f39cdb0d0638ec05c2e27a7942543861a8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b445291e8406244c2f99e150fe402766111847ade4e32a308343bc5ffa120c0794d4e10ea57a083d43a27eceaa156942f54bd89f66aa009d06b5998d64b53507
|
7
|
+
data.tar.gz: eef32d0a9beb2f68852ddfefa0ef9c480067de86a57cd404a640297c2fb0b4c0561048f893b87b02aeb36ad325a8adcb9826fa0fa2873a4ac25ae4d39c871011
|
data/README.md
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# Souyuz
|
2
2
|
|
3
|
+
[](https://travis-ci.org/voydz/souyuz)
|
4
|
+
|
3
5
|
A fastlane component to make Xamarin builds a breeze. Souyuz is now avaialbe as an **Fastlane plugin** see [fastlane-plugin-souyuz](fastlane-plugin-souyuz) for details.
|
4
6
|
|
5
7
|
*NOTE: While souyuz should continue working with your existing configuration just fine, consider using the Fastlane plugin.*
|
@@ -25,4 +27,4 @@ souyuz(
|
|
25
27
|
|
26
28
|
## Licensing
|
27
29
|
|
28
|
-
Souyuz is licensed under the MIT License. See [LICENSE](LICENSE) for the full license text.
|
30
|
+
Souyuz is licensed under the MIT License. See [LICENSE](LICENSE) for the full license text.
|
data/bin/souyuz
CHANGED
data/lib/souyuz/detect_values.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
# -*- encoding : utf-8 -*-
|
2
1
|
require 'nokogiri'
|
3
2
|
|
4
3
|
module Souyuz
|
@@ -9,7 +8,7 @@ module Souyuz
|
|
9
8
|
def self.set_additional_default_values
|
10
9
|
config = Souyuz.config
|
11
10
|
|
12
|
-
# TODO detect_platform automatically for :platform config
|
11
|
+
# TODO: detect_platform automatically for :platform config
|
13
12
|
|
14
13
|
# set correct implicit build platform for android
|
15
14
|
if config[:platform] == Platform::ANDROID
|
@@ -25,6 +24,7 @@ module Souyuz
|
|
25
24
|
|
26
25
|
detect_output_path doc_csproj
|
27
26
|
detect_manifest doc_csproj
|
27
|
+
detect_build_tools
|
28
28
|
detect_info_plist
|
29
29
|
detect_assembly_name doc_csproj # we can only do that for android *after* we detected the android manitfest
|
30
30
|
|
@@ -35,16 +35,8 @@ module Souyuz
|
|
35
35
|
|
36
36
|
def self.detect_solution
|
37
37
|
return if Souyuz.config[:solution_path]
|
38
|
-
itr = 0
|
39
|
-
query = '*.sln'
|
40
|
-
|
41
|
-
begin
|
42
|
-
files = Dir.glob(query)
|
43
|
-
query = "../#{query}"
|
44
|
-
itr += 1
|
45
|
-
end until files.any? or itr > 3
|
46
38
|
|
47
|
-
sln =
|
39
|
+
sln = find_file('*.sln', 3) # search for solution
|
48
40
|
UI.user_error! 'Not able to find solution file automatically, try to specify it via `solution_path` parameter.' unless sln
|
49
41
|
|
50
42
|
Souyuz.config[:solution_path] = abs_path sln
|
@@ -55,7 +47,7 @@ module Souyuz
|
|
55
47
|
|
56
48
|
path = Souyuz.config[:solution_path]
|
57
49
|
projects = Msbuild::SolutionParser.parse(path)
|
58
|
-
|
50
|
+
.get_platform Souyuz.config[:platform]
|
59
51
|
|
60
52
|
UI.user_error! "Not able to find any project in solution, that matches the platform `#{Souyuz.config[:platform]}`." unless projects.any?
|
61
53
|
|
@@ -87,18 +79,24 @@ module Souyuz
|
|
87
79
|
Souyuz.config[:manifest_path] = abs_project_path doc_node.text
|
88
80
|
end
|
89
81
|
|
82
|
+
def self.detect_build_tools
|
83
|
+
return if Souyuz.config[:buildtools_path]
|
84
|
+
|
85
|
+
UI.user_error! "Please ensure that the Android SDK is installed and the ANDROID_HOME variable is set correctly" unless ENV['ANDROID_HOME']
|
86
|
+
|
87
|
+
# determine latest buildtool version
|
88
|
+
buildtools = File.join(ENV['ANDROID_HOME'], 'build-tools')
|
89
|
+
version = Dir.entries(buildtools).sort.last
|
90
|
+
|
91
|
+
UI.success "Using Buildtools Version: #{version}..."
|
92
|
+
|
93
|
+
Souyuz.config[:buildtools_path] = File.join(buildtools, version)
|
94
|
+
end
|
95
|
+
|
90
96
|
def self.detect_info_plist
|
91
97
|
return if Souyuz.config[:plist_path] or Souyuz.config[:platform] != Platform::IOS
|
92
|
-
itr = 0
|
93
|
-
query = '../Info.plist'
|
94
|
-
|
95
|
-
begin
|
96
|
-
files = Dir.glob(query)
|
97
|
-
query = "*/#{query}"
|
98
|
-
itr += 1
|
99
|
-
end until files.any? or itr > 1
|
100
98
|
|
101
|
-
plist_path =
|
99
|
+
plist_path = find_file('Info.plist', 1) # search for plist
|
102
100
|
UI.user_error! 'Not able to find Info.plist automatically, try to specify it via `plist_path` parameter.' unless plist_path
|
103
101
|
|
104
102
|
Souyuz.config[:plist_path] = abs_project_path plist_path
|
@@ -107,7 +105,7 @@ module Souyuz
|
|
107
105
|
def self.detect_assembly_name(doc_csproj)
|
108
106
|
return if Souyuz.config[:assembly_name]
|
109
107
|
|
110
|
-
if [
|
108
|
+
if [Platform::IOS, Platform::OSX].include? Souyuz.config[:platform]
|
111
109
|
Souyuz.config[:assembly_name] = doc_csproj.css('PropertyGroup > AssemblyName').text
|
112
110
|
elsif Souyuz.config[:platform] == Platform::ANDROID
|
113
111
|
doc = get_parser_handle Souyuz.config[:manifest_path] # explicitly for this call, no cache needed
|
@@ -115,11 +113,25 @@ module Souyuz
|
|
115
113
|
end
|
116
114
|
end
|
117
115
|
|
118
|
-
|
116
|
+
private_class_method
|
117
|
+
|
118
|
+
def self.find_file(query, depth)
|
119
|
+
itr = 0
|
120
|
+
files = []
|
121
|
+
|
122
|
+
loop do
|
123
|
+
files = Dir.glob(query)
|
124
|
+
query = "../#{query}"
|
125
|
+
itr += 1
|
126
|
+
break if files.any? or itr > depth
|
127
|
+
end
|
128
|
+
|
129
|
+
return files.first # pick first file
|
130
|
+
end
|
119
131
|
|
120
132
|
def self.get_parser_handle(filename)
|
121
|
-
f = File
|
122
|
-
doc = Nokogiri::XML(f)
|
133
|
+
f = File.open(filename)
|
134
|
+
doc = Nokogiri::XML(f)
|
123
135
|
f.close
|
124
136
|
|
125
137
|
return doc
|
@@ -143,5 +155,5 @@ module Souyuz
|
|
143
155
|
path = File.expand_path(path) # absolute dir
|
144
156
|
path
|
145
157
|
end
|
146
|
-
end
|
158
|
+
end
|
147
159
|
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module Souyuz
|
2
|
+
# Responsible for building the apksigner command
|
3
|
+
class ApkSignCommandGenerator
|
4
|
+
class << self
|
5
|
+
def generate
|
6
|
+
build_apk_path = Souyuz.cache[:build_apk_path]
|
7
|
+
Souyuz.cache[:signed_apk_path] = "#{build_apk_path}-unaligned"
|
8
|
+
|
9
|
+
parts = prefix
|
10
|
+
parts << detect_apksigner_executable
|
11
|
+
parts += options
|
12
|
+
parts << build_apk_path
|
13
|
+
parts += pipe
|
14
|
+
|
15
|
+
parts
|
16
|
+
end
|
17
|
+
|
18
|
+
def prefix
|
19
|
+
[""]
|
20
|
+
end
|
21
|
+
|
22
|
+
def detect_apksigner_executable
|
23
|
+
apksigner = File.join(Souyuz.config[:buildtools_path], 'apksigner')
|
24
|
+
|
25
|
+
apksigner
|
26
|
+
end
|
27
|
+
|
28
|
+
def options
|
29
|
+
options = []
|
30
|
+
options << "sign" if $verbose
|
31
|
+
options << "--verbose" if $verbose
|
32
|
+
options << "--ks \"#{Souyuz.config[:keystore_path]}\""
|
33
|
+
options << "--ks-pass \"#{Souyuz.config[:keystore_password]}\""
|
34
|
+
options << "--ks-key-alias \"#{Souyuz.config[:keystore_alias]}\""
|
35
|
+
options << "--out \"#{Souyuz.cache[:signed_apk_path]}\""
|
36
|
+
|
37
|
+
options
|
38
|
+
end
|
39
|
+
|
40
|
+
def pipe
|
41
|
+
pipe = []
|
42
|
+
|
43
|
+
pipe
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -1,4 +1,3 @@
|
|
1
|
-
# -*- encoding : utf-8 -*-
|
2
1
|
module Souyuz
|
3
2
|
# Responsible for building the fully working build command
|
4
3
|
class BuildCommandGenerator
|
@@ -15,7 +14,7 @@ module Souyuz
|
|
15
14
|
end
|
16
15
|
|
17
16
|
def prefix
|
18
|
-
["
|
17
|
+
[""]
|
19
18
|
end
|
20
19
|
|
21
20
|
def compiler_bin
|
@@ -26,25 +25,26 @@ module Souyuz
|
|
26
25
|
config = Souyuz.config
|
27
26
|
|
28
27
|
options = []
|
29
|
-
options <<
|
30
|
-
options << "
|
31
|
-
options << "
|
32
|
-
if
|
28
|
+
options << config[:extra_build_options] if config[:extra_build_options]
|
29
|
+
options << "-p:Configuration=#{config[:build_configuration]}" if config[:build_configuration]
|
30
|
+
options << "-p:Platform=#{config[:build_platform]}" if Souyuz.project.ios? and config[:build_platform]
|
31
|
+
options << "-p:BuildIpa=true" if Souyuz.project.ios?
|
32
|
+
if config[:solution_path]
|
33
33
|
solution_dir = File.dirname(config[:solution_path])
|
34
|
-
options << "
|
34
|
+
options << "-p:SolutionDir=#{solution_dir}/"
|
35
35
|
end
|
36
36
|
|
37
37
|
options
|
38
38
|
end
|
39
39
|
|
40
40
|
def build_targets
|
41
|
-
Souyuz.config[:build_target].map! { |t| "
|
41
|
+
Souyuz.config[:build_target].map! { |t| "-t:#{t}" }
|
42
42
|
end
|
43
43
|
|
44
44
|
def targets
|
45
45
|
targets = []
|
46
46
|
targets += build_targets
|
47
|
-
targets << "
|
47
|
+
targets << "-t:SignAndroidPackage" if Souyuz.project.android?
|
48
48
|
|
49
49
|
targets
|
50
50
|
end
|
@@ -52,8 +52,8 @@ module Souyuz
|
|
52
52
|
def project
|
53
53
|
path = []
|
54
54
|
|
55
|
-
path << Souyuz.config[:project_path] if Souyuz.project.android?
|
56
|
-
path << Souyuz.config[:solution_path] if Souyuz.project.ios? or Souyuz.project.osx?
|
55
|
+
path << Souyuz.config[:project_path] # if Souyuz.project.android?
|
56
|
+
# path << Souyuz.config[:solution_path] if Souyuz.project.ios? or Souyuz.project.osx?
|
57
57
|
|
58
58
|
path
|
59
59
|
end
|
@@ -1,4 +1,3 @@
|
|
1
|
-
# -*- encoding : utf-8 -*-
|
2
1
|
module Souyuz
|
3
2
|
# Responsible for building the zip dsym command
|
4
3
|
class ZipDsymCommandGenerator
|
@@ -13,7 +12,7 @@ module Souyuz
|
|
13
12
|
end
|
14
13
|
|
15
14
|
def prefix
|
16
|
-
["
|
15
|
+
[""]
|
17
16
|
end
|
18
17
|
|
19
18
|
def detect_zip_executable
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module Souyuz
|
2
|
+
# Responsible for building the zipalign command
|
3
|
+
class ZipalignCommandGenerator
|
4
|
+
class << self
|
5
|
+
def generate
|
6
|
+
parts = prefix
|
7
|
+
parts << zipalign_apk
|
8
|
+
parts += options
|
9
|
+
parts << Souyuz.cache[:signed_apk_path]
|
10
|
+
parts << Souyuz.cache[:build_apk_path]
|
11
|
+
parts += pipe
|
12
|
+
|
13
|
+
parts
|
14
|
+
end
|
15
|
+
|
16
|
+
def zipalign_apk
|
17
|
+
zipalign = File.join(Souyuz.config[:buildtools_path], 'zipalign')
|
18
|
+
|
19
|
+
zipalign
|
20
|
+
end
|
21
|
+
|
22
|
+
def options
|
23
|
+
options = []
|
24
|
+
options << "-v" if $verbose
|
25
|
+
options << "-f"
|
26
|
+
options << "4"
|
27
|
+
|
28
|
+
options
|
29
|
+
end
|
30
|
+
|
31
|
+
def prefix
|
32
|
+
[""]
|
33
|
+
end
|
34
|
+
|
35
|
+
def pipe
|
36
|
+
pipe = []
|
37
|
+
|
38
|
+
pipe
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
data/lib/souyuz/manager.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
# -*- encoding : utf-8 -*-
|
2
1
|
module Souyuz
|
3
2
|
module Msbuild
|
4
3
|
class Project
|
@@ -30,14 +29,14 @@ module Souyuz
|
|
30
29
|
|
31
30
|
def is_platform?(platform)
|
32
31
|
return case platform
|
33
|
-
|
32
|
+
when Souyuz::Platform::IOS
|
34
33
|
then self.project_name.downcase.include? 'ios'
|
35
|
-
|
34
|
+
when Souyuz::Platform::OSX
|
36
35
|
then self.project_name.downcase.include? 'mac'
|
37
|
-
|
36
|
+
when Souyuz::Platform::ANDROID
|
38
37
|
then self.project_name.downcase.include? 'droid'
|
39
|
-
|
40
|
-
|
38
|
+
else false
|
39
|
+
end
|
41
40
|
end
|
42
41
|
end
|
43
42
|
end
|
@@ -1,15 +1,14 @@
|
|
1
|
-
# -*- encoding : utf-8 -*-
|
2
1
|
module Souyuz
|
3
2
|
module Msbuild
|
4
3
|
class SolutionParser
|
5
4
|
def self.parse(filename)
|
6
5
|
solution = Solution.new
|
7
6
|
|
8
|
-
File
|
7
|
+
File.open(filename) do |f|
|
9
8
|
f.read.split("\n").each do |line|
|
10
|
-
if line.start_with? "Project"
|
9
|
+
if line.start_with? "Project"
|
11
10
|
options = parse_line line
|
12
|
-
solution.add_project Project.new(options) #maybe we should not use the project class for this
|
11
|
+
solution.add_project Project.new(options) # maybe we should not use the project class for this
|
13
12
|
end
|
14
13
|
end
|
15
14
|
end
|
data/lib/souyuz/options.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
# -*- encoding : utf-8 -*-
|
2
1
|
require "fastlane"
|
3
2
|
|
4
3
|
module Souyuz
|
@@ -25,8 +24,12 @@ module Souyuz
|
|
25
24
|
FastlaneCore::ConfigItem.new(key: :build_target,
|
26
25
|
env_name: "SOUYUZ_BUILD_TARGET",
|
27
26
|
description: "Build targets to build",
|
28
|
-
default_value: [
|
27
|
+
default_value: ['Build'],
|
29
28
|
type: Array),
|
29
|
+
FastlaneCore::ConfigItem.new(key: :extra_build_options,
|
30
|
+
env_name: "SOUYUZ_EXTRA_BUILD_OPTIONS",
|
31
|
+
description: "Extra options to pass to `msbuild`. Example: `/p:MYOPTION=true`",
|
32
|
+
optional: true),
|
30
33
|
FastlaneCore::ConfigItem.new(key: :output_path,
|
31
34
|
env_name: "SOUYUZ_BUILD_OUTPUT_PATH",
|
32
35
|
description: "Build output path",
|
@@ -55,6 +58,10 @@ module Souyuz
|
|
55
58
|
env_name: "SOUYUZ_ANDROID_MANIFEST_PATH",
|
56
59
|
description: "Path to the android manifest (xml) file",
|
57
60
|
optional: true),
|
61
|
+
FastlaneCore::ConfigItem.new(key: :buildtools_path,
|
62
|
+
env_name: "SOUYUZ_ANDROID_BUILDTOOLS_PATH",
|
63
|
+
description: "Path to the android build tools",
|
64
|
+
optional: true),
|
58
65
|
FastlaneCore::ConfigItem.new(key: :plist_path,
|
59
66
|
env_name: "SOUYUZ_IOS_PLIST_PATH",
|
60
67
|
description: "Path to the iOS plist file",
|
@@ -74,8 +81,8 @@ module Souyuz
|
|
74
81
|
FastlaneCore::ConfigItem.new(key: :keystore_tsa,
|
75
82
|
default_value: 'http://timestamp.digicert.com',
|
76
83
|
env_name: "SOUYUZ_ANDROID_KEYSTORE_TSA",
|
77
|
-
description: "TSA for
|
78
|
-
optional: true)
|
84
|
+
description: "TSA for apksigner",
|
85
|
+
optional: true)
|
79
86
|
]
|
80
87
|
end
|
81
88
|
end
|
data/lib/souyuz/platform.rb
CHANGED
data/lib/souyuz/runner.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
# -*- encoding : utf-8 -*-
|
2
1
|
require 'fastlane'
|
3
2
|
|
4
3
|
module Souyuz
|
@@ -15,10 +14,8 @@ module Souyuz
|
|
15
14
|
path
|
16
15
|
elsif Souyuz.project.android?
|
17
16
|
path = apk_file
|
18
|
-
if
|
19
|
-
|
20
|
-
|
21
|
-
jarsign_and_zipalign
|
17
|
+
if config[:keystore_path] && config[:keystore_alias]
|
18
|
+
apksign_and_zipalign
|
22
19
|
end
|
23
20
|
|
24
21
|
path
|
@@ -45,18 +42,20 @@ module Souyuz
|
|
45
42
|
"#{build_path}/#{assembly_name}.apk"
|
46
43
|
end
|
47
44
|
|
48
|
-
def
|
49
|
-
|
45
|
+
def apksign_and_zipalign
|
46
|
+
UI.success "Start signing process..."
|
47
|
+
|
48
|
+
command = ZipalignCommandGenerator.generate
|
50
49
|
FastlaneCore::CommandExecutor.execute(command: command,
|
51
|
-
print_all:
|
50
|
+
print_all: true,
|
52
51
|
print_command: !Souyuz.config[:silent])
|
53
52
|
|
54
|
-
|
55
|
-
|
56
|
-
command = AndroidZipalignCommandGenerator.generate
|
53
|
+
command = ApkSignCommandGenerator.generate
|
57
54
|
FastlaneCore::CommandExecutor.execute(command: command,
|
58
|
-
print_all:
|
55
|
+
print_all: false,
|
59
56
|
print_command: !Souyuz.config[:silent])
|
57
|
+
|
58
|
+
UI.success "Successfully signed apk #{Souyuz.cache[:build_apk_path]}"
|
60
59
|
end
|
61
60
|
|
62
61
|
#
|
@@ -70,7 +69,7 @@ module Souyuz
|
|
70
69
|
# in the upcomming switch we determin the output path of iOS ipa files
|
71
70
|
# those change in the Xamarin.iOS Cycle 9 release
|
72
71
|
# see https://developer.xamarin.com/releases/ios/xamarin.ios_10/xamarin.ios_10.4/
|
73
|
-
if File.
|
72
|
+
if File.exist? "#{build_path}/#{assembly_name}.ipa"
|
74
73
|
# after Xamarin.iOS Cycle 9
|
75
74
|
package_path = build_path
|
76
75
|
else
|
@@ -92,13 +91,13 @@ module Souyuz
|
|
92
91
|
assembly_name = Souyuz.project.options[:assembly_name]
|
93
92
|
|
94
93
|
build_dsym_path = "#{build_path}/#{assembly_name}.app.dSYM"
|
95
|
-
|
94
|
+
unless File.exist? build_dsym_path
|
96
95
|
UI.success "Did not found dSYM at #{build_dsym_path}, skipping..."
|
97
96
|
return
|
98
97
|
end
|
99
98
|
|
100
99
|
Souyuz.cache[:build_dsym_path] = build_dsym_path
|
101
|
-
|
100
|
+
|
102
101
|
command = ZipDsymCommandGenerator.generate
|
103
102
|
FastlaneCore::CommandExecutor.execute(command: command,
|
104
103
|
print_all: true,
|
@@ -106,7 +105,7 @@ module Souyuz
|
|
106
105
|
|
107
106
|
# move dsym aside ipa
|
108
107
|
dsym_path = "#{dsym_path}.zip"
|
109
|
-
if File.
|
108
|
+
if File.exist? dsym_path
|
110
109
|
FileUtils.mv(dsym_path, "#{package_path}/#{File.basename dsym_path}")
|
111
110
|
end
|
112
111
|
end
|
data/lib/souyuz/version.rb
CHANGED
data/lib/souyuz.rb
CHANGED
@@ -1,10 +1,9 @@
|
|
1
|
-
# -*- encoding : utf-8 -*-
|
2
1
|
require 'souyuz/version'
|
3
2
|
require 'souyuz/platform'
|
4
3
|
require 'souyuz/manager'
|
5
4
|
require 'souyuz/generators/build_command_generator'
|
6
|
-
require 'souyuz/generators/
|
7
|
-
require 'souyuz/generators/
|
5
|
+
require 'souyuz/generators/zipalign_command_generator'
|
6
|
+
require 'souyuz/generators/apk_sign_command_generator'
|
8
7
|
require 'souyuz/generators/zip_dsym_command_generator'
|
9
8
|
require 'souyuz/runner'
|
10
9
|
require 'souyuz/options'
|
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: souyuz
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.10.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Felix Rudat
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-12-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: fastlane
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 1.103.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 1.103.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: highline
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -39,19 +39,19 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '1.7'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: nokogiri
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 1.
|
47
|
+
version: '1.7'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 1.
|
54
|
+
version: '1.7'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: pry
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -84,30 +84,16 @@ dependencies:
|
|
84
84
|
name: rubocop
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- -
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: '0'
|
90
|
-
type: :development
|
91
|
-
prerelease: false
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
- - ">="
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: '0'
|
97
|
-
- !ruby/object:Gem::Dependency
|
98
|
-
name: magic_encoding
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
100
|
-
requirements:
|
101
|
-
- - ">="
|
87
|
+
- - '='
|
102
88
|
- !ruby/object:Gem::Version
|
103
|
-
version:
|
89
|
+
version: 0.49.1
|
104
90
|
type: :development
|
105
91
|
prerelease: false
|
106
92
|
version_requirements: !ruby/object:Gem::Requirement
|
107
93
|
requirements:
|
108
|
-
- -
|
94
|
+
- - '='
|
109
95
|
- !ruby/object:Gem::Version
|
110
|
-
version:
|
96
|
+
version: 0.49.1
|
111
97
|
- !ruby/object:Gem::Dependency
|
112
98
|
name: bundler
|
113
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -149,10 +135,10 @@ files:
|
|
149
135
|
- lib/souyuz.rb
|
150
136
|
- lib/souyuz/commands_generator.rb
|
151
137
|
- lib/souyuz/detect_values.rb
|
152
|
-
- lib/souyuz/generators/
|
138
|
+
- lib/souyuz/generators/apk_sign_command_generator.rb
|
153
139
|
- lib/souyuz/generators/build_command_generator.rb
|
154
|
-
- lib/souyuz/generators/java_sign_command_generator.rb
|
155
140
|
- lib/souyuz/generators/zip_dsym_command_generator.rb
|
141
|
+
- lib/souyuz/generators/zipalign_command_generator.rb
|
156
142
|
- lib/souyuz/manager.rb
|
157
143
|
- lib/souyuz/msbuild/project.rb
|
158
144
|
- lib/souyuz/msbuild/solution.rb
|
@@ -173,15 +159,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
173
159
|
requirements:
|
174
160
|
- - ">="
|
175
161
|
- !ruby/object:Gem::Version
|
176
|
-
version: 2.
|
162
|
+
version: 2.2.0
|
177
163
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
178
164
|
requirements:
|
179
165
|
- - ">="
|
180
166
|
- !ruby/object:Gem::Version
|
181
167
|
version: '0'
|
182
168
|
requirements: []
|
183
|
-
|
184
|
-
rubygems_version: 2.5.0
|
169
|
+
rubygems_version: 3.0.3
|
185
170
|
signing_key:
|
186
171
|
specification_version: 4
|
187
172
|
summary: A fastlane component to make Xamarin builds a breeze
|
@@ -1,59 +0,0 @@
|
|
1
|
-
# -*- encoding : utf-8 -*-
|
2
|
-
module Souyuz
|
3
|
-
# Responsible for building the zipalign command
|
4
|
-
class AndroidZipalignCommandGenerator
|
5
|
-
class << self
|
6
|
-
def generate
|
7
|
-
build_apk_path = Souyuz.cache[:build_apk_path]
|
8
|
-
aligned_apk = "#{build_apk_path}-signed"
|
9
|
-
|
10
|
-
parts = prefix
|
11
|
-
parts << zipalign_apk
|
12
|
-
parts += options
|
13
|
-
parts << Souyuz.cache[:signed_apk_path]
|
14
|
-
parts << Souyuz.cache[:build_apk_path]
|
15
|
-
parts += pipe
|
16
|
-
|
17
|
-
parts
|
18
|
-
end
|
19
|
-
|
20
|
-
def detect_build_tools
|
21
|
-
# determine latest buildtool version
|
22
|
-
buildtools = File.join(ENV['ANDROID_HOME'], 'build-tools')
|
23
|
-
version = Dir.entries(buildtools).sort.last
|
24
|
-
|
25
|
-
UI.success "Using Buildtools Version: #{version}..."
|
26
|
-
|
27
|
-
[buildtools, version]
|
28
|
-
end
|
29
|
-
|
30
|
-
def zipalign_apk
|
31
|
-
buildtools, version = detect_build_tools
|
32
|
-
zipalign = ENV['ANDROID_HOME'] ? File.join(buildtools, version, 'zipalign') : 'zipalign'
|
33
|
-
|
34
|
-
zipalign
|
35
|
-
end
|
36
|
-
|
37
|
-
def options
|
38
|
-
config = Souyuz.config
|
39
|
-
|
40
|
-
options = []
|
41
|
-
options << "-v" if $verbose
|
42
|
-
options << "-f"
|
43
|
-
options << "4"
|
44
|
-
|
45
|
-
options
|
46
|
-
end
|
47
|
-
|
48
|
-
def prefix
|
49
|
-
["set -o pipefail &&"]
|
50
|
-
end
|
51
|
-
|
52
|
-
def pipe
|
53
|
-
pipe = []
|
54
|
-
|
55
|
-
pipe
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
@@ -1,52 +0,0 @@
|
|
1
|
-
# -*- encoding : utf-8 -*-
|
2
|
-
module Souyuz
|
3
|
-
# Responsible for building the jarsigner command
|
4
|
-
class JavaSignCommandGenerator
|
5
|
-
class << self
|
6
|
-
def generate
|
7
|
-
build_apk_path = Souyuz.cache[:build_apk_path]
|
8
|
-
Souyuz.cache[:signed_apk_path] = "#{build_apk_path}-unaligned"
|
9
|
-
|
10
|
-
parts = prefix
|
11
|
-
parts << detect_jarsigner_executable
|
12
|
-
parts += options
|
13
|
-
parts << build_apk_path
|
14
|
-
parts << Souyuz.config[:keystore_alias]
|
15
|
-
parts += pipe
|
16
|
-
|
17
|
-
parts
|
18
|
-
end
|
19
|
-
|
20
|
-
def prefix
|
21
|
-
["set -o pipefail &&"]
|
22
|
-
end
|
23
|
-
|
24
|
-
def detect_jarsigner_executable
|
25
|
-
jarsigner = ENV['JAVA_HOME'] ? File.join(ENV['JAVA_HOME'], 'bin', 'jarsigner') : 'jarsigner'
|
26
|
-
|
27
|
-
jarsigner
|
28
|
-
end
|
29
|
-
|
30
|
-
def options
|
31
|
-
config = Souyuz.config
|
32
|
-
|
33
|
-
options = []
|
34
|
-
options << "-verbose" if $verbose
|
35
|
-
options << "-sigalg MD5withRSA"
|
36
|
-
options << "-digestalg SHA1"
|
37
|
-
options << "-storepass \"#{config[:keystore_password]}\""
|
38
|
-
options << "-keystore \"#{config[:keystore_path]}\""
|
39
|
-
options << "-tsa #{config[:keystore_tsa]}"
|
40
|
-
options << "-signedjar \"#{Souyuz.cache[:signed_apk_path]}\""
|
41
|
-
|
42
|
-
options
|
43
|
-
end
|
44
|
-
|
45
|
-
def pipe
|
46
|
-
pipe = []
|
47
|
-
|
48
|
-
pipe
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|