fastlane 2.138.0 → 2.143.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (137) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +1 -1
  3. data/README.md +75 -62
  4. data/cert/lib/cert/options.rb +12 -5
  5. data/cert/lib/cert/runner.rb +13 -0
  6. data/deliver/lib/deliver/options.rb +2 -2
  7. data/deliver/lib/deliver/runner.rb +13 -2
  8. data/deliver/lib/deliver/submit_for_review.rb +7 -1
  9. data/fastlane/lib/fastlane/action.rb +2 -2
  10. data/fastlane/lib/fastlane/actions/.hockey.rb.swp +0 -0
  11. data/fastlane/lib/fastlane/actions/.slack.rb.swp +0 -0
  12. data/fastlane/lib/fastlane/actions/.update_project_provisioning.rb.swp +0 -0
  13. data/fastlane/lib/fastlane/actions/README.md +2 -0
  14. data/fastlane/lib/fastlane/actions/app_store_build_number.rb +13 -5
  15. data/fastlane/lib/fastlane/actions/build_app.rb +157 -6
  16. data/fastlane/lib/fastlane/actions/build_ios_app.rb +28 -132
  17. data/fastlane/lib/fastlane/actions/build_mac_app.rb +46 -0
  18. data/fastlane/lib/fastlane/actions/cocoapods.rb +2 -2
  19. data/fastlane/lib/fastlane/actions/create_pull_request.rb +71 -2
  20. data/fastlane/lib/fastlane/actions/docs/{build_ios_app.md → build_app.md} +1 -1
  21. data/fastlane/lib/fastlane/actions/docs/frame_screenshots.md +22 -6
  22. data/fastlane/lib/fastlane/actions/docs/sync_code_signing.md +20 -4
  23. data/fastlane/lib/fastlane/actions/docs/upload_to_app_store.md.erb +10 -0
  24. data/fastlane/lib/fastlane/actions/ensure_git_branch.rb +1 -1
  25. data/fastlane/lib/fastlane/actions/ensure_xcode_version.rb +35 -7
  26. data/fastlane/lib/fastlane/actions/frame_screenshots.rb +2 -1
  27. data/fastlane/lib/fastlane/actions/get_github_release.rb +3 -0
  28. data/fastlane/lib/fastlane/actions/gradle.rb +43 -2
  29. data/fastlane/lib/fastlane/actions/gym.rb +3 -7
  30. data/fastlane/lib/fastlane/actions/import_from_git.rb +4 -0
  31. data/fastlane/lib/fastlane/actions/last_git_tag.rb +14 -5
  32. data/fastlane/lib/fastlane/actions/latest_testflight_build_number.rb +9 -3
  33. data/fastlane/lib/fastlane/actions/notarize.rb +183 -0
  34. data/fastlane/lib/fastlane/actions/run_tests.rb +5 -22
  35. data/fastlane/lib/fastlane/actions/s3.rb +5 -291
  36. data/fastlane/lib/fastlane/actions/set_github_release.rb +1 -1
  37. data/fastlane/lib/fastlane/actions/setup_ci.rb +14 -8
  38. data/fastlane/lib/fastlane/actions/spm.rb +8 -0
  39. data/fastlane/lib/fastlane/actions/swiftlint.rb +17 -2
  40. data/fastlane/lib/fastlane/actions/update_plist.rb +37 -2
  41. data/fastlane/lib/fastlane/actions/upload_symbols_to_crashlytics.rb +13 -3
  42. data/fastlane/lib/fastlane/actions/upload_to_app_store.rb +1 -0
  43. data/fastlane/lib/fastlane/actions/upload_to_play_store_internal_app_sharing.rb +78 -0
  44. data/fastlane/lib/fastlane/fast_file.rb +13 -3
  45. data/fastlane/lib/fastlane/helper/adb_helper.rb +1 -1
  46. data/fastlane/lib/fastlane/helper/s3_client_helper.rb +56 -0
  47. data/fastlane/lib/fastlane/plugins/plugin_manager.rb +1 -1
  48. data/fastlane/lib/fastlane/plugins/template/.rubocop.yml +2 -0
  49. data/fastlane/lib/fastlane/runner.rb +23 -18
  50. data/fastlane/lib/fastlane/server/socket_server_action_command_executor.rb +1 -1
  51. data/fastlane/lib/fastlane/version.rb +1 -1
  52. data/fastlane/swift/Deliverfile.swift +1 -1
  53. data/fastlane/swift/DeliverfileProtocol.swift +3 -3
  54. data/fastlane/swift/Fastlane.swift +429 -50
  55. data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.xcworkspace/xcuserdata/josh.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  56. data/fastlane/swift/Gymfile.swift +1 -1
  57. data/fastlane/swift/GymfileProtocol.swift +17 -1
  58. data/fastlane/swift/Matchfile.swift +1 -1
  59. data/fastlane/swift/MatchfileProtocol.swift +23 -3
  60. data/fastlane/swift/Precheckfile.swift +1 -1
  61. data/fastlane/swift/RubyCommand.swift +1 -1
  62. data/fastlane/swift/Scanfile.swift +1 -1
  63. data/fastlane/swift/ScanfileProtocol.swift +21 -1
  64. data/fastlane/swift/Screengrabfile.swift +1 -1
  65. data/fastlane/swift/Snapshotfile.swift +1 -1
  66. data/fastlane/swift/SnapshotfileProtocol.swift +9 -1
  67. data/fastlane_core/lib/fastlane_core/build_watcher.rb +6 -2
  68. data/fastlane_core/lib/fastlane_core/cert_checker.rb +28 -0
  69. data/fastlane_core/lib/fastlane_core/device_manager.rb +20 -0
  70. data/fastlane_core/lib/fastlane_core/helper.rb +7 -1
  71. data/fastlane_core/lib/fastlane_core/ipa_file_analyser.rb +1 -0
  72. data/fastlane_core/lib/fastlane_core/keychain_importer.rb +2 -0
  73. data/fastlane_core/lib/fastlane_core/project.rb +27 -0
  74. data/frameit/lib/frameit/commands_generator.rb +25 -0
  75. data/frameit/lib/frameit/config_parser.rb +31 -9
  76. data/frameit/lib/frameit/device.rb +90 -0
  77. data/frameit/lib/frameit/device_types.rb +121 -5
  78. data/frameit/lib/frameit/editor.rb +31 -40
  79. data/frameit/lib/frameit/offsets.rb +8 -1
  80. data/frameit/lib/frameit/options.rb +81 -54
  81. data/frameit/lib/frameit/runner.rb +17 -7
  82. data/frameit/lib/frameit/screenshot.rb +35 -47
  83. data/frameit/lib/frameit/template_finder.rb +15 -12
  84. data/gym/lib/gym/code_signing_mapping.rb +32 -3
  85. data/gym/lib/gym/detect_values.rb +34 -2
  86. data/gym/lib/gym/generators/build_command_generator.rb +1 -0
  87. data/gym/lib/gym/generators/package_command_generator.rb +4 -0
  88. data/gym/lib/gym/generators/package_command_generator_xcode7.rb +47 -17
  89. data/gym/lib/gym/module.rb +8 -0
  90. data/gym/lib/gym/options.rb +25 -1
  91. data/gym/lib/gym/runner.rb +64 -24
  92. data/match/lib/match/change_password.rb +1 -1
  93. data/match/lib/match/encryption.rb +4 -0
  94. data/match/lib/match/encryption/openssl.rb +1 -1
  95. data/match/lib/match/generator.rb +17 -3
  96. data/match/lib/match/importer.rb +2 -2
  97. data/match/lib/match/module.rb +5 -2
  98. data/match/lib/match/nuke.rb +59 -17
  99. data/match/lib/match/options.rb +38 -15
  100. data/match/lib/match/runner.rb +24 -8
  101. data/match/lib/match/setup.rb +1 -1
  102. data/match/lib/match/spaceship_ensure.rb +19 -9
  103. data/match/lib/match/storage.rb +4 -0
  104. data/match/lib/match/storage/git_storage.rb +5 -2
  105. data/match/lib/match/storage/google_cloud_storage.rb +2 -2
  106. data/match/lib/match/storage/s3_storage.rb +162 -0
  107. data/pilot/lib/pilot/.manager.rb.swp +0 -0
  108. data/pilot/lib/pilot/build_manager.rb +55 -15
  109. data/pilot/lib/pilot/options.rb +3 -1
  110. data/scan/lib/scan/detect_values.rb +6 -1
  111. data/scan/lib/scan/manager.rb +18 -1
  112. data/scan/lib/scan/options.rb +28 -1
  113. data/scan/lib/scan/runner.rb +11 -3
  114. data/scan/lib/scan/slack_poster.rb +1 -1
  115. data/scan/lib/scan/test_command_generator.rb +9 -5
  116. data/screengrab/lib/screengrab/runner.rb +31 -18
  117. data/snapshot/lib/snapshot/fixes/simulator_shared_pasteboard.rb +16 -0
  118. data/snapshot/lib/snapshot/options.rb +12 -1
  119. data/snapshot/lib/snapshot/simulator_launchers/launcher_configuration.rb +2 -0
  120. data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher_base.rb +13 -0
  121. data/spaceship/lib/spaceship/connect_api/.DS_Store +0 -0
  122. data/spaceship/lib/spaceship/connect_api/models/beta_feedback.rb +4 -0
  123. data/spaceship/lib/spaceship/connect_api/models/build.rb +4 -0
  124. data/spaceship/lib/spaceship/connect_api/models/build_beta_detail.rb +5 -0
  125. data/spaceship/lib/spaceship/connect_api/models/certificate.rb +2 -0
  126. data/spaceship/lib/spaceship/connect_api/testflight/testflight.rb +6 -0
  127. data/spaceship/lib/spaceship/portal/.certificate.rb.swp +0 -0
  128. data/spaceship/lib/spaceship/portal/app.rb +11 -2
  129. data/spaceship/lib/spaceship/tunes/iap.rb +11 -11
  130. data/spaceship/lib/spaceship/tunes/iap_detail.rb +7 -3
  131. data/spaceship/lib/spaceship/tunes/iap_families.rb +12 -1
  132. data/spaceship/lib/spaceship/tunes/iap_family_details.rb +26 -17
  133. data/spaceship/lib/spaceship/tunes/iap_status.rb +5 -1
  134. data/spaceship/lib/spaceship/tunes/tunes_client.rb +2 -2
  135. data/supply/lib/supply/client.rb +26 -0
  136. data/supply/lib/supply/uploader.rb +28 -0
  137. metadata +64 -20
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fe11c3d8b7afcbbe9c3bc070c3455d220e64200ab52ce4f1322deac1026c1581
4
- data.tar.gz: c9e3ddf13fa0cdd2e648151851986a404d3075e89bc1a7492cb7027fc68a1814
3
+ metadata.gz: e92b08dddc966a17437ad382e38fcc8e5a5f06a0d1d6e7f692574b9919ec5804
4
+ data.tar.gz: 2328317029dd9a9648ad22c61b028532cb2d1e18d792e6678d581d9e92494575
5
5
  SHA512:
