fastlane-plugin-xamarin 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE +21 -0
- data/README.md +54 -0
- data/lib/fastlane/plugin/xamarin.rb +16 -0
- data/lib/fastlane/plugin/xamarin/actions/nuget_action.rb +94 -0
- data/lib/fastlane/plugin/xamarin/actions/xamarin_android_action.rb +216 -0
- data/lib/fastlane/plugin/xamarin/actions/xamarin_ios_action.rb +195 -0
- data/lib/fastlane/plugin/xamarin/helper/xamarin_helper.rb +10 -0
- data/lib/fastlane/plugin/xamarin/version.rb +5 -0
- metadata +135 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: c9c954bc043fb20a4bfc10381a44b7917af930c26f447b284d3df53df2f884c8
|
4
|
+
data.tar.gz: 0fd7da757596866dcd3b29c29686db1c03508d1f01408db8adf402bb27042c63
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: f11755dabf174b1fd73349588429550d297fd8649908c181d2c3174d6cb1b6233b7b60e6f07cb80e88462ed486c58f43c57b46cd74f5fe648abf7721de8dbe9a
|
7
|
+
data.tar.gz: 88ebc39616dfb608555704098ae25d47b49841ca6d59b6c762349df630ecd27bb8023f41e44c8cc070ada469b40e8cd7b718a56d8b6451b0246de3e72ad301dd
|
data/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2018 Thomas Charriere <thomas.charriere@swisssign.com>
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
# xamarin plugin
|
2
|
+
|
3
|
+
[![fastlane Plugin Badge](https://rawcdn.githack.com/fastlane/fastlane/master/fastlane/assets/plugin-badge.svg)](https://rubygems.org/gems/fastlane-plugin-xamarin)
|
4
|
+
|
5
|
+
## Getting Started
|
6
|
+
|
7
|
+
WORK IN PROGRESS!
|
8
|
+
|
9
|
+
This project is a [_fastlane_](https://github.com/fastlane/fastlane) plugin. To get started with `fastlane-plugin-xamarin`, add it to your project by running:
|
10
|
+
|
11
|
+
```bash
|
12
|
+
fastlane add_plugin xamarin
|
13
|
+
```
|
14
|
+
|
15
|
+
## About xamarin
|
16
|
+
|
17
|
+
Build Xamarin Android + iOS projects
|
18
|
+
|
19
|
+
**Note to author:** Add a more detailed description about this plugin here. If your plugin contains multiple actions, make sure to mention them here.
|
20
|
+
|
21
|
+
## Example
|
22
|
+
|
23
|
+
Check out the [example `Fastfile`](fastlane/Fastfile) to see how to use this plugin. Try it by cloning the repo, running `fastlane install_plugins` and `bundle exec fastlane test`.
|
24
|
+
|
25
|
+
**Note to author:** Please set up a sample project to make it easy for users to explore what your plugin does. Provide everything that is necessary to try out the plugin in this project (including a sample Xcode/Android project if necessary)
|
26
|
+
|
27
|
+
## Run tests for this plugin
|
28
|
+
|
29
|
+
To run both the tests, and code style validation, run
|
30
|
+
|
31
|
+
```
|
32
|
+
rake
|
33
|
+
```
|
34
|
+
|
35
|
+
To automatically fix many of the styling issues, use
|
36
|
+
```
|
37
|
+
rubocop -a
|
38
|
+
```
|
39
|
+
|
40
|
+
## Issues and Feedback
|
41
|
+
|
42
|
+
For any other issues and feedback about this plugin, please submit it to this repository.
|
43
|
+
|
44
|
+
## Troubleshooting
|
45
|
+
|
46
|
+
If you have trouble using plugins, check out the [Plugins Troubleshooting](https://docs.fastlane.tools/plugins/plugins-troubleshooting/) guide.
|
47
|
+
|
48
|
+
## Using _fastlane_ Plugins
|
49
|
+
|
50
|
+
For more information about how the `fastlane` plugin system works, check out the [Plugins documentation](https://docs.fastlane.tools/plugins/create-plugin/).
|
51
|
+
|
52
|
+
## About _fastlane_
|
53
|
+
|
54
|
+
_fastlane_ is the easiest way to automate beta deployments and releases for your iOS and Android apps. To learn more, check out [fastlane.tools](https://fastlane.tools).
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'fastlane/plugin/xamarin/version'
|
2
|
+
|
3
|
+
module Fastlane
|
4
|
+
module Xamarin
|
5
|
+
# Return all .rb files inside the "actions" and "helper" directory
|
6
|
+
def self.all_classes
|
7
|
+
Dir[File.expand_path('**/{actions,helper}/*.rb', File.dirname(__FILE__))]
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
# By default we want to import all available actions and helpers
|
13
|
+
# A plugin can contain any number of actions and plugins
|
14
|
+
Fastlane::Xamarin.all_classes.each do |current|
|
15
|
+
require current
|
16
|
+
end
|
@@ -0,0 +1,94 @@
|
|
1
|
+
module Fastlane
|
2
|
+
module Actions
|
3
|
+
|
4
|
+
|
5
|
+
class NugetAction < Action
|
6
|
+
def self.run(params)
|
7
|
+
|
8
|
+
nuget = params[:nuget] || FastlaneCore::CommandExecutor.which('nuget')
|
9
|
+
mono = FastlaneCore::CommandExecutor.which('mono')
|
10
|
+
|
11
|
+
if nuget.nil?
|
12
|
+
UI.error("Could not find nuget")
|
13
|
+
return
|
14
|
+
end
|
15
|
+
|
16
|
+
if FastlaneCore::Globals.verbose?
|
17
|
+
FastlaneCore::PrintTable.print_values(
|
18
|
+
config: params,
|
19
|
+
title: "Summary of parameters passed"
|
20
|
+
)
|
21
|
+
end
|
22
|
+
command = Array.new
|
23
|
+
|
24
|
+
command.push(mono)
|
25
|
+
command.push(nuget)
|
26
|
+
command.push(params[:cmd])
|
27
|
+
command.push(params[:project_path])
|
28
|
+
|
29
|
+
exit_status = 0
|
30
|
+
result = FastlaneCore::CommandExecutor.execute(command: command,
|
31
|
+
print_command: true,
|
32
|
+
print_all: FastlaneCore::Globals.verbose?,
|
33
|
+
error: proc do |error_output|
|
34
|
+
exit_status = $?.exitstatus
|
35
|
+
end)
|
36
|
+
|
37
|
+
if exit_status == 0
|
38
|
+
UI.success("Successfully executed nuget")
|
39
|
+
else
|
40
|
+
UI.error("Uhh ohh - failed executing nuget")
|
41
|
+
end
|
42
|
+
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
def self.description
|
47
|
+
"Nuget"
|
48
|
+
end
|
49
|
+
|
50
|
+
def self.authors
|
51
|
+
["Thomas Charriere"]
|
52
|
+
end
|
53
|
+
|
54
|
+
def self.return_value
|
55
|
+
# If your method provides a return value, you can describe here what it does
|
56
|
+
end
|
57
|
+
|
58
|
+
def self.details
|
59
|
+
# Optional:
|
60
|
+
"Nuget"
|
61
|
+
end
|
62
|
+
|
63
|
+
|
64
|
+
def self.available_options
|
65
|
+
[
|
66
|
+
FastlaneCore::ConfigItem.new(key: :project_path,
|
67
|
+
env_name: "NUGET_SOLUTION",
|
68
|
+
description: "The location of a solution or a packages.config",
|
69
|
+
optional: false,
|
70
|
+
type: String),
|
71
|
+
|
72
|
+
FastlaneCore::ConfigItem.new(key: :cmd,
|
73
|
+
env_name: "NUGET_COMMAND",
|
74
|
+
description: "",
|
75
|
+
default_value: 'restore',
|
76
|
+
optional: true,
|
77
|
+
type: String),
|
78
|
+
|
79
|
+
FastlaneCore::ConfigItem.new(key: :nuget,
|
80
|
+
env_name: "NUGET_PATH",
|
81
|
+
description: "",
|
82
|
+
default_value: "Path to `nuget`. Default value is found by using `which nuget`",
|
83
|
+
optional: true,
|
84
|
+
type: String)
|
85
|
+
]
|
86
|
+
|
87
|
+
end
|
88
|
+
|
89
|
+
def self.is_supported?(platform)
|
90
|
+
[:android, :ios].include?(platform)
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
@@ -0,0 +1,216 @@
|
|
1
|
+
module Fastlane
|
2
|
+
module Actions
|
3
|
+
module SharedValues
|
4
|
+
XAMARIN_ANDROID_APK = :XAMARIN_ANDROID_APK
|
5
|
+
XAMARIN_ANDROID_APK_SIGNED = :XAMARIN_ANDROID_APK_SIGNED
|
6
|
+
end
|
7
|
+
|
8
|
+
class XamarinAndroidAction < Action
|
9
|
+
def self.run(params)
|
10
|
+
|
11
|
+
msbuild = params[:msbuild] || FastlaneCore::CommandExecutor.which('msbuild')
|
12
|
+
|
13
|
+
if msbuild.nil?
|
14
|
+
UI.error("Could not find msbuild")
|
15
|
+
return
|
16
|
+
end
|
17
|
+
|
18
|
+
if FastlaneCore::Globals.verbose?
|
19
|
+
FastlaneCore::PrintTable.print_values(
|
20
|
+
config: params,
|
21
|
+
title: "Summary of parameters passed"
|
22
|
+
)
|
23
|
+
end
|
24
|
+
command = Array.new
|
25
|
+
|
26
|
+
command.push(msbuild)
|
27
|
+
command.push(params[:project])
|
28
|
+
command.push("/t:#{params[:target]}")
|
29
|
+
command.push("/p:Configuration=#{params[:configuration]}") unless params[:configuration].nil?
|
30
|
+
command.push("/p:DefineConstants=#{params[:define_constants]}") unless params[:define_constants].nil?
|
31
|
+
command.push("/p:DebugSymbols=#{params[:debug_symbols]}") unless params[:debug_symbols].nil?
|
32
|
+
command.push("/p:DebugType=#{params[:debug_type]}") unless params[:debug_type].nil?
|
33
|
+
command.push("/p:AndroidSupportedAbis=#{params[:android_supported_abis]}") unless params[:android_supported_abis].nil?
|
34
|
+
command.push("/p:AndroidUseSharedRuntime=#{params[:android_use_sharedruntime]}") unless params[:android_use_sharedruntime].nil?
|
35
|
+
command.push("/p:AotAssemblies=#{params[:android_aot_assemblies]}") unless params[:android_aot_assemblies].nil?
|
36
|
+
command.push("/p:EnableLLVM=#{params[:android_enable_llvm]}") unless params[:android_enable_llvm].nil?
|
37
|
+
command.push("/p:EnableProguard=#{params[:android_enable_proguard]}") unless params[:android_enable_proguard].nil?
|
38
|
+
command.push("/p:AndroidKeyStore=#{params[:android_keystore]}") unless params[:android_keystore].nil?
|
39
|
+
command.push("/p:AndroidSigningKeyAlias=#{params[:android_signing_keystore]}") unless params[:android_signing_keystore].nil?
|
40
|
+
command.push("/p:AndroidSigningKeyPass=#{params[:android_signing_storepass]}") unless params[:android_signing_storepass].nil?
|
41
|
+
command.push("/p:AndroidSigningKeyStore=#{params[:android_signing_keyalias]}") unless params[:android_signing_keyalias].nil?
|
42
|
+
command.push("/p:AndroidSigningStorePass=#{params[:android_signing_keypass]}") unless params[:android_signing_keypass].nil?
|
43
|
+
|
44
|
+
exit_status = 0
|
45
|
+
result = FastlaneCore::CommandExecutor.execute(command: command,
|
46
|
+
print_command: true,
|
47
|
+
print_all: FastlaneCore::Globals.verbose?,
|
48
|
+
error: proc do |error_output|
|
49
|
+
exit_status = $?.exitstatus
|
50
|
+
UI.error("Wups, invalid")
|
51
|
+
end)
|
52
|
+
|
53
|
+
if exit_status == 0
|
54
|
+
UI.success("Successfully executed msbuild")
|
55
|
+
|
56
|
+
Dir.glob(File.join(File.dirname(params[:project]), "/**/bin/#{params[:configuration]}/*.apk")) {|file|
|
57
|
+
|
58
|
+
if file.include? "Signed"
|
59
|
+
Actions.lane_context[SharedValues::XAMARIN_ANDROID_APK_SIGNED] = file
|
60
|
+
else
|
61
|
+
Actions.lane_context[SharedValues::XAMARIN_ANDROID_APK] = file
|
62
|
+
end
|
63
|
+
|
64
|
+
}
|
65
|
+
|
66
|
+
FastlaneCore::PrintTable.print_values(
|
67
|
+
config: Actions.lane_context,
|
68
|
+
title: "Summary of Xamarin Build"
|
69
|
+
)
|
70
|
+
|
71
|
+
else
|
72
|
+
UI.error("Unable to build - see log for more info")
|
73
|
+
end
|
74
|
+
|
75
|
+
|
76
|
+
end
|
77
|
+
|
78
|
+
def self.description
|
79
|
+
"Build Xamarin Android + iOS projects"
|
80
|
+
end
|
81
|
+
|
82
|
+
def self.authors
|
83
|
+
["Thomas Charriere"]
|
84
|
+
end
|
85
|
+
|
86
|
+
def self.return_value
|
87
|
+
# If your method provides a return value, you can describe here what it does
|
88
|
+
end
|
89
|
+
|
90
|
+
def self.details
|
91
|
+
# Optional:
|
92
|
+
"Build Xamarin Android + iOS projects"
|
93
|
+
end
|
94
|
+
|
95
|
+
def self.output
|
96
|
+
[
|
97
|
+
['XAMARIN_ANDROID_APK', 'Path to the apk'],
|
98
|
+
['XAMARIN_ANDROID_APK_SIGNED', 'Path to the signed apk']
|
99
|
+
]
|
100
|
+
end
|
101
|
+
|
102
|
+
def self.available_options
|
103
|
+
[
|
104
|
+
FastlaneCore::ConfigItem.new(key: :project,
|
105
|
+
env_name: "XAMARIN_PROJECT",
|
106
|
+
description: "Path to Android Project (.csproj) to compile",
|
107
|
+
optional: false,
|
108
|
+
type: String),
|
109
|
+
|
110
|
+
FastlaneCore::ConfigItem.new(key: :target,
|
111
|
+
env_name: "XAMARIN_TARGET",
|
112
|
+
description: "Specifies the Build Targets: Build, SignAndroidPackage",
|
113
|
+
default_value: 'SignAndroidPackage',
|
114
|
+
optional: true,
|
115
|
+
type: String),
|
116
|
+
|
117
|
+
FastlaneCore::ConfigItem.new(key: :configuration,
|
118
|
+
env_name: "XAMARIN_CONFIGURATION",
|
119
|
+
description: "Specifies the build configuration to use, such as 'Debug' or 'Release'. The Configuration property is used to determine default values for other properties which determine target behavior. Additional configurations may be created within your IDE",
|
120
|
+
default_value: 'Release',
|
121
|
+
optional: true,
|
122
|
+
type: String),
|
123
|
+
|
124
|
+
FastlaneCore::ConfigItem.new(key: :msbuild,
|
125
|
+
env_name: "XAMARIN_MSBUILD",
|
126
|
+
description: "Path to `msbuild`. Default value is found by using `which msbuild`",
|
127
|
+
optional: true,
|
128
|
+
type: String),
|
129
|
+
|
130
|
+
FastlaneCore::ConfigItem.new(key: :debug_symbols,
|
131
|
+
env_name: "XAMARIN_DEBUGSYMBOLS",
|
132
|
+
description: "A boolean value which determines whether the Android package is debuggable, in combination with the `debug_type` option. A debuggable package contains debug symbols, sets the `//application/@android:debuggable` attribute to true, and automatically adds the INTERNET permission so that a debugger can attach to the process. An application is debuggable if `debug_symbols` is True and `debug_type` is either the empty string or Full",
|
133
|
+
optional: true,
|
134
|
+
type: Fastlane::Boolean),
|
135
|
+
|
136
|
+
FastlaneCore::ConfigItem.new(key: :debug_type,
|
137
|
+
env_name: "XAMARIN_DEBUGTYPE",
|
138
|
+
description: "Specifies the type of debug symbols to generate as part of the build, which also impacts whether the Application is debuggable. Possible values include: Full, PdbOnly",
|
139
|
+
optional: true,
|
140
|
+
type: String),
|
141
|
+
|
142
|
+
FastlaneCore::ConfigItem.new(key: :define_constants,
|
143
|
+
env_name: "XAMARIN_DEFINECONSTANTS",
|
144
|
+
description: "Defines conditional compiler constants",
|
145
|
+
optional: true,
|
146
|
+
type: String),
|
147
|
+
|
148
|
+
FastlaneCore::ConfigItem.new(key: :android_supported_abis,
|
149
|
+
env_name: "XAMARIN_ANDROIDSUPPORTEDABIS",
|
150
|
+
description: "A string property that contains a semicolon (;)-delimited list of ABIs which should be included into the .apk: armeabi, armeabi-v7a, x86, arm64-v8a, x86_64",
|
151
|
+
optional: true,
|
152
|
+
type: String),
|
153
|
+
|
154
|
+
FastlaneCore::ConfigItem.new(key: :android_use_sharedruntime,
|
155
|
+
env_name: "XAMARIN_ANDROIDUSESHAREDRUNTIME",
|
156
|
+
description: "A boolean property that is determines whether the shared runtime packages are required in order to run the Application on the target device. Relying on the shared runtime packages allows the Application package to be smaller, speeding up the package creation and deployment process, resulting in a faster build/deploy/debug turnaround cycle. This property should be True for Debug builds, and False for Release projects",
|
157
|
+
optional: true,
|
158
|
+
type: Fastlane::Boolean),
|
159
|
+
|
160
|
+
FastlaneCore::ConfigItem.new(key: :android_aot_assemblies,
|
161
|
+
env_name: "XAMARIN_ANDROIDAOTASSEMBLIES",
|
162
|
+
description: "A boolean property that determines whether or not assemblies will be Ahead-of-Time compiled into native code and included in the .apk",
|
163
|
+
optional: true,
|
164
|
+
type: Fastlane::Boolean),
|
165
|
+
|
166
|
+
FastlaneCore::ConfigItem.new(key: :android_enable_llvm,
|
167
|
+
env_name: "XAMARIN_ANDROIDENABLELLVM",
|
168
|
+
description: "A boolean property that determines whether or not LLVM will be used when Ahead-of-Time compiling assemblies into native code",
|
169
|
+
optional: true,
|
170
|
+
type: Fastlane::Boolean),
|
171
|
+
|
172
|
+
FastlaneCore::ConfigItem.new(key: :android_enable_proguard,
|
173
|
+
env_name: "XAMARIN_ANDROIDENABLEPROGUARD",
|
174
|
+
description: "A boolean property that determines whether or not proguard is run as part of the packaging process to link Java code",
|
175
|
+
optional: true,
|
176
|
+
type: Fastlane::Boolean),
|
177
|
+
|
178
|
+
FastlaneCore::ConfigItem.new(key: :android_keystore,
|
179
|
+
env_name: "XAMARIN_ANDROIDKEYSTORE",
|
180
|
+
description: "A boolean value which indicates whether custom signing information should be used. The default value is False, meaning that the default debug-signing key will be used to sign packages",
|
181
|
+
optional: true,
|
182
|
+
type: Fastlane::Boolean),
|
183
|
+
|
184
|
+
FastlaneCore::ConfigItem.new(key: :android_signing_keystore,
|
185
|
+
env_name: "XAMARIN_ANDROIDSIGNINGKEYSTORE",
|
186
|
+
description: "Specifies the alias for the key in the keystore. This is the keytool -alias value used when creating the keystore",
|
187
|
+
optional: true,
|
188
|
+
type: String),
|
189
|
+
|
190
|
+
FastlaneCore::ConfigItem.new(key: :android_signing_storepass,
|
191
|
+
env_name: "XAMARIN_ANDROIDSIGNINGSTOREPASS",
|
192
|
+
description: "Specifies the password of the keystore file",
|
193
|
+
optional: true,
|
194
|
+
type: String),
|
195
|
+
|
196
|
+
FastlaneCore::ConfigItem.new(key: :android_signing_keyalias,
|
197
|
+
env_name: "XAMARIN_ANDROIDSINGINGKEYALIAS",
|
198
|
+
description: "Specifies the filename of the keystore file created by keytool",
|
199
|
+
optional: true,
|
200
|
+
type: String),
|
201
|
+
|
202
|
+
FastlaneCore::ConfigItem.new(key: :android_signing_keypass,
|
203
|
+
env_name: "XAMARIN_ANDROIDSIGNINGKEYPASS",
|
204
|
+
description: "Specifies the password of the key within the keystore file",
|
205
|
+
optional: true,
|
206
|
+
type: String)
|
207
|
+
]
|
208
|
+
|
209
|
+
end
|
210
|
+
|
211
|
+
def self.is_supported?(platform)
|
212
|
+
[:android].include?(platform)
|
213
|
+
end
|
214
|
+
end
|
215
|
+
end
|
216
|
+
end
|
@@ -0,0 +1,195 @@
|
|
1
|
+
module Fastlane
|
2
|
+
module Actions
|
3
|
+
module SharedValues
|
4
|
+
XAMARIN_IOS_IPA = :XAMARIN_IOS_IPA
|
5
|
+
XAMARIN_IOS_SYM = :XAMARIN_IOS_SYM
|
6
|
+
end
|
7
|
+
|
8
|
+
class XamarinIosAction < Action
|
9
|
+
def self.run(params)
|
10
|
+
|
11
|
+
msbuild = params[:msbuild] || FastlaneCore::CommandExecutor.which('msbuild')
|
12
|
+
|
13
|
+
if msbuild.nil?
|
14
|
+
UI.error("Could not find msbuild")
|
15
|
+
return
|
16
|
+
end
|
17
|
+
|
18
|
+
if FastlaneCore::Globals.verbose?
|
19
|
+
FastlaneCore::PrintTable.print_values(
|
20
|
+
config: params,
|
21
|
+
title: "Summary of parameters passed"
|
22
|
+
)
|
23
|
+
end
|
24
|
+
command = Array.new
|
25
|
+
|
26
|
+
command.push(msbuild)
|
27
|
+
command.push(params[:solution])
|
28
|
+
command.push("/t:#{params[:target]}")
|
29
|
+
command.push("/p:Configuration=#{params[:configuration]}") unless params[:configuration].nil?
|
30
|
+
command.push("/p:Platform=#{params[:platform]}") unless params[:platform].nil?
|
31
|
+
command.push("/p:DefineConstants=#{params[:define_constants]}") unless params[:define_constants].nil?
|
32
|
+
command.push("/p:BuildIpa=#{params[:build_ipa]}") unless params[:build_ipa].nil?
|
33
|
+
command.push("/p:IpaPackageDir=#{params[:ipa_package_dir]}") unless params[:ipa_package_dir].nil?
|
34
|
+
command.push("/p:CodesignEntitlements=#{params[:codesign_entitlements]}") unless params[:codesign_entitlements].nil?
|
35
|
+
command.push("/p:IpaIncludeArtwork=#{params[:include_itunes_artwork]}") unless params[:include_itunes_artwork].nil?
|
36
|
+
command.push("/p:CodesignKey=#{params[:codesign_key]}") unless params[:codesign_key].nil?
|
37
|
+
command.push("/p:CodesignProvision=#{params[:codesign_provision]}") unless params[:codesign_provision].nil?
|
38
|
+
|
39
|
+
exit_status = 0
|
40
|
+
result = FastlaneCore::CommandExecutor.execute(command: command,
|
41
|
+
print_command: true,
|
42
|
+
print_all: FastlaneCore::Globals.verbose?,
|
43
|
+
error: proc do |error_output|
|
44
|
+
exit_status = $?.exitstatus
|
45
|
+
UI.error("Wups, invalid")
|
46
|
+
end)
|
47
|
+
|
48
|
+
if exit_status == 0
|
49
|
+
UI.success("Successfully executed msbuild")
|
50
|
+
|
51
|
+
if params[:ipa_package_dir].nil?
|
52
|
+
|
53
|
+
end
|
54
|
+
|
55
|
+
Dir.glob(File.join(File.dirname(params[:solution]), "/**/bin/#{params[:platform]}/#{params[:configuration]}/*.ipa")) {|file|
|
56
|
+
|
57
|
+
Actions.lane_context[SharedValues::XAMARIN_IOS_IPA] = file
|
58
|
+
Actions.lane_context[SharedValues::IPA_OUTPUT_PATH] = file
|
59
|
+
}
|
60
|
+
|
61
|
+
Dir.glob(File.join(File.dirname(params[:solution]), "/**/bin/#{params[:platform]}/#{params[:configuration]}/*.dSYM")) {|file|
|
62
|
+
|
63
|
+
zipfile = file + ".zip"
|
64
|
+
|
65
|
+
File.delete(zipfile) if File.exist?(zipfile)
|
66
|
+
|
67
|
+
Actions::ZipAction.run(path: file, output_path: zipfile)
|
68
|
+
Actions.lane_context[SharedValues::XAMARIN_IOS_SYM] = zipfile
|
69
|
+
Actions.lane_context[SharedValues::DSYM_OUTPUT_PATH] = zipfile
|
70
|
+
|
71
|
+
}
|
72
|
+
|
73
|
+
FastlaneCore::PrintTable.print_values(
|
74
|
+
config: Actions.lane_context,
|
75
|
+
title: "Summary of Xamarin Build"
|
76
|
+
)
|
77
|
+
|
78
|
+
else
|
79
|
+
UI.error("Unable to build - see log for more info")
|
80
|
+
end
|
81
|
+
|
82
|
+
|
83
|
+
end
|
84
|
+
|
85
|
+
def self.description
|
86
|
+
"Build Xamarin Android + iOS projects"
|
87
|
+
end
|
88
|
+
|
89
|
+
def self.authors
|
90
|
+
["Thomas Charriere"]
|
91
|
+
end
|
92
|
+
|
93
|
+
def self.return_value
|
94
|
+
# If your method provides a return value, you can describe here what it does
|
95
|
+
end
|
96
|
+
|
97
|
+
def self.details
|
98
|
+
# Optional:
|
99
|
+
"Build Xamarin Android + iOS projects"
|
100
|
+
end
|
101
|
+
|
102
|
+
def self.output
|
103
|
+
[
|
104
|
+
['XAMARIN_IOS_IPA', 'Path to the ipa'],
|
105
|
+
['XAMARIN_IOS_SYM', 'Path to the dysm of the ipa']
|
106
|
+
]
|
107
|
+
end
|
108
|
+
|
109
|
+
def self.available_options
|
110
|
+
[
|
111
|
+
FastlaneCore::ConfigItem.new(key: :solution,
|
112
|
+
env_name: "XAMARIN_SOLUTION",
|
113
|
+
description: "Path to Solution to compile",
|
114
|
+
optional: false,
|
115
|
+
type: String),
|
116
|
+
|
117
|
+
FastlaneCore::ConfigItem.new(key: :target,
|
118
|
+
env_name: "XAMARIN_TARGET",
|
119
|
+
description: "Specifies the Build Targets: Build",
|
120
|
+
default_value: 'Build',
|
121
|
+
optional: true,
|
122
|
+
type: String),
|
123
|
+
|
124
|
+
FastlaneCore::ConfigItem.new(key: :configuration,
|
125
|
+
env_name: "XAMARIN_CONFIGURATION",
|
126
|
+
description: "Specifies the build configuration to use, such as 'Debug' or 'Release'. The Configuration property is used to determine default values for other properties which determine target behavior. Additional configurations may be created within your IDE",
|
127
|
+
default_value: 'Release',
|
128
|
+
optional: true,
|
129
|
+
type: String),
|
130
|
+
|
131
|
+
FastlaneCore::ConfigItem.new(key: :platform,
|
132
|
+
env_name: "XAMARIN_PLATFORM",
|
133
|
+
description: "Specifies the platform configuration to use, such as 'iPhone' or 'iPhoneSimulator'. The Platform property is used to determine default values for other properties which determine target behavior. Additional configurations may be created within your IDE",
|
134
|
+
default_value: 'iPhone',
|
135
|
+
optional: true,
|
136
|
+
type: String),
|
137
|
+
|
138
|
+
FastlaneCore::ConfigItem.new(key: :define_constants,
|
139
|
+
env_name: "XAMARIN_DEFINECONSTANTS",
|
140
|
+
description: "Defines conditional compiler constants",
|
141
|
+
optional: true,
|
142
|
+
type: String),
|
143
|
+
|
144
|
+
FastlaneCore::ConfigItem.new(key: :msbuild,
|
145
|
+
env_name: "XAMARIN_MSBUILD",
|
146
|
+
description: "Path to `msbuild`. Default value is found by using `which msbuild`",
|
147
|
+
optional: true,
|
148
|
+
type: String),
|
149
|
+
|
150
|
+
FastlaneCore::ConfigItem.new(key: :build_ipa,
|
151
|
+
env_name: "XAMARIN_BUILDIPA",
|
152
|
+
description: "A boolean value which determines whether the ipa should be built",
|
153
|
+
default_value: true,
|
154
|
+
optional: true,
|
155
|
+
type: Fastlane::Boolean),
|
156
|
+
|
157
|
+
FastlaneCore::ConfigItem.new(key: :ipa_package_dir,
|
158
|
+
env_name: "XAMARIN_IPAPACKAGEDIR",
|
159
|
+
description: "Set custom IPA directory",
|
160
|
+
optional: true,
|
161
|
+
type: String),
|
162
|
+
|
163
|
+
FastlaneCore::ConfigItem.new(key: :codesign_entitlements,
|
164
|
+
env_name: "XAMARIN_CODESIGNENTITLEMENTS",
|
165
|
+
description: "",
|
166
|
+
optional: true,
|
167
|
+
type: Fastlane::Boolean),
|
168
|
+
|
169
|
+
FastlaneCore::ConfigItem.new(key: :include_itunes_artwork,
|
170
|
+
env_name: "XAMARIN_INCLUDEITUNESARTWORK",
|
171
|
+
description: "Includes ITunesArtwork images",
|
172
|
+
optional: true,
|
173
|
+
type: Fastlane::Boolean),
|
174
|
+
|
175
|
+
FastlaneCore::ConfigItem.new(key: :codesign_key,
|
176
|
+
env_name: "XAMARIN_CODESIGNKEY",
|
177
|
+
description: "A signing identity",
|
178
|
+
optional: true,
|
179
|
+
type: String),
|
180
|
+
|
181
|
+
FastlaneCore::ConfigItem.new(key: :codesign_provision,
|
182
|
+
env_name: "XAMARIN_CODESIGNPROVISION",
|
183
|
+
description: "Id/Name of the provisioning profile",
|
184
|
+
optional: true,
|
185
|
+
type: String)
|
186
|
+
]
|
187
|
+
|
188
|
+
end
|
189
|
+
|
190
|
+
def self.is_supported?(platform)
|
191
|
+
[:ios].include?(platform)
|
192
|
+
end
|
193
|
+
end
|
194
|
+
end
|
195
|
+
end
|
metadata
ADDED
@@ -0,0 +1,135 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: fastlane-plugin-xamarin
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Thomas Charriere
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-10-15 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: pry
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rake
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rubocop
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: fastlane
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 2.28.3
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 2.28.3
|
97
|
+
description:
|
98
|
+
email: git@a.charri.ch
|
99
|
+
executables: []
|
100
|
+
extensions: []
|
101
|
+
extra_rdoc_files: []
|
102
|
+
files:
|
103
|
+
- LICENSE
|
104
|
+
- README.md
|
105
|
+
- lib/fastlane/plugin/xamarin.rb
|
106
|
+
- lib/fastlane/plugin/xamarin/actions/nuget_action.rb
|
107
|
+
- lib/fastlane/plugin/xamarin/actions/xamarin_android_action.rb
|
108
|
+
- lib/fastlane/plugin/xamarin/actions/xamarin_ios_action.rb
|
109
|
+
- lib/fastlane/plugin/xamarin/helper/xamarin_helper.rb
|
110
|
+
- lib/fastlane/plugin/xamarin/version.rb
|
111
|
+
homepage: https://github.com/charri/fastlane-plugin-xamarin
|
112
|
+
licenses:
|
113
|
+
- MIT
|
114
|
+
metadata: {}
|
115
|
+
post_install_message:
|
116
|
+
rdoc_options: []
|
117
|
+
require_paths:
|
118
|
+
- lib
|
119
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
120
|
+
requirements:
|
121
|
+
- - ">="
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: '0'
|
124
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
125
|
+
requirements:
|
126
|
+
- - ">="
|
127
|
+
- !ruby/object:Gem::Version
|
128
|
+
version: '0'
|
129
|
+
requirements: []
|
130
|
+
rubyforge_project:
|
131
|
+
rubygems_version: 2.7.7
|
132
|
+
signing_key:
|
133
|
+
specification_version: 4
|
134
|
+
summary: Build Xamarin Android + iOS projects
|
135
|
+
test_files: []
|