fastlane-plugin-match_keystore 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: dc39c27ae6c902a6fcd405d5eef892687e663bb85cccb0fbbeb10dfb69b00751
4
- data.tar.gz: b6aebe60f441bfc603aac48563763fc18ec57f8079276780ae871795d833a67f
3
+ metadata.gz: 0af6b5ad125ace188811247b482ba84e38bd73cad908e32cb2ddd2193059fd9b
4
+ data.tar.gz: 01dc72217dd581f967e5c9639459af9557fea5921c9dd6fce4580c75b41ada2c
5
5
  SHA512:
6
- metadata.gz: 7582d8c4cc25d65d84b9b77db1bd18eacb4e434733456e1307f9cff59bb55cea15112045f8d6664968a2ec704da32c1c132c563713baf06946b45f07dd7a33a9
7
- data.tar.gz: 6f978721abbfb8110c1ed311dcd366602baba4fac92ada9d1406682201d99a40909cd4400b48c621e32f680b43be73a02f42b0c5770432d522f6019e01558585
6
+ metadata.gz: 61861369ca1cddf195c96ee6402802b01b686a9864974e68563daef6bb0cd79329289a989b16a22e2dacee7348987e1ebaf0e11610625f634e8d7c17aba055d7
7
+ data.tar.gz: 1842d84d9bee7a59192a17c3105d1e202d3addcc86f2ea29a582a64847d862d43bee7326fc51c7705de063a1c6ec4483a857d27101919fdd824fb204cefc3879
data/README.md CHANGED
@@ -12,9 +12,13 @@ fastlane add_plugin match_keystore
12
12
 
13
13
  ## About match_keystore
14
14
 
15
- Easily sync your Android keystores across your team
15
+ Easily sync your Android keystores across your team.
16
16
 
17
- **Note to author:** Add a more detailed description about this plugin here. If your plugin contains multiple actions, make sure to mention them here.
17
+ This plugin was design based on the 'match' plugin and code signing concept: https://codesigning.guide/
18
+
19
+ With **match_keystore** you can store all your Android Keystores in secured private repository and share it to your team and your CI system.
20
+
21
+ The keystore properties are encrypted with AES in order to secure sensitive data in the Git repository itself.
18
22
 
19
23
  ## How to use
20
24
 
@@ -24,11 +28,14 @@ Easily sync your Android keystores across your team
24
28
  gradle(task: "clean")
25
29
  gradle(task: 'assemble', build_type: 'Release')
26
30
 