6
- metadata.gz: c0b6291a3720ff53673da4c7c9091e2cd4688dbc4322ba48892abae02e3db40c6f6a1b19dd66cb927cd8d8fdffb750a4a196c6a813bb133beefdca97316433ee
7
- data.tar.gz: 41bb5e5b8faa0bbf5f9126b7a8cd73a74309cc1fd68affaedda41b12d87e5994de45e90206c30a7047d20c05d3165490c9e9f9faeab9f94736ad4428084cf50f
6
+ metadata.gz: 68a71d0cc29672e7d94851c951a040f8515985d655f306be4089b46f7a9d90079a995b6404402fda53d053c59f060b08d8acbdcfd4fb2acf753622258b94d8d7
7
+ data.tar.gz: 6889b1d8b59cbce13d432a0759381a29d84144c625feb3547c0b872611c07db87bb7827cbf613eee60fd2af21e6fc5bb322b2d595255a17d7a40ecaf0b90462d
data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2015-2019 The Fastlane Authors
3
+ Copyright (c) 2015-2020 The Fastlane Authors
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -34,23 +34,23 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
34
34
  <!-- This table is regenerated and resorted on each release -->
35
35
  <table id='team'>
36
36
  <tr>
37
- <td id='jérôme-lacoste'>
38
- <a href='https://github.com/lacostej'>
39
- <img src='https://github.com/lacostej.png?size=140'>
37
+ <td id='josh-holtz'>
38
+ <a href='https://github.com/joshdholtz'>
39
+ <img src='https://github.com/joshdholtz.png?size=140'>
40
40
  </a>
