mysigner 0.1.2 → 0.1.4

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.
Files changed (56) hide show
  1. checksums.yaml +4 -4
  2. data/.githooks/pre-commit +15 -0
  3. data/.githooks/pre-push +21 -0
  4. data/.github/workflows/ci.yml +29 -0
  5. data/.gitignore +4 -0
  6. data/.rubocop.yml +55 -0
  7. data/.rubocop_todo.yml +126 -0
  8. data/CHANGELOG.md +96 -0
  9. data/Gemfile +5 -3
  10. data/Gemfile.lock +38 -8
  11. data/README.md +14 -16
  12. data/Rakefile +5 -3
  13. data/bin/console +4 -3
  14. data/bin/setup +3 -0
  15. data/certificate_.cer +0 -0
  16. data/exe/mysigner +19 -2
  17. data/iOS_App_Store_Profile.mobileprovision +1 -0
  18. data/iOS_Distribution_Certificate.cer +1 -0
  19. data/lib/mysigner/build/android_executor.rb +83 -63
  20. data/lib/mysigner/build/android_parser.rb +33 -40
  21. data/lib/mysigner/build/configurator.rb +17 -16
  22. data/lib/mysigner/build/detector.rb +39 -50
  23. data/lib/mysigner/build/error_analyzer.rb +70 -68
  24. data/lib/mysigner/build/executor.rb +30 -37
  25. data/lib/mysigner/build/parser.rb +18 -18
  26. data/lib/mysigner/cleanup/private_keys_purger.rb +41 -0
  27. data/lib/mysigner/cli/auth_commands.rb +771 -764
  28. data/lib/mysigner/cli/build_commands.rb +962 -796
  29. data/lib/mysigner/cli/concerns/actionable_suggestions.rb +208 -154
  30. data/lib/mysigner/cli/concerns/api_helpers.rb +46 -54
  31. data/lib/mysigner/cli/concerns/error_handlers.rb +247 -237
  32. data/lib/mysigner/cli/concerns/helpers.rb +44 -1
  33. data/lib/mysigner/cli/diagnostic_commands.rb +667 -636
  34. data/lib/mysigner/cli/resource_commands.rb +1153 -985
  35. data/lib/mysigner/cli/validate_commands.rb +25 -25
  36. data/lib/mysigner/cli.rb +11 -1
  37. data/lib/mysigner/client.rb +27 -19
  38. data/lib/mysigner/config.rb +161 -60
  39. data/lib/mysigner/export/exporter.rb +38 -37
  40. data/lib/mysigner/signing/certificate_checker.rb +18 -23
  41. data/lib/mysigner/signing/gradle_signing_injector.rb +67 -0
  42. data/lib/mysigner/signing/keystore_manager.rb +81 -61
  43. data/lib/mysigner/signing/validator.rb +38 -40
  44. data/lib/mysigner/signing/wizard.rb +329 -342
  45. data/lib/mysigner/upload/app_store_automation.rb +96 -49
  46. data/lib/mysigner/upload/app_store_submission.rb +87 -92
  47. data/lib/mysigner/upload/asc_rest_uploader.rb +119 -0
  48. data/lib/mysigner/upload/play_store_uploader.rb +164 -144
  49. data/lib/mysigner/upload/uploader.rb +136 -115
  50. data/lib/mysigner/version.rb +3 -1
  51. data/lib/mysigner.rb +13 -11
  52. data/mysigner.gemspec +36 -33
  53. data/profile_.mobileprovision +0 -0
  54. data/test_manual.rb +37 -36
  55. metadata +44 -17
  56. data/.DS_Store +0 -0
@@ -1,9 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Mysigner
2
4
  class CLI < Thor
3
5
  module Concerns
4
6
  module Helpers
5
7
  # Helper for timing operations
6
- def with_timing(label)
8
+ def with_timing(_label)
7
9
  start = Time.now
8
10
  result = yield
9
11
  duration = Time.now - start
@@ -34,11 +36,52 @@ module Mysigner
34
36
  end
35
37
  end
36
38
 
39
+ # Client-side UDID validity check for iOS devices. Matches the two
40
+ # formats Apple uses: 25-character alphanumeric (older devices pre-
41
+ # iPhone X) and 40-character hex, optionally with a single dash after
42
+ # the first 8 chars (newer). Also rejects obviously synthetic values
43
+ # (all zeros, single-character repeats) that Apple's dev-portal
44
+ # sandbox has been known to accept even though they can never match
45
+ # a real device.
46
+ def valid_ios_udid?(udid)
47
+ return false if udid.nil? || udid.strip.empty?
48
+
49
+ normalized = udid.strip.upcase
50
+
51
+ # 25-char legacy UDID: alphanumeric
52
+ legacy = normalized.match?(/\A[0-9A-F]{25}\z/)
53
+
54
+ # 40-char modern UDID: hex, optional dash after first 8 chars
55
+ modern_plain = normalized.match?(/\A[0-9A-F]{40}\z/)
56
+ modern_dashed = normalized.match?(/\A[0-9A-F]{8}-[0-9A-F]{16}\z/) # 8-16 form some tools emit (older spec)
57
+ modern_full_dashed = normalized.match?(/\A[0-9A-F]{8}-[0-9A-F]{32}\z/) # 8-32 (what xcrun outputs)
58
+
59
+ return false unless legacy || modern_plain || modern_dashed || modern_full_dashed
60
+
61
+ hex_only = normalized.delete('-')
62
+ # Reject trivially synthetic UDIDs. A real UDID has at least 4
63
+ # distinct hex characters among its 25/40 positions; "000…" or
64
+ # "AAAA…" or "012345…" style sequences flunk that.
65
+ distinct = hex_only.chars.uniq.size
66
+ return false if distinct < 4
67
+
68
+ true
69
+ end
70
+
37
71
  def load_config
72
+ # CI/CD mode: prefer environment variables when set
73
+ return Config.from_env if Config.env_configured?
74
+
38
75
  config = Config.new
39
76
 
40
77
  unless config.exists?
41
78
  error "Not logged in. Run 'mysigner login' first."
79
+ say ''
80
+ say 'Tip: For CI/CD, set these environment variables instead:', :yellow
81
+ say ' export MYSIGNER_API_TOKEN=your_token', :yellow
82
+ say ' export MYSIGNER_ORG_ID=your_org_id', :yellow
83
+ say ' export MYSIGNER_API_URL=https://mysigner.dev # optional', :yellow
84
+ say ' export MYSIGNER_EMAIL=you@example.com # optional', :yellow
42
85
  exit 1
43
86
  end
44
87