souyuz 0.1.0 → 0.6.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 +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
|