41
- <h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
41
+ <h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
42
42
  </td>
43
- <td id='olivier-halligon'>
44
- <a href='https://github.com/AliSoftware'>
45
- <img src='https://github.com/AliSoftware.png?size=140'>
43
+ <td id='danielle-tomlinson'>
44
+ <a href='https://github.com/endocrimes'>
45
+ <img src='https://github.com/endocrimes.png?size=140'>
46
46
  </a>
47
- <h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
47
+ <h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
48
48
  </td>
49
- <td id='andrew-mcburney'>
50
- <a href='https://github.com/armcburney'>
51
- <img src='https://github.com/armcburney.png?size=140'>
49
+ <td id='jérôme-lacoste'>
50
+ <a href='https://github.com/lacostej'>
51
+ <img src='https://github.com/lacostej.png?size=140'>
52
52
  </a>
53
- <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
53
+ <h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
54
54
  </td>
55
55
  <td id='fumiya-nakamura'>
56
56
  <a href='https://github.com/nafu'>
@@ -58,19 +58,25 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
58
58
  </a>
59
59
  <h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
60
60
  </td>
61
- <td id='stefan-natchev'>
62
- <a href='https://github.com/snatchev'>
63
- <img src='https://github.com/snatchev.png?size=140'>
61
+ <td id='olivier-halligon'>
62
+ <a href='https://github.com/AliSoftware'>
63
+ <img src='https://github.com/AliSoftware.png?size=140'>
64
64
  </a>
65
- <h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
65
+ <h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
66
66
  </td>
67
67
  </tr>
68
68
  <tr>
