souyuz 0.1.0 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/LICENSE +1 -1
- data/README.md +2 -2
- data/lib/souyuz/detect_values.rb +23 -2
- data/lib/souyuz/generators/android_zipalign_command_generator.rb +21 -6
- data/lib/souyuz/generators/build_command_generator.rb +7 -5
- data/lib/souyuz/generators/java_sign_command_generator.rb +5 -7
- data/lib/souyuz/generators/zip_dsym_command_generator.rb +46 -0
- data/lib/souyuz/manager.rb +2 -2
- data/lib/souyuz/msbuild/project.rb +3 -3
- data/lib/souyuz/options.rb +22 -2
- data/lib/souyuz/platform.rb +9 -1
- data/lib/souyuz/runner.rb +25 -17
- data/lib/souyuz/version.rb +1 -1
- data/lib/souyuz.rb +3 -0
- metadata +5 -38
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f064a8e18a28767b799724c537915ae95d4f71b8
|
4
|
+
data.tar.gz: fb930ec7fea16848078229a09f8479902c6440be
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aa52e4eb5153d475c293aede7bcbe0eaa5ab3aaac914d81b626ce99eab806b652727a6bfe4163f87a9d0a945290d434946dc46c0f59c64c94f6d0c82e0c43f96
|
7
|
+
data.tar.gz: 505cdf930681b4e4ff9027df29f20d3d601d2f1a13d1b905648687458bc34d3f1d970121624090ae7b4c7a5017ecb4612e14c7392b80fb46dba67a32dc93b91d
|
data/LICENSE
CHANGED
data/README.md
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
# Souyuz
|
2
2
|
|
3
|
-
A fastlane component to make Xamarin builds a breeze.
|
3
|
+
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
4
|
|
5
5
|
## ToDos
|
6
6
|
|
7
|
+
* clean up code (!!!)
|
7
8
|
* replace path concat with `File.join()`
|
8
|
-
* automatically determine `:platform`
|
9
9
|
|
10
10
|
## Licensing
|
11
11
|
|
data/lib/souyuz/detect_values.rb
CHANGED
@@ -25,6 +25,7 @@ module Souyuz
|
|
25
25
|
|
26
26
|
detect_output_path doc_csproj
|
27
27
|
detect_manifest doc_csproj
|
28
|
+
detect_info_plist
|
28
29
|
detect_assembly_name doc_csproj # we can only do that for android *after* we detected the android manitfest
|
29
30
|
|
30
31
|
return config
|
@@ -73,7 +74,10 @@ module Souyuz
|
|
73
74
|
platform = Souyuz.config[:build_platform]
|
74
75
|
|
75
76
|
doc_node = doc_csproj.xpath("/*[local-name()='Project']/*[local-name()='PropertyGroup'][translate(@*[local-name() = 'Condition'],'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz') = \" '$(configuration)|$(platform)' == '#{configuration.downcase}|#{platform.downcase}' \"]/*[local-name()='OutputPath']/text()")
|
76
|
-
|
77
|
+
output_path = doc_node.text
|
78
|
+
UI.user_error! 'Not able to find output path automatically, try to specify it via `output_path` parameter.' unless output_path
|
79
|
+
|
80
|
+
Souyuz.config[:output_path] = abs_project_path output_path
|
77
81
|
end
|
78
82
|
|
79
83
|
def self.detect_manifest(doc_csproj)
|
@@ -83,10 +87,27 @@ module Souyuz
|
|
83
87
|
Souyuz.config[:manifest_path] = abs_project_path doc_node.text
|
84
88
|
end
|
85
89
|
|
90
|
+
def self.detect_info_plist
|
91
|
+
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
|
+
|
101
|
+
plist_path = files.first # pick first file as solution
|
102
|
+
UI.user_error! 'Not able to find Info.plist automatically, try to specify it via `plist_path` parameter.' unless plist_path
|
103
|
+
|
104
|
+
Souyuz.config[:plist_path] = abs_project_path plist_path
|
105
|
+
end
|
106
|
+
|
86
107
|
def self.detect_assembly_name(doc_csproj)
|
87
108
|
return if Souyuz.config[:assembly_name]
|
88
109
|
|
89
|
-
if [ Platform::IOS, Platform::
|
110
|
+
if [ Platform::IOS, Platform::OSX ].include? Souyuz.config[:platform]
|
90
111
|
Souyuz.config[:assembly_name] = doc_csproj.css('PropertyGroup > AssemblyName').text
|
91
112
|
elsif Souyuz.config[:platform] == Platform::ANDROID
|
92
113
|
doc = get_parser_handle Souyuz.config[:manifest_path] # explicitly for this call, no cache needed
|
@@ -1,17 +1,22 @@
|
|
1
1
|
# -*- encoding : utf-8 -*-
|
2
2
|
module Souyuz
|
3
3
|
# Responsible for building the zipalign command
|
4
|
-
# TODO implement
|
5
4
|
class AndroidZipalignCommandGenerator
|
6
5
|
class << self
|
7
6
|
def generate
|
8
|
-
|
7
|
+
build_apk_path = Souyuz.cache[:build_apk_path]
|
8
|
+
aligned_apk = "#{build_apk_path}-signed"
|
9
|
+
|
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]
|
10
15
|
parts += pipe
|
11
16
|
|
12
17
|
parts
|
13
18
|
end
|
14
|
-
|
19
|
+
|
15
20
|
def detect_build_tools
|
16
21
|
# determine latest buildtool version
|
17
22
|
buildtools = File.join(ENV['ANDROID_HOME'], 'build-tools')
|
@@ -26,8 +31,18 @@ module Souyuz
|
|
26
31
|
buildtools, version = detect_build_tools
|
27
32
|
zipalign = ENV['ANDROID_HOME'] ? File.join(buildtools, version, 'zipalign') : 'zipalign'
|
28
33
|
|
29
|
-
|
30
|
-
|
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
|
31
46
|
end
|
32
47
|
|
33
48
|
def prefix
|
@@ -36,7 +51,7 @@ module Souyuz
|
|
36
51
|
|
37
52
|
def pipe
|
38
53
|
pipe = []
|
39
|
-
|
54
|
+
|
40
55
|
pipe
|
41
56
|
end
|
42
57
|
end
|
@@ -8,7 +8,7 @@ module Souyuz
|
|
8
8
|
parts << "xbuild"
|
9
9
|
parts += options
|
10
10
|
parts += targets
|
11
|
-
parts
|
11
|
+
parts += project
|
12
12
|
parts += pipe
|
13
13
|
|
14
14
|
parts
|
@@ -42,15 +42,17 @@ module Souyuz
|
|
42
42
|
end
|
43
43
|
|
44
44
|
def project
|
45
|
-
|
45
|
+
path = []
|
46
|
+
|
47
|
+
path << Souyuz.config[:project_path] if Souyuz.project.android?
|
48
|
+
path << Souyuz.config[:solution_path] if Souyuz.project.ios? or Souyuz.project.osx?
|
46
49
|
|
47
|
-
|
48
|
-
Souyuz.config[:solution_path] if Souyuz.project.ios? or Souyuz.project.mac?
|
50
|
+
path
|
49
51
|
end
|
50
52
|
|
51
53
|
def pipe
|
52
54
|
pipe = []
|
53
|
-
|
55
|
+
|
54
56
|
pipe
|
55
57
|
end
|
56
58
|
end
|
@@ -1,12 +1,11 @@
|
|
1
1
|
# -*- encoding : utf-8 -*-
|
2
2
|
module Souyuz
|
3
3
|
# Responsible for building the jarsigner command
|
4
|
-
# TODO implement
|
5
4
|
class JavaSignCommandGenerator
|
6
5
|
class << self
|
7
6
|
def generate
|
8
7
|
build_apk_path = Souyuz.cache[:build_apk_path]
|
9
|
-
signed_apk_path = "#{build_apk_path}-unaligned
|
8
|
+
Souyuz.cache[:signed_apk_path] = "#{build_apk_path}-unaligned"
|
10
9
|
|
11
10
|
parts = prefix
|
12
11
|
parts << detect_jarsigner_executable
|
@@ -23,10 +22,9 @@ module Souyuz
|
|
23
22
|
end
|
24
23
|
|
25
24
|
def detect_jarsigner_executable
|
26
|
-
|
27
|
-
UI.user_error! 'Jarsigner executable not found, check if your `JAVA_HOME` env is set' unless system jarsigner
|
25
|
+
jarsigner = ENV['JAVA_HOME'] ? File.join(ENV['JAVA_HOME'], 'bin', 'jarsigner') : 'jarsigner'
|
28
26
|
|
29
|
-
|
27
|
+
jarsigner
|
30
28
|
end
|
31
29
|
|
32
30
|
def options
|
@@ -39,14 +37,14 @@ module Souyuz
|
|
39
37
|
options << "-storepass #{config[:keystore_password]}"
|
40
38
|
options << "-keystore #{config[:keystore_path]}"
|
41
39
|
options << "-tsa #{config[:keystore_tsa]}"
|
42
|
-
options << "-signedjar #{Souyuz.cache[:
|
40
|
+
options << "-signedjar #{Souyuz.cache[:signed_apk_path]}"
|
43
41
|
|
44
42
|
options
|
45
43
|
end
|
46
44
|
|
47
45
|
def pipe
|
48
46
|
pipe = []
|
49
|
-
|
47
|
+
|
50
48
|
pipe
|
51
49
|
end
|
52
50
|
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
module Souyuz
|
3
|
+
# Responsible for building the zip dsym command
|
4
|
+
class ZipDsymCommandGenerator
|
5
|
+
class << self
|
6
|
+
def generate
|
7
|
+
parts = prefix
|
8
|
+
parts << detect_zip_executable
|
9
|
+
parts += options
|
10
|
+
parts << build_apk_path
|
11
|
+
parts += pipe
|
12
|
+
|
13
|
+
parts
|
14
|
+
end
|
15
|
+
|
16
|
+
def prefix
|
17
|
+
["set -o pipefail &&"]
|
18
|
+
end
|
19
|
+
|
20
|
+
def detect_zip_executable
|
21
|
+
# dunno if anyone wants a zip which is not available thorgh PATH
|
22
|
+
# but if this case exists, we provide the opportunity to do so
|
23
|
+
zip = ENV['SOUYUZ_ZIP_PATH'] || 'zip'
|
24
|
+
|
25
|
+
zip
|
26
|
+
end
|
27
|
+
|
28
|
+
def options
|
29
|
+
build_dsym_path = Souyuz.cache[:build_dsym_path]
|
30
|
+
|
31
|
+
options = []
|
32
|
+
options << "-r"
|
33
|
+
options << "#{build_dsym_path}.zip"
|
34
|
+
options << build_dsym_path
|
35
|
+
|
36
|
+
options
|
37
|
+
end
|
38
|
+
|
39
|
+
def pipe
|
40
|
+
pipe = []
|
41
|
+
|
42
|
+
pipe
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
data/lib/souyuz/manager.rb
CHANGED
@@ -7,8 +7,8 @@ module Souyuz
|
|
7
7
|
Souyuz.config = options
|
8
8
|
|
9
9
|
FastlaneCore::PrintTable.print_values(config: Souyuz.config,
|
10
|
-
|
11
|
-
|
10
|
+
hide_keys: [],
|
11
|
+
title: "Summary for souyuz #{Souyuz::VERSION}")
|
12
12
|
|
13
13
|
return Runner.new.run
|
14
14
|
end
|
@@ -20,8 +20,8 @@ module Souyuz
|
|
20
20
|
is_platform? Souyuz::Platform::IOS
|
21
21
|
end
|
22
22
|
|
23
|
-
def
|
24
|
-
is_platform? Souyuz::Platform::
|
23
|
+
def osx?
|
24
|
+
is_platform? Souyuz::Platform::OSX
|
25
25
|
end
|
26
26
|
|
27
27
|
def android?
|
@@ -32,7 +32,7 @@ module Souyuz
|
|
32
32
|
return case platform
|
33
33
|
when Souyuz::Platform::IOS
|
34
34
|
then self.project_name.downcase.include? 'ios'
|
35
|
-
when Souyuz::Platform::
|
35
|
+
when Souyuz::Platform::OSX
|
36
36
|
then self.project_name.downcase.include? 'mac'
|
37
37
|
when Souyuz::Platform::ANDROID
|
38
38
|
then self.project_name.downcase.include? 'droid'
|
data/lib/souyuz/options.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
# -*- encoding : utf-8 -*-
|
2
2
|
require "fastlane_core"
|
3
|
-
require "credentials_manager"
|
4
3
|
|
5
4
|
module Souyuz
|
6
5
|
class Options
|
@@ -38,7 +37,7 @@ module Souyuz
|
|
38
37
|
optional: true),
|
39
38
|
FastlaneCore::ConfigItem.new(key: :platform,
|
40
39
|
env_name: "SOUYUZ_PLATFORM",
|
41
|
-
description: "Targeted device platform (i.e. android, ios,
|
40
|
+
description: "Targeted device platform (i.e. android, ios, osx)",
|
42
41
|
optional: false),
|
43
42
|
FastlaneCore::ConfigItem.new(key: :solution_path,
|
44
43
|
env_name: "SOUYUZ_SOLUTION_PATH",
|
@@ -52,6 +51,27 @@ module Souyuz
|
|
52
51
|
env_name: "SOUYUZ_ANDROID_MANIFEST_PATH",
|
53
52
|
description: "Path to the android manifest (xml) file",
|
54
53
|
optional: true),
|
54
|
+
FastlaneCore::ConfigItem.new(key: :plist_path,
|
55
|
+
env_name: "SOUYUZ_IOS_PLIST_PATH",
|
56
|
+
description: "Path to the iOS plist file",
|
57
|
+
optional: true),
|
58
|
+
FastlaneCore::ConfigItem.new(key: :keystore_path,
|
59
|
+
env_name: "SOUYUZ_ANDROID_KEYSTORE_PATH",
|
60
|
+
description: "Path to the keystore",
|
61
|
+
optional: true),
|
62
|
+
FastlaneCore::ConfigItem.new(key: :keystore_alias,
|
63
|
+
env_name: "SOUYUZ_ANDROID_KEYSTORE_ALIAS",
|
64
|
+
description: "Alias of the keystore",
|
65
|
+
optional: true),
|
66
|
+
FastlaneCore::ConfigItem.new(key: :keystore_password,
|
67
|
+
env_name: "SOUYUZ_ANDROID_KEYSTORE_PASSWORD",
|
68
|
+
description: "Password of the keystore",
|
69
|
+
optional: true),
|
70
|
+
FastlaneCore::ConfigItem.new(key: :keystore_tsa,
|
71
|
+
default_value: 'http://timestamp.digicert.com',
|
72
|
+
env_name: "SOUYUZ_ANDROID_KEYSTORE_TSA",
|
73
|
+
description: "TSA for jarsigner",
|
74
|
+
optional: true),
|
55
75
|
]
|
56
76
|
end
|
57
77
|
end
|
data/lib/souyuz/platform.rb
CHANGED
@@ -2,7 +2,15 @@
|
|
2
2
|
module Souyuz
|
3
3
|
module Platform
|
4
4
|
IOS = 'ios'
|
5
|
-
|
5
|
+
OSX = 'osx'
|
6
6
|
ANDROID = 'android'
|
7
|
+
|
8
|
+
def self.from_lane_context(context)
|
9
|
+
current_platform = context[:PLATFORM_NAME].to_s
|
10
|
+
|
11
|
+
# map in the future, if necessary
|
12
|
+
|
13
|
+
current_platform
|
14
|
+
end
|
7
15
|
end
|
8
16
|
end
|
data/lib/souyuz/runner.rb
CHANGED
@@ -2,16 +2,22 @@
|
|
2
2
|
module Souyuz
|
3
3
|
class Runner
|
4
4
|
def run
|
5
|
+
config = Souyuz.config
|
6
|
+
|
5
7
|
build_app
|
6
8
|
|
7
|
-
if Souyuz.project.ios? or Souyuz.project.
|
9
|
+
if Souyuz.project.ios? or Souyuz.project.osx?
|
8
10
|
compress_and_move_dsym
|
9
11
|
path = ipa_file
|
10
12
|
|
11
13
|
path
|
12
14
|
elsif Souyuz.project.android?
|
13
15
|
path = apk_file
|
14
|
-
|
16
|
+
if (config[:keystore_path] && config[:keystore_alias])
|
17
|
+
UI.success "Jar it, sign it, zip it..."
|
18
|
+
|
19
|
+
jarsign_and_zipalign
|
20
|
+
end
|
15
21
|
|
16
22
|
path
|
17
23
|
end
|
@@ -20,8 +26,8 @@ module Souyuz
|
|
20
26
|
def build_app
|
21
27
|
command = BuildCommandGenerator.generate
|
22
28
|
FastlaneCore::CommandExecutor.execute(command: command,
|
23
|
-
|
24
|
-
|
29
|
+
print_all: true,
|
30
|
+
print_command: !Souyuz.config[:silent])
|
25
31
|
end
|
26
32
|
|
27
33
|
#
|
@@ -32,19 +38,23 @@ module Souyuz
|
|
32
38
|
build_path = Souyuz.project.options[:output_path]
|
33
39
|
assembly_name = Souyuz.project.options[:assembly_name]
|
34
40
|
|
41
|
+
Souyuz.cache[:build_apk_path] = "#{build_path}/#{assembly_name}.apk"
|
42
|
+
|
35
43
|
"#{build_path}/#{assembly_name}.apk"
|
36
44
|
end
|
37
45
|
|
38
46
|
def jarsign_and_zipalign
|
39
47
|
command = JavaSignCommandGenerator.generate
|
40
48
|
FastlaneCore::CommandExecutor.execute(command: command,
|
41
|
-
|
42
|
-
|
49
|
+
print_all: false,
|
50
|
+
print_command: !Souyuz.config[:silent])
|
51
|
+
|
52
|
+
UI.success "Successfully signed apk #{Souyuz.cache[:build_apk_path]}"
|
43
53
|
|
44
54
|
command = AndroidZipalignCommandGenerator.generate
|
45
55
|
FastlaneCore::CommandExecutor.execute(command: command,
|
46
|
-
|
47
|
-
|
56
|
+
print_all: true,
|
57
|
+
print_command: !Souyuz.config[:silent])
|
48
58
|
end
|
49
59
|
|
50
60
|
#
|
@@ -65,20 +75,18 @@ module Souyuz
|
|
65
75
|
end
|
66
76
|
|
67
77
|
def compress_and_move_dsym
|
68
|
-
require 'fileutils'
|
69
78
|
build_path = Souyuz.project.options[:output_path]
|
70
79
|
assembly_name = Souyuz.project.options[:assembly_name]
|
71
|
-
dsym_path = "#{build_path}/#{assembly_name}.app.dSYM"
|
72
80
|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
end
|
81
|
+
Souyuz.cache[:build_dsym_path] = "#{build_path}/#{assembly_name}.app.dSYM"
|
82
|
+
|
83
|
+
command = ZipDsymCommandGenerator.generate
|
84
|
+
FastlaneCore::CommandExecutor.execute(command: command,
|
85
|
+
print_all: true,
|
86
|
+
print_command: !Souyuz.config[:silent])
|
80
87
|
|
81
88
|
# move dsym aside ipa
|
89
|
+
dsym_path = "#{dsym_path}.zip"
|
82
90
|
if File.exists? dsym_path
|
83
91
|
FileUtils.mv(dsym_path, "#{package_path}/#{File.basename dsym_path}")
|
84
92
|
end
|
data/lib/souyuz/version.rb
CHANGED
data/lib/souyuz.rb
CHANGED
@@ -3,6 +3,9 @@ require 'souyuz/version'
|
|
3
3
|
require 'souyuz/platform'
|
4
4
|
require 'souyuz/manager'
|
5
5
|
require 'souyuz/generators/build_command_generator'
|
6
|
+
require 'souyuz/generators/android_zipalign_command_generator'
|
7
|
+
require 'souyuz/generators/java_sign_command_generator'
|
8
|
+
require 'souyuz/generators/zip_dsym_command_generator'
|
6
9
|
require 'souyuz/runner'
|
7
10
|
require 'souyuz/options'
|
8
11
|
require 'souyuz/detect_values'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: souyuz
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.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: 2017-02-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nokogiri
|
@@ -16,34 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '1.
|
19
|
+
version: '1.7'
|
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: '1.
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: fastlane_core
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - ">="
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: 0.41.2
|
34
|
-
- - "<"
|
35
|
-
- !ruby/object:Gem::Version
|
36
|
-
version: 1.0.0
|
37
|
-
type: :runtime
|
38
|
-
prerelease: false
|
39
|
-
version_requirements: !ruby/object:Gem::Requirement
|
40
|
-
requirements:
|
41
|
-
- - ">="
|
42
|
-
- !ruby/object:Gem::Version
|
43
|
-
version: 0.41.2
|
44
|
-
- - "<"
|
45
|
-
- !ruby/object:Gem::Version
|
46
|
-
version: 1.0.0
|
26
|
+
version: '1.7'
|
47
27
|
- !ruby/object:Gem::Dependency
|
48
28
|
name: magic_encoding
|
49
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -86,20 +66,6 @@ dependencies:
|
|
86
66
|
- - ">="
|
87
67
|
- !ruby/object:Gem::Version
|
88
68
|
version: '0'
|
89
|
-
- !ruby/object:Gem::Dependency
|
90
|
-
name: rspec
|
91
|
-
requirement: !ruby/object:Gem::Requirement
|
92
|
-
requirements:
|
93
|
-
- - "~>"
|
94
|
-
- !ruby/object:Gem::Version
|
95
|
-
version: 3.1.0
|
96
|
-
type: :development
|
97
|
-
prerelease: false
|
98
|
-
version_requirements: !ruby/object:Gem::Requirement
|
99
|
-
requirements:
|
100
|
-
- - "~>"
|
101
|
-
- !ruby/object:Gem::Version
|
102
|
-
version: 3.1.0
|
103
69
|
description: A fastlane component to make Xamarin builds a breeze
|
104
70
|
email: voydz@hotmail.com
|
105
71
|
executables:
|
@@ -116,6 +82,7 @@ files:
|
|
116
82
|
- lib/souyuz/generators/android_zipalign_command_generator.rb
|
117
83
|
- lib/souyuz/generators/build_command_generator.rb
|
118
84
|
- lib/souyuz/generators/java_sign_command_generator.rb
|
85
|
+
- lib/souyuz/generators/zip_dsym_command_generator.rb
|
119
86
|
- lib/souyuz/manager.rb
|
120
87
|
- lib/souyuz/msbuild/project.rb
|
121
88
|
- lib/souyuz/msbuild/solution.rb
|