27
- match_keystore(
28
- git_url: "https://github.com/<GITHUB_USERNAME>/keystores.git",
31
+ signed_apk_path = match_keystore(
32
+ git_url: "https://github.com/<GITHUB_USERNAME>/keystores.git", # Please use a private Git repository !
29
33
  package_name: "com.your.package.name",
30
- apk_path: "/app/build/outputs/apk/app-release.apk"
34
+ apk_path: "/app/build/outputs/apk/app-release.apk" # Or path without APK: /app/build/outputs/apk/
31
35
  )
36
+
37
+ # Return the path of signed APK (useful for other lanes such as `publish_to_firebase`, `upload_to_play_store`)
38
+ puts signed_apk_path
32
39
  end
33
40
  ```
34
41
 
@@ -84,7 +84,7 @@ module Fastlane
84
84
  # https://developer.android.com/studio/command-line/apksigner
85
85
  apk_path_signed = apk_path.gsub(".apk", "-signed.apk")
86
86
  puts `rm -f #{apk_path_signed}`
87
- puts `#{build_tools_path}apksigner sign --ks #{keystore_path} --ks-key-alias #{alias_name} --ks-pass pass:#{alias_password} --key-pass pass:#{key_password} --v1-signing-enabled true --v2-signing-enabled true --out #{apk_path_signed} #{apk_path_aligned}`
87
+ puts `#{build_tools_path}apksigner sign --ks #{keystore_path} --ks-key-alias '#{alias_name}' --ks-pass pass:'#{alias_password}' --key-pass pass:'#{key_password}' --v1-signing-enabled true --v2-signing-enabled true --out #{apk_path_signed} #{apk_path_aligned}`
88
88
 
89
89
  puts `#{build_tools_path}apksigner verify #{apk_path_signed}`
90
90
  puts `rm -f #{apk_path_aligned}`
@@ -93,7 +93,7 @@ module Fastlane
93
93
  end
94
94
 
95
95
  def self.resolve_apk_path(apk_path)
96
-
96
+
97
97
  if !apk_path.to_s.end_with?(".apk")
98
98
 
99
99
  if !File.directory?(apk_path)
@@ -126,6 +126,7 @@ module Fastlane
126
126
  git_url = params[:git_url]
127
127
  package_name = params[:package_name]
128
128
  apk_path = params[:apk_path]
129
+ existing_keystore = params[:existing_keystore]
129
130
  override_keystore = params[:override_keystore]
130
131
 
131
132
  keystore_name = 'keystore.jks'
@@ -173,8 +174,9 @@ module Fastlane
173
174
  properties_path = keystoreAppDir + '/' + properties_name
174
175
  properties_encrypt_path = keystoreAppDir + '/' + properties_encrypt_name
175
176
 
176
- # Create keystore with command
177
- if !File.file?(keystore_path) || override_keystore
177
+ # Create keystore with command
178
+ override_keystore = File.file?(existing_keystore)
179
+ if !File.file?(keystore_path) || override_keystore
178
180
 
179
181
  if File.file?(keystore_path)
180
182
  FileUtils.remove_dir(keystore_path)
@@ -184,25 +186,31 @@ module Fastlane
184
186
  alias_name = other_action.prompt(text: "Keystore Alias name: ")
185
187
  alias_password = other_action.prompt(text: "Keystore Alias password: ")
186
188
 
187
- full_name = other_action.prompt(text: "Certificate First and Last Name: ")
188
- org_unit = other_action.prompt(text: "Certificate Organisation Unit: ")
189
- org = other_action.prompt(text: "Certificate Organisation: ")
190
- city_locality = other_action.prompt(text: "Certificate City or Locality: ")
191
- state_province = other_action.prompt(text: "Certificate State or Province: ")
192
- country = other_action.prompt(text: "Certificate Country Code (XX): ")
193
-
194
189
  # https://developer.android.com/studio/publish/app-signing
195
- UI.message("Generating Android Keystore...")
196
- keytool_parts = [
197
- "keytool -genkey -v",
198
- "-keystore #{keystore_path}",
199
- "-alias #{alias_name}",
200
- "-keyalg RSA -keysize 2048 -validity 10000",
201
- "-storepass #{alias_password} ",
202
- "-keypass #{key_password}",
203
- "-dname \"CN=#{full_name}, OU=#{org_unit}, O=#{org}, L=#{city_locality}, S=#{state_province}, C=#{country}\"",
204
- ]
205
- sh keytool_parts.join(" ")
190
+ if !File.file?(existing_keystore)
191
+ UI.message("Generating Android Keystore...")
192
+
193
+ full_name = other_action.prompt(text: "Certificate First and Last Name: ")
194
+ org_unit = other_action.prompt(text: "Certificate Organisation Unit: ")
195
+ org = other_action.prompt(text: "Certificate Organisation: ")
196
+ city_locality = other_action.prompt(text: "Certificate City or Locality: ")
197
+ state_province = other_action.prompt(text: "Certificate State or Province: ")
198
+ country = other_action.prompt(text: "Certificate Country Code (XX): ")
199
+
200
+ keytool_parts = [
201
+ "keytool -genkey -v",
202
+ "-keystore #{keystore_path}",
203
+ "-alias #{alias_name}",
204
+ "-keyalg RSA -keysize 2048 -validity 10000",
205
+ "-storepass #{alias_password} ",
206
+ "-keypass #{key_password}",
207
+ "-dname \"CN=#{full_name}, OU=#{org_unit}, O=#{org}, L=#{city_locality}, S=#{state_province}, C=#{country}\"",
208
+ ]
209
+ sh keytool_parts.join(" ")
210
+ else
211
+ UI.message("Copy existing keystore to match_keystore repository...")
212
+ puts `cp #{existing_keystore} #{keystore_path}`
213
+ end
206
214
 
207
215
  UI.message("Generating Keystore properties...")
208
216
 
@@ -249,19 +257,25 @@ module Fastlane
249
257
 
250
258
  output_signed_apk = ''
251
259
  apk_path = self.resolve_apk_path(apk_path)
252
- UI.message("APK to sign: " + apk_path)
253
-
254
- if File.file?(keystore_path)
255
- UI.message("Signing the APK...")
256
- output_signed_apk = self.sign_apk(
257
- apk_path,
258
- keystore_path,
259
- key_password,
260
- alias_name,
261
- alias_password,
262
- true
263
- )
264
- end
260
+
261
+ if File.file?(apk_path)
262
+ UI.message("APK to sign: " + apk_path)
263
+
264
+ if File.file?(keystore_path)
265
+
266
+ UI.message("Signing the APK...")
267
+ output_signed_apk = self.sign_apk(
268
+ apk_path,
269
+ keystore_path,
270
+ key_password,
271
+ alias_name,
272
+ alias_password,
273
+ true
274
+ )
275
+ end
276
+ else
277
+ UI.message("No APK file found to sign!")
278
+ end
265
279
 
266
280
  output_signed_apk
267
281
 
@@ -295,12 +309,12 @@ module Fastlane
295
309
 
296
310
  def self.available_options
297
311
  [
298
- FastlaneCore::ConfigItem.new(key: :git_url,
312
+ FastlaneCore::ConfigItem.new(key: :git_url,
299
313
  env_name: "MATCH_KEYSTORE_GIT_URL",
300
314
  description: "The URL of the Git repository (Github, BitBucket...)",
301
315
  optional: false,
302
316
  type: String),
303
- FastlaneCore::ConfigItem.new(key: :package_name,
317
+ FastlaneCore::ConfigItem.new(key: :package_name,
304
318
  env_name: "MATCH_KEYSTORE_PACKAGE_NAME",
305
319
  description: "The package name of the App",
306
320
  optional: false,
@@ -310,7 +324,12 @@ module Fastlane
310
324
  description: "Path of the APK file to sign",
311
325
  optional: false,
312
326
  type: String),
313
- FastlaneCore::ConfigItem.new(key: :override_keystore,
327
+ FastlaneCore::ConfigItem.new(key: :existing_keystore,
328
+ env_name: "MATCH_KEYSTORE_EXISTING",
329
+ description: "Path of an existing Keystore",
330
+ optional: true,
331
+ type: String),
332
+ FastlaneCore::ConfigItem.new(key: :override_keystore,
314
333
  env_name: "MATCH_KEYSTORE_OVERRIDE",
315
334
  description: "Override an existing Keystore (false by default)",
316
335
  optional: true,
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
2
  module MatchKeystore
3
- VERSION = "0.1.3"
3
+ VERSION = "0.1.4"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fastlane-plugin-match_keystore
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christopher NEY