69
- <td id='jorge-revuelta-h'>
70
- <a href='https://github.com/minuscorp'>
71
- <img src='https://github.com/minuscorp.png?size=140'>
69
+ <td id='luka-mirosevic'>
70
+ <a href='https://github.com/lmirosevic'>
71
+ <img src='https://github.com/lmirosevic.png?size=140'>
72
72
  </a>
73
- <h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
73
+ <h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
74
+ </td>
75
+ <td id='max-ott'>
76
+ <a href='https://github.com/max-ott'>
77
+ <img src='https://github.com/max-ott.png?size=140'>
78
+ </a>
79
+ <h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
74
80
  </td>
75
81
  <td id='jan-piotrowski'>
76
82
  <a href='https://github.com/janpio'>
@@ -78,26 +84,32 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
78
84
  </a>
79
85
  <h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
80
86
  </td>
81
- <td id='jimmy-dee'>
82
- <a href='https://github.com/jdee'>
83
- <img src='https://github.com/jdee.png?size=140'>
84
- </a>
85
- <h4 align='center'>Jimmy Dee</h4>
86
- </td>
87
- <td id='matthew-ellis'>
88
- <a href='https://github.com/matthewellis'>
89
- <img src='https://github.com/matthewellis.png?size=140'>
87
+ <td id='jorge-revuelta-h'>
88
+ <a href='https://github.com/minuscorp'>
89
+ <img src='https://github.com/minuscorp.png?size=140'>
90
90
  </a>
91
- <h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
91
+ <h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
92
92
  </td>
93
- <td id='josh-holtz'>
94
- <a href='https://github.com/joshdholtz'>
95
- <img src='https://github.com/joshdholtz.png?size=140'>
93
+ <td id='manu-wallner'>
94
+ <a href='https://github.com/milch'>
95
+ <img src='https://github.com/milch.png?size=140'>
96
96
  </a>
97
- <h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
97
+ <h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
98
98
  </td>
99
99
  </tr>
100
100
  <tr>
101
+ <td id='andrew-mcburney'>
102
+ <a href='https://github.com/armcburney'>
103
+ <img src='https://github.com/armcburney.png?size=140'>
104
+ </a>
105
+ <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
106
+ </td>
107
+ <td id='daniel-jankowski'>
108
+ <a href='https://github.com/mollyIV'>
109
+ <img src='https://github.com/mollyIV.png?size=140'>
110
+ </a>
111
+ <h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
112
+ </td>
101
113
  <td id='joshua-liebowitz'>
102
114
  <a href='https://github.com/taquitos'>
103
115
  <img src='https://github.com/taquitos.png?size=140'>
@@ -110,37 +122,25 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
110
122
  </a>
111
123
  <h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
112
124
  </td>
113
- <td id='danielle-tomlinson'>
114
- <a href='https://github.com/endocrimes'>
115
- <img src='https://github.com/endocrimes.png?size=140'>
116
- </a>
117
- <h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
118
- </td>
119
- <td id='manu-wallner'>
120
- <a href='https://github.com/milch'>
121
- <img src='https://github.com/milch.png?size=140'>
122
- </a>
123
- <h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
124
- </td>
125
- <td id='aaron-brager'>
126
- <a href='https://github.com/getaaron'>
127
- <img src='https://github.com/getaaron.png?size=140'>
125
+ <td id='kohki-miki'>
126
+ <a href='https://github.com/giginet'>
127
+ <img src='https://github.com/giginet.png?size=140'>
128
128
  </a>
129
- <h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
129
+ <h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
130
130
  </td>
131
131
  </tr>
132
132
  <tr>
133
- <td id='maksym-grebenets'>
134
- <a href='https://github.com/mgrebenets'>
135
- <img src='https://github.com/mgrebenets.png?size=140'>
133
+ <td id='matthew-ellis'>
134
+ <a href='https://github.com/matthewellis'>
135
+ <img src='https://github.com/matthewellis.png?size=140'>
136
136
  </a>
137
- <h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
137
+ <h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
138
138
  </td>
139
- <td id='luka-mirosevic'>
140
- <a href='https://github.com/lmirosevic'>
141
- <img src='https://github.com/lmirosevic.png?size=140'>
139
+ <td id='jimmy-dee'>
140
+ <a href='https://github.com/jdee'>
141
+ <img src='https://github.com/jdee.png?size=140'>
142
142
  </a>
143
- <h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
143
+ <h4 align='center'>Jimmy Dee</h4>
144
144
  </td>
145
145
  <td id='iulian-onofrei'>
146
146
  <a href='https://github.com/revolter'>
@@ -148,11 +148,11 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
148
148
  </a>
149
149
  <h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
150
150
  </td>
151
- <td id='kohki-miki'>
152
- <a href='https://github.com/giginet'>
153
- <img src='https://github.com/giginet.png?size=140'>
151
+ <td id='stefan-natchev'>
152
+ <a href='https://github.com/snatchev'>
153
+ <img src='https://github.com/snatchev.png?size=140'>
154
154
  </a>
155
- <h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
155
+ <h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
156
156
  </td>
157
157
  <td id='felix-krause'>
158
158
  <a href='https://github.com/KrauseFx'>
@@ -161,6 +161,19 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
161
161
  <h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
162
162
  </td>
163
163
  </tr>
164
+ <tr>
165
+ <td id='maksym-grebenets'>
166
+ <a href='https://github.com/mgrebenets'>
167
+ <img src='https://github.com/mgrebenets.png?size=140'>
168
+ </a>
169
+ <h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
170
+ </td>
171
+ <td id='aaron-brager'>
172
+ <a href='https://github.com/getaaron'>
173
+ <img src='https://github.com/getaaron.png?size=140'>
174
+ </a>
175
+ <h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
176
+ </td>
164
177
  </table>
165
178
 
166
179
  Special thanks to all [contributors](https://github.com/fastlane/fastlane/graphs/contributors) for extending and improving _fastlane_.
@@ -13,12 +13,21 @@ module Cert
13
13
  FastlaneCore::ConfigItem.new(key: :development,
14
14
  env_name: "CERT_DEVELOPMENT",
15
15
  description: "Create a development certificate instead of a distribution one",
16
- is_string: false,
16
+ type: Boolean,
17
17
  default_value: false),
18
+ FastlaneCore::ConfigItem.new(key: :type,
19
+ env_name: "CERT_TYPE",
20
+ description: "Create specific certificate type (takes precedence over :development)",
21
+ optional: true,
22
+ verify_block: proc do |value|
23
+ value = value.to_s
24
+ types = %w(mac_installer_distribution developer_id_installer developer_id_application)
25
+ UI.user_error!("Unsupported types, must be: #{types}") unless types.include?(value)
26
+ end),
18
27
  FastlaneCore::ConfigItem.new(key: :force,
19
28
  env_name: "CERT_FORCE",
20
29
  description: "Create a certificate even if an existing certificate exists",
21
- is_string: false,
30
+ type: Boolean,
22
31
  default_value: false),
23
32
  FastlaneCore::ConfigItem.new(key: :generate_apple_certs,
24
33
  env_name: "CERT_GENERATE_APPLE_CERTS",
@@ -58,8 +67,7 @@ module Cert
58
67
  short_option: "-q",
59
68
  env_name: "CERT_FILE_NAME",
60
69
  optional: true,
61
- description: "The filename of certificate to store",
62
- is_string: true),
70
+ description: "The filename of certificate to store"),
63
71
  FastlaneCore::ConfigItem.new(key: :output_path,
64
72
  short_option: "-o",
65
73
  env_name: "CERT_OUTPUT_PATH",
@@ -85,7 +93,6 @@ module Cert
85
93
  FastlaneCore::ConfigItem.new(key: :platform,
86
94
  env_name: "CERT_PLATFORM",
87
95
  description: "Set the provisioning profile's platform (ios, macos)",
88
- is_string: false,
89
96
  default_value: "ios",
90
97
  verify_block: proc do |value|
91
98
  value = value.to_s
@@ -134,6 +134,19 @@ module Cert
134
134
 
135
135
  # The kind of certificate we're interested in
136
136
  def certificate_type
137
+ if Cert.config[:type]
138
+ case Cert.config[:type].to_sym
139
+ when :mac_installer_distribution
140
+ return Spaceship.certificate.mac_installer_distribution
141
+ when :developer_id_application
142
+ return Spaceship.certificate.developer_id_application
143
+ when :developer_id_installer
144
+ return Spaceship.certificate.developer_id_installer
145
+ else
146
+ UI.user_error("Unaccepted value for :type - #{Cert.config[:type]}")
147
+ end
148
+ end
149
+
137
150
  # Check if apple certs (Xcode 11 and later) should be used
138
151
  if Cert.config[:generate_apple_certs]
139
152
  cert_type = Spaceship.certificate.apple_distribution
@@ -149,12 +149,12 @@ module Deliver
149
149
 
150
150
  # release
151
151
  FastlaneCore::ConfigItem.new(key: :automatic_release,
152
- description: "Should the app be automatically released once it's approved?",
152
+ description: "Should the app be automatically released once it's approved? (Can not be used together with `auto_release_date`)",
153
153
  is_string: false,
154
154
  default_value: false),
155
155
  FastlaneCore::ConfigItem.new(key: :auto_release_date,
156
156
  env_name: "DELIVER_AUTO_RELEASE_DATE",
157
- description: "Date in milliseconds for automatically releasing on pending approval",
157
+ description: "Date in milliseconds for automatically releasing on pending approval (Can not be used together with `automatic_release`)",
158
158
  is_string: false,
159
159
  optional: true,
160
160
  conflicting_options: [:automatic_release],
@@ -140,14 +140,25 @@ module Deliver
140
140
  # Upload the binary to App Store Connect
141
141
  def upload_binary
142
142
  UI.message("Uploading binary to App Store Connect")
143
- if options[:ipa]
143
+
144
+ upload_ipa = options[:ipa]
145
+ upload_pkg = options[:pkg]
146
+
147
+ # 2020-01-27
148
+ # Only verify platform if if both ipa and pkg exists (for backwards support)
149
+ if upload_ipa && upload_pkg
150
+ upload_ipa = ["ios", "appletvos"].include?(options[:platform])
151
+ upload_pkg = options[:platform] == "osx"
152
+ end
153
+
154
+ if upload_ipa
144
155
  package_path = FastlaneCore::IpaUploadPackageBuilder.new.generate(
145
156
  app_id: options[:app].apple_id,
146
157
  ipa_path: options[:ipa],
147
158
  package_path: "/tmp",
148
159
  platform: options[:platform]
149
160
  )
150
- elsif options[:pkg]
161
+ elsif upload_pkg
151
162
  package_path = FastlaneCore::PkgUploadPackageBuilder.new.generate(
152
163
  app_id: options[:app].apple_id,
153
164
  pkg_path: options[:pkg],
@@ -58,11 +58,17 @@ module Deliver
58
58
  start = Time.now
59
59
  build = nil
60
60
 
61
+ use_latest_version = app_version.nil?
62
+
61
63
  loop do
62
64
  # Sometimes candidate_builds don't appear immediately after submission
63
65
  # Wait for candidate_builds to appear on App Store Connect
64
66
  # Issue https://github.com/fastlane/fastlane/issues/10411
65
- candidate_builds = app.latest_version.candidate_builds
67
+ if use_latest_version
68
+ candidate_builds = app.latest_version.candidate_builds
69
+ else
70
+ candidate_builds = app.tunes_all_builds_for_train(train: app_version)
71
+ end
66
72
  if (candidate_builds || []).count == 0
67
73
  UI.message("Waiting for candidate builds to appear...")
68
74
  if (Time.now - start) > (60 * 5)
@@ -110,7 +110,7 @@ module Fastlane
110
110
 
111
111
  # Is printed out in the Steps: output in the terminal
112
112
  # Return nil if you don't want any logging in the terminal/JUnit Report
113
- def self.step_text
113
+ def self.step_text(params)
114
114
  self.action_name
115
115
  end
116
116
 
@@ -121,7 +121,7 @@ module Fastlane
121
121
 
122
122
  # instead of "AddGitAction", this will return "add_git" to print it to the user
123
123
  def self.action_name
124
- self.name.split('::').last.gsub('Action', '').fastlane_underscore
124
+ self.name.split('::').last.gsub(/Action$/, '').fastlane_underscore
125
125
  end
126
126
 
127
127
  def self.lane_context
@@ -1,3 +1,5 @@
1
1
  All built-in integrations are available in this directory. Use the `fastlane new_action` command to create a new action.
2
2
 
3
3
  _fastlane_ will automatically detect the files in this folder
4
+
5
+ All available actions are listed and documented on https://docs.fastlane.tools/actions/. Documentation for individual actions is available on https://docs.fastlane.tools/actions/%action_name%, e.g. https://docs.fastlane.tools/actions/copy_artifacts/.
@@ -1,14 +1,18 @@
1
+ require 'ostruct'
2
+
1
3
  module Fastlane
2
4
  module Actions
3
5
  module SharedValues
4
6
  LATEST_BUILD_NUMBER = :LATEST_BUILD_NUMBER
7
+ LATEST_VERSION = :LATEST_VERSION
5
8
  end
6
9
 
7
10
  class AppStoreBuildNumberAction < Action
8
11
  def self.run(params)
9
12
  require 'spaceship'
10
13
 
11
- build_nr = get_build_number(params)
14
+ result = get_build_number(params)
15
+ build_nr = result.build_nr
12
16
 
13
17
  # Convert build_nr to int (for legacy use) if no "." in string
14
18
  if build_nr.kind_of?(String) && !build_nr.include?(".")
@@ -16,6 +20,9 @@ module Fastlane
16
20
  end
17
21
 
18
22
  Actions.lane_context[SharedValues::LATEST_BUILD_NUMBER] = build_nr
23
+ Actions.lane_context[SharedValues::LATEST_VERSION] = result.build_v
24
+
25
+ return build_nr
19
26
  end
20
27
 
21
28
  def self.get_build_number(params)
@@ -33,7 +40,7 @@ module Fastlane
33
40
 
34
41
  UI.message("Latest upload for live-version #{app.live_version.version} is build: #{build_nr}")
35
42
 
36
- return build_nr
43
+ return OpenStruct.new({ build_nr: build_nr, build_v: app.live_version.version })
37
44
  else
38
45
  version_number = params[:version]
39
46
  platform = params[:platform]
@@ -61,7 +68,7 @@ module Fastlane
61
68
  if build
62
69
  build_nr = build.version
63
70
  UI.message("Latest upload for version #{build.app_version} on #{platform_message} is build: #{build_nr}")
64
- return build_nr
71
+ return OpenStruct.new({ build_nr: build_nr, build_v: build.app_version })
65
72
  end
66
73
 
67
74
  # Let user know that build couldn't be found
@@ -72,7 +79,7 @@ module Fastlane
72
79
  else
73
80
  build_nr = params[:initial_build_number]
74
81
  UI.message("Using initial build number of #{build_nr}")
75
- return build_nr
82
+ return OpenStruct.new({ build_nr: build_nr, build_v: version_number })
76
83
  end
77
84
  end
78
85
  end
@@ -159,7 +166,8 @@ module Fastlane
159
166
 
160
167
  def self.output
161
168
  [
162
- ['LATEST_BUILD_NUMBER', 'The latest build number of either live or testflight version']
169
+ ['LATEST_BUILD_NUMBER', 'The latest build number of either live or testflight version'],
170
+ ['LATEST_VERSION', 'The version of the latest build number']
163
171
  ]
164
172
  end
165
173
 
@@ -1,13 +1,164 @@
1
1
  module Fastlane
2
2
  module Actions
3
- require 'fastlane/actions/build_ios_app'
4
- class BuildAppAction < BuildIosAppAction
5
- #####################################################
6
- # @!group Documentation
7
- #####################################################
3
+ module SharedValues
4
+ IPA_OUTPUT_PATH ||= :IPA_OUTPUT_PATH
5
+ PKG_OUTPUT_PATH ||= :PKG_OUTPUT_PATH
6
+ DSYM_OUTPUT_PATH ||= :DSYM_OUTPUT_PATH
7
+ XCODEBUILD_ARCHIVE ||= :XCODEBUILD_ARCHIVE # originally defined in XcodebuildAction
8
+ end
9
+
10
+ class BuildAppAction < Action
11
+ def self.run(values)
12
+ require 'gym'
13
+
14
+ unless Actions.lane_context[SharedValues::SIGH_PROFILE_TYPE].to_s == "development"
15
+ values[:export_method] ||= Actions.lane_context[SharedValues::SIGH_PROFILE_TYPE]
16
+ end
17
+
18
+ if Actions.lane_context[SharedValues::MATCH_PROVISIONING_PROFILE_MAPPING]
19
+ # Since Xcode 9 you need to explicitly provide the provisioning profile per app target
20
+ # If the user is smart and uses match and gym together with fastlane, we can do all
21
+ # the heavy lifting for them
22
+ values[:export_options] ||= {}
23
+ # It's not always a hash, because the user might have passed a string path to a ready plist file
24
+ # If that's the case, we won't set the provisioning profiles
25
+ # see https://github.com/fastlane/fastlane/issues/9490
26
+ if values[:export_options].kind_of?(Hash)
27
+ match_mapping = (Actions.lane_context[SharedValues::MATCH_PROVISIONING_PROFILE_MAPPING] || {}).dup
28
+ existing_mapping = (values[:export_options][:provisioningProfiles] || {}).dup
29
+
30
+ # Be smart about how we merge those mappings in case there are conflicts
31
+ mapping_object = Gym::CodeSigningMapping.new
32
+ hash_to_use = mapping_object.merge_profile_mapping(primary_mapping: existing_mapping,
33
+ secondary_mapping: match_mapping,
34
+ export_method: values[:export_method])
35
+
36
+ values[:export_options][:provisioningProfiles] = hash_to_use
37
+ else
38
+ self.show_xcode_9_warning
39
+ end
40
+ elsif Actions.lane_context[SharedValues::SIGH_PROFILE_PATHS]
41
+ # Since Xcode 9 you need to explicitly provide the provisioning profile per app target
42
+ # If the user used sigh we can match the profiles from sigh
43
+ values[:export_options] ||= {}
44
+ if values[:export_options].kind_of?(Hash)
45
+ # It's not always a hash, because the user might have passed a string path to a ready plist file
46
+ # If that's the case, we won't set the provisioning profiles
47
+ # see https://github.com/fastlane/fastlane/issues/9684
48
+ values[:export_options][:provisioningProfiles] ||= {}
49
+ Actions.lane_context[SharedValues::SIGH_PROFILE_PATHS].each do |profile_path|
50
+ begin
51
+ profile = FastlaneCore::ProvisioningProfile.parse(profile_path)
52
+ app_id_prefix = profile["ApplicationIdentifierPrefix"].first
53
+ bundle_id = profile["Entitlements"]["application-identifier"].gsub("#{app_id_prefix}.", "")
54
+ values[:export_options][:provisioningProfiles][bundle_id] = profile["Name"]
55
+ rescue => ex
56
+ UI.error("Couldn't load profile at path: #{profile_path}")
57
+ UI.error(ex)
58
+ UI.verbose(ex.backtrace.join("\n"))
59
+ end
60
+ end
61
+ else
62
+ self.show_xcode_9_warning
63
+ end
64
+ end
65
+
66
+ gym_output_path = Gym::Manager.new.work(values)
67
+ if gym_output_path.nil?
68
+ UI.important("No output path received from gym")
69
+ return nil
70
+ end
71
+
72
+ absolute_output_path = File.expand_path(gym_output_path)
73
+
74
+ # Binary path
75
+ if File.extname(absolute_output_path) == ".ipa"
76
+ absolute_dsym_path = absolute_output_path.gsub(/.ipa$/, ".app.dSYM.zip")
77
+
78
+ Actions.lane_context[SharedValues::IPA_OUTPUT_PATH] = absolute_output_path
79
+ ENV[SharedValues::IPA_OUTPUT_PATH.to_s] = absolute_output_path # for deliver
80
+ elsif File.extname(absolute_output_path) == ".pkg"
81
+ absolute_dsym_path = absolute_output_path.gsub(/.pkg$/, ".dSYM.zip")
82
+
83
+ Actions.lane_context[SharedValues::PKG_OUTPUT_PATH] = absolute_output_path
84
+ ENV[SharedValues::PKG_OUTPUT_PATH.to_s] = absolute_output_path # for deliver
85
+ end
86
+
87
+ # xcarchive path
88
+ Actions.lane_context[SharedValues::XCODEBUILD_ARCHIVE] = Gym::BuildCommandGenerator.archive_path
89
+
90
+ # dSYM path
91
+ if absolute_dsym_path && File.exist?(absolute_dsym_path)
92
+ Actions.lane_context[SharedValues::DSYM_OUTPUT_PATH] = absolute_dsym_path
93
+ ENV[SharedValues::DSYM_OUTPUT_PATH.to_s] = absolute_dsym_path
94
+ end
95
+
96
+ return absolute_output_path
97
+ end
98
+ # rubocop:enable Metrics/PerceivedComplexity
8
99
 
9
100
  def self.description
10
- "Alias for the `build_ios_app` action"
101
+ "Easily build and sign your app (via _gym_)"
102
+ end
103
+
104
+ def self.details
105
+ "More information: https://fastlane.tools/gym"
106
+ end
107
+
108
+ def self.output
109
+ [
110
+ ['IPA_OUTPUT_PATH', 'The path to the newly generated ipa file'],
111
+ ['PKG_OUTPUT_PATH', 'The path to the newly generated pkg file'],
112
+ ['DSYM_OUTPUT_PATH', 'The path to the dSYM files'],
113
+ ['XCODEBUILD_ARCHIVE', 'The path to the xcodebuild archive']
114
+ ]
115
+ end
116
+
117
+ def self.return_value
118
+ "The absolute path to the generated ipa file"
119
+ end
120
+
121
+ def self.author
122
+ "KrauseFx"
123
+ end
124
+
125
+ def self.available_options
126
+ require 'gym'
127
+ Gym::Options.available_options
128
+ end
129
+
130
+ def self.is_supported?(platform)
131
+ [:ios, :mac].include?(platform)
132
+ end
133
+
134
+ def self.example_code
135
+ [
136
+ 'build_app(scheme: "MyApp", workspace: "MyApp.xcworkspace")',
137
+ 'build_app(
138
+ workspace: "MyApp.xcworkspace",
139
+ configuration: "Debug",
140
+ scheme: "MyApp",
141
+ silent: true,
142
+ clean: true,
143
+ output_directory: "path/to/dir", # Destination directory. Defaults to current directory.
144
+ output_name: "my-app.ipa", # specify the name of the .ipa file to generate (including file extension)
145
+ sdk: "iOS 11.1" # use SDK as the name or path of the base SDK when building the project.
146
+ )',
147
+ 'gym # alias for "build_app"',
148
+ 'build_ios_app # alias for "build_app (only iOS options)"',
149
+ 'build_mac_app # alias for "build_app (only macOS options)"'
150
+ ]
151
+ end
152
+
153
+ def self.category
154
+ :building
155
+ end
156
+
157
+ def self.show_xcode_9_warning
158
+ return unless Helper.xcode_at_least?("9.0")
159
+ UI.message("You passed a path to a custom plist file for exporting the binary.")
160
+ UI.message("Make sure to include information about what provisioning profiles to use with Xcode 9")
161
+ UI.message("More information: https://docs.fastlane.tools/codesigning/xcode-project/#xcode-9-and-up")
11
162
  end
12
163
  end
13
164
  end