fastlane_hotfix 2.165.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.
Files changed (868) hide show
  1. checksums.yaml +7 -0
  2. data/.yardopts +1 -0
  3. data/LICENSE +21 -0
  4. data/README.md +208 -0
  5. data/bin/bin-proxy +19 -0
  6. data/bin/fastlane +23 -0
  7. data/cert/README.md +17 -0
  8. data/cert/lib/cert.rb +4 -0
  9. data/cert/lib/cert/commands_generator.rb +60 -0
  10. data/cert/lib/cert/module.rb +16 -0
  11. data/cert/lib/cert/options.rb +132 -0
  12. data/cert/lib/cert/runner.rb +239 -0
  13. data/credentials_manager/README.md +64 -0
  14. data/credentials_manager/lib/credentials_manager.rb +7 -0
  15. data/credentials_manager/lib/credentials_manager/account_manager.rb +157 -0
  16. data/credentials_manager/lib/credentials_manager/appfile_config.rb +196 -0
  17. data/credentials_manager/lib/credentials_manager/cli.rb +69 -0
  18. data/deliver/README.md +17 -0
  19. data/deliver/lib/assets/DeliverfileDefault +3 -0
  20. data/deliver/lib/assets/DeliverfileDefault.swift +13 -0
  21. data/deliver/lib/assets/ScreenshotsHelp +7 -0
  22. data/deliver/lib/assets/summary.html.erb +299 -0
  23. data/deliver/lib/deliver.rb +15 -0
  24. data/deliver/lib/deliver/app_screenshot.rb +354 -0
  25. data/deliver/lib/deliver/app_screenshot_iterator.rb +95 -0
  26. data/deliver/lib/deliver/commands_generator.rb +190 -0
  27. data/deliver/lib/deliver/detect_values.rb +102 -0
  28. data/deliver/lib/deliver/download_screenshots.rb +76 -0
  29. data/deliver/lib/deliver/generate_summary.rb +13 -0
  30. data/deliver/lib/deliver/html_generator.rb +78 -0
  31. data/deliver/lib/deliver/languages.rb +7 -0
  32. data/deliver/lib/deliver/loader.rb +55 -0
  33. data/deliver/lib/deliver/module.rb +18 -0
  34. data/deliver/lib/deliver/options.rb +465 -0
  35. data/deliver/lib/deliver/queue_worker.rb +49 -0
  36. data/deliver/lib/deliver/runner.rb +233 -0
  37. data/deliver/lib/deliver/setup.rb +199 -0
  38. data/deliver/lib/deliver/submit_for_review.rb +214 -0
  39. data/deliver/lib/deliver/upload_metadata.rb +688 -0
  40. data/deliver/lib/deliver/upload_price_tier.rb +40 -0
  41. data/deliver/lib/deliver/upload_screenshots.rb +333 -0
  42. data/fastlane/README.md +11 -0
  43. data/fastlane/lib/assets/ActionDetails.md.erb +106 -0
  44. data/fastlane/lib/assets/Actions.md.erb +43 -0
  45. data/fastlane/lib/assets/AppfileTemplate +6 -0
  46. data/fastlane/lib/assets/AppfileTemplate.swift +7 -0
  47. data/fastlane/lib/assets/AppfileTemplateAndroid +2 -0
  48. data/fastlane/lib/assets/DefaultFastfileTemplate +20 -0
  49. data/fastlane/lib/assets/DefaultFastfileTemplate.swift +13 -0
  50. data/fastlane/lib/assets/completions/completion.bash +23 -0
  51. data/fastlane/lib/assets/completions/completion.fish +39 -0
  52. data/fastlane/lib/assets/completions/completion.sh +12 -0
  53. data/fastlane/lib/assets/completions/completion.zsh +23 -0
  54. data/fastlane/lib/assets/custom_action_template.rb +82 -0
  55. data/fastlane/lib/assets/mailgun_html_template.erb +142 -0
  56. data/fastlane/lib/assets/report_template.xml.erb +15 -0
  57. data/fastlane/lib/assets/s3_html_template.erb +105 -0
  58. data/fastlane/lib/assets/s3_plist_template.erb +31 -0
  59. data/fastlane/lib/assets/s3_version_template.erb +4 -0
  60. data/fastlane/lib/fastlane.rb +53 -0
  61. data/fastlane/lib/fastlane/action.rb +198 -0
  62. data/fastlane/lib/fastlane/action_collector.rb +35 -0
  63. data/fastlane/lib/fastlane/actions/README.md +5 -0
  64. data/fastlane/lib/fastlane/actions/actions_helper.rb +185 -0
  65. data/fastlane/lib/fastlane/actions/adb.rb +78 -0
  66. data/fastlane/lib/fastlane/actions/adb_devices.rb +71 -0
  67. data/fastlane/lib/fastlane/actions/add_extra_platforms.rb +45 -0
  68. data/fastlane/lib/fastlane/actions/add_git_tag.rb +122 -0
  69. data/fastlane/lib/fastlane/actions/app_store_build_number.rb +249 -0
  70. data/fastlane/lib/fastlane/actions/app_store_connect_api_key.rb +134 -0
  71. data/fastlane/lib/fastlane/actions/appaloosa.rb +266 -0
  72. data/fastlane/lib/fastlane/actions/appetize.rb +188 -0
  73. data/fastlane/lib/fastlane/actions/appetize_viewing_url_generator.rb +146 -0
  74. data/fastlane/lib/fastlane/actions/appium.rb +206 -0
  75. data/fastlane/lib/fastlane/actions/appledoc.rb +226 -0
  76. data/fastlane/lib/fastlane/actions/appstore.rb +14 -0
  77. data/fastlane/lib/fastlane/actions/apteligent.rb +105 -0
  78. data/fastlane/lib/fastlane/actions/artifactory.rb +157 -0
  79. data/fastlane/lib/fastlane/actions/automatic_code_signing.rb +226 -0
  80. data/fastlane/lib/fastlane/actions/backup_file.rb +41 -0
  81. data/fastlane/lib/fastlane/actions/backup_xcarchive.rb +135 -0
  82. data/fastlane/lib/fastlane/actions/badge.rb +155 -0
  83. data/fastlane/lib/fastlane/actions/build_and_upload_to_appetize.rb +107 -0
  84. data/fastlane/lib/fastlane/actions/build_android_app.rb +14 -0
  85. data/fastlane/lib/fastlane/actions/build_app.rb +165 -0
  86. data/fastlane/lib/fastlane/actions/build_ios_app.rb +47 -0
  87. data/fastlane/lib/fastlane/actions/build_mac_app.rb +46 -0
  88. data/fastlane/lib/fastlane/actions/bundle_install.rb +156 -0
  89. data/fastlane/lib/fastlane/actions/capture_android_screenshots.rb +63 -0
  90. data/fastlane/lib/fastlane/actions/capture_ios_screenshots.rb +61 -0
  91. data/fastlane/lib/fastlane/actions/capture_screenshots.rb +14 -0
  92. data/fastlane/lib/fastlane/actions/carthage.rb +230 -0
  93. data/fastlane/lib/fastlane/actions/cert.rb +14 -0
  94. data/fastlane/lib/fastlane/actions/changelog_from_git_commits.rb +197 -0
  95. data/fastlane/lib/fastlane/actions/chatwork.rb +94 -0
  96. data/fastlane/lib/fastlane/actions/check_app_store_metadata.rb +54 -0
  97. data/fastlane/lib/fastlane/actions/clean_build_artifacts.rb +72 -0
  98. data/fastlane/lib/fastlane/actions/clean_cocoapods_cache.rb +52 -0
  99. data/fastlane/lib/fastlane/actions/clear_derived_data.rb +70 -0
  100. data/fastlane/lib/fastlane/actions/clipboard.rb +52 -0
  101. data/fastlane/lib/fastlane/actions/cloc.rb +89 -0
  102. data/fastlane/lib/fastlane/actions/cocoapods.rb +170 -0
  103. data/fastlane/lib/fastlane/actions/commit_github_file.rb +186 -0
  104. data/fastlane/lib/fastlane/actions/commit_version_bump.rb +301 -0
  105. data/fastlane/lib/fastlane/actions/copy_artifacts.rb +114 -0
  106. data/fastlane/lib/fastlane/actions/crashlytics.rb +211 -0
  107. data/fastlane/lib/fastlane/actions/create_app_on_managed_play_store.rb +174 -0
  108. data/fastlane/lib/fastlane/actions/create_app_online.rb +75 -0
  109. data/fastlane/lib/fastlane/actions/create_keychain.rb +177 -0
  110. data/fastlane/lib/fastlane/actions/create_pull_request.rb +265 -0
  111. data/fastlane/lib/fastlane/actions/danger.rb +131 -0
  112. data/fastlane/lib/fastlane/actions/debug.rb +32 -0
  113. data/fastlane/lib/fastlane/actions/default_platform.rb +47 -0
  114. data/fastlane/lib/fastlane/actions/delete_keychain.rb +68 -0
  115. data/fastlane/lib/fastlane/actions/deliver.rb +14 -0
  116. data/fastlane/lib/fastlane/actions/deploygate.rb +210 -0
  117. data/fastlane/lib/fastlane/actions/device_grid/README.md +157 -0
  118. data/fastlane/lib/fastlane/actions/docs/build_app.md +245 -0
  119. data/fastlane/lib/fastlane/actions/docs/capture_android_screenshots.md +333 -0
  120. data/fastlane/lib/fastlane/actions/docs/capture_ios_screenshots.md +371 -0
  121. data/fastlane/lib/fastlane/actions/docs/check_app_store_metadata.md +103 -0
  122. data/fastlane/lib/fastlane/actions/docs/create_app_online.md +282 -0
  123. data/fastlane/lib/fastlane/actions/docs/frame_screenshots.md +349 -0
  124. data/fastlane/lib/fastlane/actions/docs/get_certificates.md +86 -0
  125. data/fastlane/lib/fastlane/actions/docs/get_provisioning_profile.md +223 -0
  126. data/fastlane/lib/fastlane/actions/docs/get_push_certificate.md +134 -0
  127. data/fastlane/lib/fastlane/actions/docs/run_tests.md +151 -0
  128. data/fastlane/lib/fastlane/actions/docs/sync_code_signing.md +573 -0
  129. data/fastlane/lib/fastlane/actions/docs/upload_to_app_store.md.erb +725 -0
  130. data/fastlane/lib/fastlane/actions/docs/upload_to_play_store.md +203 -0
  131. data/fastlane/lib/fastlane/actions/docs/upload_to_testflight.md +250 -0
  132. data/fastlane/lib/fastlane/actions/dotgpg_environment.rb +57 -0
  133. data/fastlane/lib/fastlane/actions/download.rb +76 -0
  134. data/fastlane/lib/fastlane/actions/download_dsyms.rb +369 -0
  135. data/fastlane/lib/fastlane/actions/download_from_play_store.rb +61 -0
  136. data/fastlane/lib/fastlane/actions/dsym_zip.rb +93 -0
  137. data/fastlane/lib/fastlane/actions/echo.rb +14 -0
  138. data/fastlane/lib/fastlane/actions/ensure_bundle_exec.rb +59 -0
  139. data/fastlane/lib/fastlane/actions/ensure_env_vars.rb +58 -0
  140. data/fastlane/lib/fastlane/actions/ensure_git_branch.rb +69 -0
  141. data/fastlane/lib/fastlane/actions/ensure_git_status_clean.rb +92 -0
  142. data/fastlane/lib/fastlane/actions/ensure_no_debug_code.rb +135 -0
  143. data/fastlane/lib/fastlane/actions/ensure_xcode_version.rb +125 -0
  144. data/fastlane/lib/fastlane/actions/environment_variable.rb +77 -0
  145. data/fastlane/lib/fastlane/actions/erb.rb +96 -0
  146. data/fastlane/lib/fastlane/actions/fastlane_version.rb +15 -0
  147. data/fastlane/lib/fastlane/actions/flock.rb +82 -0
  148. data/fastlane/lib/fastlane/actions/frame_screenshots.rb +64 -0
  149. data/fastlane/lib/fastlane/actions/frameit.rb +14 -0
  150. data/fastlane/lib/fastlane/actions/gcovr.rb +163 -0
  151. data/fastlane/lib/fastlane/actions/get_build_number.rb +106 -0
  152. data/fastlane/lib/fastlane/actions/get_build_number_repository.rb +120 -0
  153. data/fastlane/lib/fastlane/actions/get_certificates.rb +77 -0
  154. data/fastlane/lib/fastlane/actions/get_github_release.rb +166 -0
  155. data/fastlane/lib/fastlane/actions/get_info_plist_value.rb +78 -0
  156. data/fastlane/lib/fastlane/actions/get_ipa_info_plist_value.rb +82 -0
  157. data/fastlane/lib/fastlane/actions/get_managed_play_store_publishing_rights.rb +120 -0
  158. data/fastlane/lib/fastlane/actions/get_provisioning_profile.rb +101 -0
  159. data/fastlane/lib/fastlane/actions/get_push_certificate.rb +87 -0
  160. data/fastlane/lib/fastlane/actions/get_version_number.rb +200 -0
  161. data/fastlane/lib/fastlane/actions/git_add.rb +93 -0
  162. data/fastlane/lib/fastlane/actions/git_branch.rb +61 -0
  163. data/fastlane/lib/fastlane/actions/git_commit.rb +80 -0
  164. data/fastlane/lib/fastlane/actions/git_pull.rb +64 -0
  165. data/fastlane/lib/fastlane/actions/git_submodule_update.rb +52 -0
  166. data/fastlane/lib/fastlane/actions/git_tag_exists.rb +74 -0
  167. data/fastlane/lib/fastlane/actions/github_api.rb +262 -0
  168. data/fastlane/lib/fastlane/actions/google_play_track_release_names.rb +74 -0
  169. data/fastlane/lib/fastlane/actions/google_play_track_version_codes.rb +77 -0
  170. data/fastlane/lib/fastlane/actions/gradle.rb +329 -0
  171. data/fastlane/lib/fastlane/actions/gym.rb +10 -0
  172. data/fastlane/lib/fastlane/actions/hg_add_tag.rb +48 -0
  173. data/fastlane/lib/fastlane/actions/hg_commit_version_bump.rb +183 -0
  174. data/fastlane/lib/fastlane/actions/hg_ensure_clean_status.rb +53 -0
  175. data/fastlane/lib/fastlane/actions/hg_push.rb +64 -0
  176. data/fastlane/lib/fastlane/actions/hipchat.rb +200 -0
  177. data/fastlane/lib/fastlane/actions/hockey.rb +406 -0
  178. data/fastlane/lib/fastlane/actions/ifttt.rb +96 -0
  179. data/fastlane/lib/fastlane/actions/import.rb +49 -0
  180. data/fastlane/lib/fastlane/actions/import_certificate.rb +77 -0
  181. data/fastlane/lib/fastlane/actions/import_from_git.rb +83 -0
  182. data/fastlane/lib/fastlane/actions/increment_build_number.rb +117 -0
  183. data/fastlane/lib/fastlane/actions/increment_version_number.rb +180 -0
  184. data/fastlane/lib/fastlane/actions/install_on_device.rb +95 -0
  185. data/fastlane/lib/fastlane/actions/install_provisioning_profile.rb +58 -0
  186. data/fastlane/lib/fastlane/actions/install_xcode_plugin.rb +91 -0
  187. data/fastlane/lib/fastlane/actions/installr.rb +132 -0
  188. data/fastlane/lib/fastlane/actions/ipa.rb +246 -0
  189. data/fastlane/lib/fastlane/actions/is_ci.rb +51 -0
  190. data/fastlane/lib/fastlane/actions/jazzy.rb +56 -0
  191. data/fastlane/lib/fastlane/actions/jira.rb +115 -0
  192. data/fastlane/lib/fastlane/actions/lane_context.rb +60 -0
  193. data/fastlane/lib/fastlane/actions/last_git_commit.rb +58 -0
  194. data/fastlane/lib/fastlane/actions/last_git_tag.rb +60 -0
  195. data/fastlane/lib/fastlane/actions/latest_testflight_build_number.rb +155 -0
  196. data/fastlane/lib/fastlane/actions/lcov.rb +102 -0
  197. data/fastlane/lib/fastlane/actions/mailgun.rb +197 -0
  198. data/fastlane/lib/fastlane/actions/make_changelog_from_jenkins.rb +81 -0
  199. data/fastlane/lib/fastlane/actions/match.rb +14 -0
  200. data/fastlane/lib/fastlane/actions/min_fastlane_version.rb +57 -0
  201. data/fastlane/lib/fastlane/actions/modify_services.rb +173 -0
  202. data/fastlane/lib/fastlane/actions/nexus_upload.rb +230 -0
  203. data/fastlane/lib/fastlane/actions/notarize.rb +193 -0
  204. data/fastlane/lib/fastlane/actions/notification.rb +75 -0
  205. data/fastlane/lib/fastlane/actions/notify.rb +40 -0
  206. data/fastlane/lib/fastlane/actions/number_of_commits.rb +75 -0
  207. data/fastlane/lib/fastlane/actions/oclint.rb +269 -0
  208. data/fastlane/lib/fastlane/actions/onesignal.rb +186 -0
  209. data/fastlane/lib/fastlane/actions/opt_out_crash_reporting.rb +33 -0
  210. data/fastlane/lib/fastlane/actions/opt_out_usage.rb +40 -0
  211. data/fastlane/lib/fastlane/actions/pem.rb +14 -0
  212. data/fastlane/lib/fastlane/actions/pilot.rb +14 -0
  213. data/fastlane/lib/fastlane/actions/pod_lib_lint.rb +189 -0
  214. data/fastlane/lib/fastlane/actions/pod_push.rb +173 -0
  215. data/fastlane/lib/fastlane/actions/podio_item.rb +217 -0
  216. data/fastlane/lib/fastlane/actions/precheck.rb +14 -0
  217. data/fastlane/lib/fastlane/actions/println.rb +14 -0
  218. data/fastlane/lib/fastlane/actions/produce.rb +14 -0
  219. data/fastlane/lib/fastlane/actions/prompt.rb +119 -0
  220. data/fastlane/lib/fastlane/actions/push_git_tags.rb +76 -0
  221. data/fastlane/lib/fastlane/actions/push_to_git_remote.rb +127 -0
  222. data/fastlane/lib/fastlane/actions/puts.rb +68 -0
  223. data/fastlane/lib/fastlane/actions/read_podspec.rb +90 -0
  224. data/fastlane/lib/fastlane/actions/recreate_schemes.rb +46 -0
  225. data/fastlane/lib/fastlane/actions/register_device.rb +151 -0
  226. data/fastlane/lib/fastlane/actions/register_devices.rb +214 -0
  227. data/fastlane/lib/fastlane/actions/reset_git_repo.rb +121 -0
  228. data/fastlane/lib/fastlane/actions/reset_simulator_contents.rb +92 -0
  229. data/fastlane/lib/fastlane/actions/resign.rb +132 -0
  230. data/fastlane/lib/fastlane/actions/restore_file.rb +44 -0
  231. data/fastlane/lib/fastlane/actions/rocket.rb +83 -0
  232. data/fastlane/lib/fastlane/actions/rsync.rb +74 -0
  233. data/fastlane/lib/fastlane/actions/ruby_version.rb +56 -0
  234. data/fastlane/lib/fastlane/actions/run_tests.rb +114 -0
  235. data/fastlane/lib/fastlane/actions/s3.rb +174 -0
  236. data/fastlane/lib/fastlane/actions/say.rb +56 -0
  237. data/fastlane/lib/fastlane/actions/scan.rb +14 -0
  238. data/fastlane/lib/fastlane/actions/scp.rb +114 -0
  239. data/fastlane/lib/fastlane/actions/screengrab.rb +14 -0
  240. data/fastlane/lib/fastlane/actions/set_build_number_repository.rb +76 -0
  241. data/fastlane/lib/fastlane/actions/set_changelog.rb +204 -0
  242. data/fastlane/lib/fastlane/actions/set_github_release.rb +274 -0
  243. data/fastlane/lib/fastlane/actions/set_info_plist_value.rb +92 -0
  244. data/fastlane/lib/fastlane/actions/set_pod_key.rb +78 -0
  245. data/fastlane/lib/fastlane/actions/setup_ci.rb +132 -0
  246. data/fastlane/lib/fastlane/actions/setup_circle_ci.rb +58 -0
  247. data/fastlane/lib/fastlane/actions/setup_jenkins.rb +202 -0
  248. data/fastlane/lib/fastlane/actions/setup_travis.rb +57 -0
  249. data/fastlane/lib/fastlane/actions/sh.rb +71 -0
  250. data/fastlane/lib/fastlane/actions/sigh.rb +14 -0
  251. data/fastlane/lib/fastlane/actions/skip_docs.rb +52 -0
  252. data/fastlane/lib/fastlane/actions/slack.rb +288 -0
  253. data/fastlane/lib/fastlane/actions/slather.rb +329 -0
  254. data/fastlane/lib/fastlane/actions/snapshot.rb +14 -0
  255. data/fastlane/lib/fastlane/actions/sonar.rb +177 -0
  256. data/fastlane/lib/fastlane/actions/spaceship_logs.rb +135 -0
  257. data/fastlane/lib/fastlane/actions/spaceship_stats.rb +73 -0
  258. data/fastlane/lib/fastlane/actions/splunkmint.rb +156 -0
  259. data/fastlane/lib/fastlane/actions/spm.rb +138 -0
  260. data/fastlane/lib/fastlane/actions/ssh.rb +162 -0
  261. data/fastlane/lib/fastlane/actions/supply.rb +14 -0
  262. data/fastlane/lib/fastlane/actions/swiftlint.rb +240 -0
  263. data/fastlane/lib/fastlane/actions/sync_code_signing.rb +109 -0
  264. data/fastlane/lib/fastlane/actions/team_id.rb +42 -0
  265. data/fastlane/lib/fastlane/actions/team_name.rb +42 -0
  266. data/fastlane/lib/fastlane/actions/testfairy.rb +285 -0
  267. data/fastlane/lib/fastlane/actions/testflight.rb +14 -0
  268. data/fastlane/lib/fastlane/actions/tryouts.rb +149 -0
  269. data/fastlane/lib/fastlane/actions/twitter.rb +89 -0
  270. data/fastlane/lib/fastlane/actions/typetalk.rb +93 -0
  271. data/fastlane/lib/fastlane/actions/unlock_keychain.rb +132 -0
  272. data/fastlane/lib/fastlane/actions/update_app_group_identifiers.rb +91 -0
  273. data/fastlane/lib/fastlane/actions/update_app_identifier.rb +124 -0
  274. data/fastlane/lib/fastlane/actions/update_code_signing_settings.rb +203 -0
  275. data/fastlane/lib/fastlane/actions/update_fastlane.rb +137 -0
  276. data/fastlane/lib/fastlane/actions/update_icloud_container_identifiers.rb +99 -0
  277. data/fastlane/lib/fastlane/actions/update_info_plist.rb +143 -0
  278. data/fastlane/lib/fastlane/actions/update_keychain_access_groups.rb +94 -0
  279. data/fastlane/lib/fastlane/actions/update_plist.rb +115 -0
  280. data/fastlane/lib/fastlane/actions/update_project_code_signing.rb +76 -0
  281. data/fastlane/lib/fastlane/actions/update_project_provisioning.rb +173 -0
  282. data/fastlane/lib/fastlane/actions/update_project_team.rb +95 -0
  283. data/fastlane/lib/fastlane/actions/update_urban_airship_configuration.rb +91 -0
  284. data/fastlane/lib/fastlane/actions/update_url_schemes.rb +123 -0
  285. data/fastlane/lib/fastlane/actions/upload_symbols_to_crashlytics.rb +231 -0
  286. data/fastlane/lib/fastlane/actions/upload_symbols_to_sentry.rb +165 -0
  287. data/fastlane/lib/fastlane/actions/upload_to_app_store.rb +67 -0
  288. data/fastlane/lib/fastlane/actions/upload_to_play_store.rb +80 -0
  289. data/fastlane/lib/fastlane/actions/upload_to_play_store_internal_app_sharing.rb +78 -0
  290. data/fastlane/lib/fastlane/actions/upload_to_testflight.rb +119 -0
  291. data/fastlane/lib/fastlane/actions/validate_play_store_json_key.rb +104 -0
  292. data/fastlane/lib/fastlane/actions/verify_build.rb +199 -0
  293. data/fastlane/lib/fastlane/actions/verify_pod_keys.rb +67 -0
  294. data/fastlane/lib/fastlane/actions/verify_xcode.rb +159 -0
  295. data/fastlane/lib/fastlane/actions/version_bump_podspec.rb +105 -0
  296. data/fastlane/lib/fastlane/actions/version_get_podspec.rb +71 -0
  297. data/fastlane/lib/fastlane/actions/xcode_install.rb +105 -0
  298. data/fastlane/lib/fastlane/actions/xcode_select.rb +68 -0
  299. data/fastlane/lib/fastlane/actions/xcode_server_get_assets.rb +312 -0
  300. data/fastlane/lib/fastlane/actions/xcodebuild.rb +641 -0
  301. data/fastlane/lib/fastlane/actions/xcov.rb +66 -0
  302. data/fastlane/lib/fastlane/actions/xctool.rb +55 -0
  303. data/fastlane/lib/fastlane/actions/xcversion.rb +55 -0
  304. data/fastlane/lib/fastlane/actions/zip.rb +120 -0
  305. data/fastlane/lib/fastlane/auto_complete.rb +82 -0
  306. data/fastlane/lib/fastlane/boolean.rb +5 -0
  307. data/fastlane/lib/fastlane/cli_tools_distributor.rb +207 -0
  308. data/fastlane/lib/fastlane/command_line_handler.rb +49 -0
  309. data/fastlane/lib/fastlane/commands_generator.rb +369 -0
  310. data/fastlane/lib/fastlane/configuration_helper.rb +26 -0
  311. data/fastlane/lib/fastlane/core_ext/bundler_monkey_patch.rb +14 -0
  312. data/fastlane/lib/fastlane/documentation/actions_list.rb +214 -0
  313. data/fastlane/lib/fastlane/documentation/docs_generator.rb +89 -0
  314. data/fastlane/lib/fastlane/documentation/markdown_docs_generator.rb +228 -0
  315. data/fastlane/lib/fastlane/environment_printer.rb +303 -0
  316. data/fastlane/lib/fastlane/erb_template_helper.rb +30 -0
  317. data/fastlane/lib/fastlane/fast_file.rb +439 -0
  318. data/fastlane/lib/fastlane/fastlane_require.rb +75 -0
  319. data/fastlane/lib/fastlane/features.rb +4 -0
  320. data/fastlane/lib/fastlane/helper/README.md +29 -0
  321. data/fastlane/lib/fastlane/helper/adb_helper.rb +66 -0
  322. data/fastlane/lib/fastlane/helper/crashlytics_helper.rb +157 -0
  323. data/fastlane/lib/fastlane/helper/dotenv_helper.rb +50 -0
  324. data/fastlane/lib/fastlane/helper/gem_helper.rb +26 -0
  325. data/fastlane/lib/fastlane/helper/git_helper.rb +137 -0
  326. data/fastlane/lib/fastlane/helper/gradle_helper.rb +62 -0
  327. data/fastlane/lib/fastlane/helper/lane_helper.rb +13 -0
  328. data/fastlane/lib/fastlane/helper/podspec_helper.rb +75 -0
  329. data/fastlane/lib/fastlane/helper/s3_client_helper.rb +78 -0
  330. data/fastlane/lib/fastlane/helper/sh_helper.rb +134 -0
  331. data/fastlane/lib/fastlane/helper/xcodeproj_helper.rb +12 -0
  332. data/fastlane/lib/fastlane/helper/xcversion_helper.rb +25 -0
  333. data/fastlane/lib/fastlane/junit_generator.rb +27 -0
  334. data/fastlane/lib/fastlane/lane.rb +97 -0
  335. data/fastlane/lib/fastlane/lane_list.rb +137 -0
  336. data/fastlane/lib/fastlane/lane_manager.rb +130 -0
  337. data/fastlane/lib/fastlane/lane_manager_base.rb +92 -0
  338. data/fastlane/lib/fastlane/markdown_table_formatter.rb +62 -0
  339. data/fastlane/lib/fastlane/new_action.rb +47 -0
  340. data/fastlane/lib/fastlane/one_off.rb +45 -0
  341. data/fastlane/lib/fastlane/other_action.rb +29 -0
  342. data/fastlane/lib/fastlane/plugins/plugin_fetcher.rb +55 -0
  343. data/fastlane/lib/fastlane/plugins/plugin_generator.rb +86 -0
  344. data/fastlane/lib/fastlane/plugins/plugin_generator_ui.rb +19 -0
  345. data/fastlane/lib/fastlane/plugins/plugin_info.rb +49 -0
  346. data/fastlane/lib/fastlane/plugins/plugin_info_collector.rb +159 -0
  347. data/fastlane/lib/fastlane/plugins/plugin_manager.rb +399 -0
  348. data/fastlane/lib/fastlane/plugins/plugin_search.rb +46 -0
  349. data/fastlane/lib/fastlane/plugins/plugin_update_manager.rb +70 -0
  350. data/fastlane/lib/fastlane/plugins/plugins.rb +12 -0
  351. data/fastlane/lib/fastlane/plugins/template/%gem_name%.gemspec.erb +35 -0
  352. data/fastlane/lib/fastlane/plugins/template/.circleci/config.yml +43 -0
  353. data/fastlane/lib/fastlane/plugins/template/.github/workflows/test.yml +29 -0
  354. data/fastlane/lib/fastlane/plugins/template/.gitignore +12 -0
  355. data/fastlane/lib/fastlane/plugins/template/.rspec +5 -0
  356. data/fastlane/lib/fastlane/plugins/template/.rubocop.yml +188 -0
  357. data/fastlane/lib/fastlane/plugins/template/.travis.yml +4 -0
  358. data/fastlane/lib/fastlane/plugins/template/Gemfile +6 -0
  359. data/fastlane/lib/fastlane/plugins/template/LICENSE.erb +21 -0
  360. data/fastlane/lib/fastlane/plugins/template/README.md.erb +52 -0
  361. data/fastlane/lib/fastlane/plugins/template/Rakefile +9 -0
  362. data/fastlane/lib/fastlane/plugins/template/fastlane/Fastfile.erb +3 -0
  363. data/fastlane/lib/fastlane/plugins/template/fastlane/Pluginfile.erb +1 -0
  364. data/fastlane/lib/fastlane/plugins/template/lib/fastlane/plugin/%plugin_name%.rb.erb +16 -0
  365. data/fastlane/lib/fastlane/plugins/template/lib/fastlane/plugin/%plugin_name%/actions/%plugin_name%_action.rb.erb +47 -0
  366. data/fastlane/lib/fastlane/plugins/template/lib/fastlane/plugin/%plugin_name%/helper/%plugin_name%_helper.rb.erb +16 -0
  367. data/fastlane/lib/fastlane/plugins/template/lib/fastlane/plugin/%plugin_name%/version.rb.erb +5 -0
  368. data/fastlane/lib/fastlane/plugins/template/spec/%plugin_name%_action_spec.rb.erb +9 -0
  369. data/fastlane/lib/fastlane/plugins/template/spec/spec_helper.rb.erb +15 -0
  370. data/fastlane/lib/fastlane/runner.rb +378 -0
  371. data/fastlane/lib/fastlane/server/action_command.rb +61 -0
  372. data/fastlane/lib/fastlane/server/action_command_return.rb +14 -0
  373. data/fastlane/lib/fastlane/server/command_executor.rb +7 -0
  374. data/fastlane/lib/fastlane/server/command_parser.rb +44 -0
  375. data/fastlane/lib/fastlane/server/control_command.rb +23 -0
  376. data/fastlane/lib/fastlane/server/json_return_value_processor.rb +72 -0
  377. data/fastlane/lib/fastlane/server/socket_server.rb +238 -0
  378. data/fastlane/lib/fastlane/server/socket_server_action_command_executor.rb +101 -0
  379. data/fastlane/lib/fastlane/setup/setup.rb +355 -0
  380. data/fastlane/lib/fastlane/setup/setup_android.rb +97 -0
  381. data/fastlane/lib/fastlane/setup/setup_ios.rb +504 -0
  382. data/fastlane/lib/fastlane/shells.rb +6 -0
  383. data/fastlane/lib/fastlane/supported_platforms.rb +28 -0
  384. data/fastlane/lib/fastlane/swift_fastlane_api_generator.rb +477 -0
  385. data/fastlane/lib/fastlane/swift_fastlane_function.rb +419 -0
  386. data/fastlane/lib/fastlane/swift_lane_manager.rb +296 -0
  387. data/fastlane/lib/fastlane/swift_runner_upgrader.rb +210 -0
  388. data/fastlane/lib/fastlane/tools.rb +33 -0
  389. data/fastlane/lib/fastlane/version.rb +6 -0
  390. data/fastlane/swift/Actions.swift +16 -0
  391. data/fastlane/swift/Appfile.swift +15 -0
  392. data/fastlane/swift/ArgumentProcessor.swift +89 -0
  393. data/fastlane/swift/ControlCommand.swift +74 -0
  394. data/fastlane/swift/Deliverfile.swift +20 -0
  395. data/fastlane/swift/DeliverfileProtocol.swift +259 -0
  396. data/fastlane/swift/Fastfile.swift +16 -0
  397. data/fastlane/swift/Fastlane.swift +9402 -0
  398. data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.pbxproj +434 -0
  399. data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  400. data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  401. data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/xcshareddata/xcschemes/FastlaneRunner.xcscheme +97 -0
  402. data/fastlane/swift/FastlaneSwiftRunner/README.txt +10 -0
  403. data/fastlane/swift/Gymfile.swift +20 -0
  404. data/fastlane/swift/GymfileProtocol.swift +187 -0
  405. data/fastlane/swift/LaneFileProtocol.swift +149 -0
  406. data/fastlane/swift/MainProcess.swift +77 -0
  407. data/fastlane/swift/Matchfile.swift +20 -0
  408. data/fastlane/swift/MatchfileProtocol.swift +187 -0
  409. data/fastlane/swift/Plugins.swift +16 -0
  410. data/fastlane/swift/Precheckfile.swift +20 -0
  411. data/fastlane/swift/PrecheckfileProtocol.swift +51 -0
  412. data/fastlane/swift/RubyCommand.swift +157 -0
  413. data/fastlane/swift/RubyCommandable.swift +43 -0
  414. data/fastlane/swift/Runner.swift +275 -0
  415. data/fastlane/swift/RunnerArgument.swift +20 -0
  416. data/fastlane/swift/Scanfile.swift +20 -0
  417. data/fastlane/swift/ScanfileProtocol.swift +263 -0
  418. data/fastlane/swift/Screengrabfile.swift +20 -0
  419. data/fastlane/swift/ScreengrabfileProtocol.swift +99 -0
  420. data/fastlane/swift/Snapshotfile.swift +20 -0
  421. data/fastlane/swift/SnapshotfileProtocol.swift +187 -0
  422. data/fastlane/swift/SocketClient.swift +327 -0
  423. data/fastlane/swift/SocketClientDelegateProtocol.swift +21 -0
  424. data/fastlane/swift/SocketResponse.swift +82 -0
  425. data/fastlane/swift/formatting/Brewfile +1 -0
  426. data/fastlane/swift/formatting/Brewfile.lock.json +47 -0
  427. data/fastlane/swift/formatting/Rakefile +18 -0
  428. data/fastlane/swift/main.swift +47 -0
  429. data/fastlane/swift/upgrade_manifest.json +1 -0
  430. data/fastlane_core/README.md +79 -0
  431. data/fastlane_core/lib/assets/XMLTemplate.xml.erb +12 -0
  432. data/fastlane_core/lib/fastlane_core.rb +46 -0
  433. data/fastlane_core/lib/fastlane_core/analytics/action_completion_context.rb +34 -0
  434. data/fastlane_core/lib/fastlane_core/analytics/action_launch_context.rb +38 -0
  435. data/fastlane_core/lib/fastlane_core/analytics/analytics_event_builder.rb +23 -0
  436. data/fastlane_core/lib/fastlane_core/analytics/analytics_ingester_client.rb +54 -0
  437. data/fastlane_core/lib/fastlane_core/analytics/analytics_session.rb +70 -0
  438. data/fastlane_core/lib/fastlane_core/analytics/app_identifier_guesser.rb +64 -0
  439. data/fastlane_core/lib/fastlane_core/android_package_name_guesser.rb +79 -0
  440. data/fastlane_core/lib/fastlane_core/build_watcher.rb +96 -0
  441. data/fastlane_core/lib/fastlane_core/cert_checker.rb +144 -0
  442. data/fastlane_core/lib/fastlane_core/command_executor.rb +100 -0
  443. data/fastlane_core/lib/fastlane_core/configuration/commander_generator.rb +103 -0
  444. data/fastlane_core/lib/fastlane_core/configuration/config_item.rb +321 -0
  445. data/fastlane_core/lib/fastlane_core/configuration/configuration.rb +332 -0
  446. data/fastlane_core/lib/fastlane_core/configuration/configuration_file.rb +182 -0
  447. data/fastlane_core/lib/fastlane_core/core_ext/cfpropertylist.rb +23 -0
  448. data/fastlane_core/lib/fastlane_core/core_ext/shellwords.rb +63 -0
  449. data/fastlane_core/lib/fastlane_core/core_ext/string.rb +17 -0
  450. data/fastlane_core/lib/fastlane_core/device_manager.rb +374 -0
  451. data/fastlane_core/lib/fastlane_core/env.rb +9 -0
  452. data/fastlane_core/lib/fastlane_core/fastlane_folder.rb +72 -0
  453. data/fastlane_core/lib/fastlane_core/fastlane_pty.rb +57 -0
  454. data/fastlane_core/lib/fastlane_core/feature/feature.rb +51 -0
  455. data/fastlane_core/lib/fastlane_core/features.rb +4 -0
  456. data/fastlane_core/lib/fastlane_core/globals.rb +27 -0
  457. data/fastlane_core/lib/fastlane_core/helper.rb +437 -0
  458. data/fastlane_core/lib/fastlane_core/ios_app_identifier_guesser.rb +112 -0
  459. data/fastlane_core/lib/fastlane_core/ipa_file_analyser.rb +63 -0
  460. data/fastlane_core/lib/fastlane_core/ipa_upload_package_builder.rb +52 -0
  461. data/fastlane_core/lib/fastlane_core/itunes_transporter.rb +595 -0
  462. data/fastlane_core/lib/fastlane_core/keychain_importer.rb +120 -0
  463. data/fastlane_core/lib/fastlane_core/languages.rb +16 -0
  464. data/fastlane_core/lib/fastlane_core/module.rb +31 -0
  465. data/fastlane_core/lib/fastlane_core/pkg_file_analyser.rb +51 -0
  466. data/fastlane_core/lib/fastlane_core/pkg_upload_package_builder.rb +48 -0
  467. data/fastlane_core/lib/fastlane_core/print_table.rb +131 -0
  468. data/fastlane_core/lib/fastlane_core/project.rb +509 -0
  469. data/fastlane_core/lib/fastlane_core/provisioning_profile.rb +124 -0
  470. data/fastlane_core/lib/fastlane_core/string_filters.rb +51 -0
  471. data/fastlane_core/lib/fastlane_core/swag.rb +85 -0
  472. data/fastlane_core/lib/fastlane_core/tag_version.rb +31 -0
  473. data/fastlane_core/lib/fastlane_core/test_parser.rb +107 -0
  474. data/fastlane_core/lib/fastlane_core/ui/disable_colors.rb +17 -0
  475. data/fastlane_core/lib/fastlane_core/ui/errors.rb +1 -0
  476. data/fastlane_core/lib/fastlane_core/ui/errors/fastlane_common_error.rb +19 -0
  477. data/fastlane_core/lib/fastlane_core/ui/errors/fastlane_crash.rb +11 -0
  478. data/fastlane_core/lib/fastlane_core/ui/errors/fastlane_error.rb +25 -0
  479. data/fastlane_core/lib/fastlane_core/ui/errors/fastlane_exception.rb +19 -0
  480. data/fastlane_core/lib/fastlane_core/ui/errors/fastlane_shell_error.rb +11 -0
  481. data/fastlane_core/lib/fastlane_core/ui/fastlane_runner.rb +294 -0
  482. data/fastlane_core/lib/fastlane_core/ui/github_issue_inspector_reporter.rb +62 -0
  483. data/fastlane_core/lib/fastlane_core/ui/implementations/shell.rb +159 -0
  484. data/fastlane_core/lib/fastlane_core/ui/interface.rb +205 -0
  485. data/fastlane_core/lib/fastlane_core/ui/ui.rb +26 -0
  486. data/fastlane_core/lib/fastlane_core/update_checker/changelog.rb +37 -0
  487. data/fastlane_core/lib/fastlane_core/update_checker/update_checker.rb +109 -0
  488. data/frameit/README.md +17 -0
  489. data/frameit/lib/assets/empty.png +0 -0
  490. data/frameit/lib/frameit.rb +13 -0
  491. data/frameit/lib/frameit/commands_generator.rb +140 -0
  492. data/frameit/lib/frameit/config_parser.rb +136 -0
  493. data/frameit/lib/frameit/dependency_checker.rb +22 -0
  494. data/frameit/lib/frameit/device.rb +90 -0
  495. data/frameit/lib/frameit/device_types.rb +144 -0
  496. data/frameit/lib/frameit/editor.rb +560 -0
  497. data/frameit/lib/frameit/frame_downloader.rb +85 -0
  498. data/frameit/lib/frameit/mac_editor.rb +35 -0
  499. data/frameit/lib/frameit/module.rb +42 -0
  500. data/frameit/lib/frameit/offsets.rb +28 -0
  501. data/frameit/lib/frameit/options.rb +112 -0
  502. data/frameit/lib/frameit/runner.rb +97 -0
  503. data/frameit/lib/frameit/screenshot.rb +134 -0
  504. data/frameit/lib/frameit/strings_parser.rb +46 -0
  505. data/frameit/lib/frameit/template_finder.rb +45 -0
  506. data/frameit/lib/frameit/trim_box.rb +35 -0
  507. data/gym/README.md +17 -0
  508. data/gym/lib/assets/GymfileTemplate +13 -0
  509. data/gym/lib/assets/GymfileTemplate.swift +13 -0
  510. data/gym/lib/assets/wrap_xcodebuild/xcbuild-safe.sh +61 -0
  511. data/gym/lib/gym.rb +9 -0
  512. data/gym/lib/gym/code_signing_mapping.rb +210 -0
  513. data/gym/lib/gym/commands_generator.rb +78 -0
  514. data/gym/lib/gym/detect_values.rb +206 -0
  515. data/gym/lib/gym/error_handler.rb +306 -0
  516. data/gym/lib/gym/generators/README.md +1 -0
  517. data/gym/lib/gym/generators/build_command_generator.rb +147 -0
  518. data/gym/lib/gym/generators/package_command_generator.rb +68 -0
  519. data/gym/lib/gym/generators/package_command_generator_xcode7.rb +232 -0
  520. data/gym/lib/gym/manager.rb +22 -0
  521. data/gym/lib/gym/module.rb +74 -0
  522. data/gym/lib/gym/options.rb +286 -0
  523. data/gym/lib/gym/runner.rb +365 -0
  524. data/gym/lib/gym/xcode.rb +27 -0
  525. data/gym/lib/gym/xcodebuild_fixes/README.md +9 -0
  526. data/gym/lib/gym/xcodebuild_fixes/generic_archive_fix.rb +35 -0
  527. data/match/README.md +17 -0
  528. data/match/lib/assets/MatchfileTemplate +11 -0
  529. data/match/lib/assets/MatchfileTemplate.swift +9 -0
  530. data/match/lib/assets/READMETemplate.md +59 -0
  531. data/match/lib/match.rb +14 -0
  532. data/match/lib/match/change_password.rb +53 -0
  533. data/match/lib/match/commands_generator.rb +190 -0
  534. data/match/lib/match/encryption.rb +49 -0
  535. data/match/lib/match/encryption/interface.rb +17 -0
  536. data/match/lib/match/encryption/openssl.rb +161 -0
  537. data/match/lib/match/generator.rb +122 -0
  538. data/match/lib/match/importer.rb +157 -0
  539. data/match/lib/match/migrate.rb +109 -0
  540. data/match/lib/match/module.rb +32 -0
  541. data/match/lib/match/nuke.rb +350 -0
  542. data/match/lib/match/options.rb +315 -0
  543. data/match/lib/match/runner.rb +369 -0
  544. data/match/lib/match/setup.rb +40 -0
  545. data/match/lib/match/spaceship_ensure.rb +97 -0
  546. data/match/lib/match/storage.rb +46 -0
  547. data/match/lib/match/storage/git_storage.rb +250 -0
  548. data/match/lib/match/storage/google_cloud_storage.rb +382 -0
  549. data/match/lib/match/storage/interface.rb +119 -0
  550. data/match/lib/match/storage/s3_storage.rb +205 -0
  551. data/match/lib/match/table_printer.rb +51 -0
  552. data/match/lib/match/utils.rb +75 -0
  553. data/pem/README.md +17 -0
  554. data/pem/lib/pem.rb +4 -0
  555. data/pem/lib/pem/commands_generator.rb +47 -0
  556. data/pem/lib/pem/manager.rb +112 -0
  557. data/pem/lib/pem/module.rb +19 -0
  558. data/pem/lib/pem/options.rb +103 -0
  559. data/pilot/README.md +17 -0
  560. data/pilot/lib/pilot.rb +9 -0
  561. data/pilot/lib/pilot/build_manager.rb +546 -0
  562. data/pilot/lib/pilot/commands_generator.rb +174 -0
  563. data/pilot/lib/pilot/features.rb +0 -0
  564. data/pilot/lib/pilot/manager.rb +90 -0
  565. data/pilot/lib/pilot/module.rb +11 -0
  566. data/pilot/lib/pilot/options.rb +303 -0
  567. data/pilot/lib/pilot/tester_exporter.rb +58 -0
  568. data/pilot/lib/pilot/tester_importer.rb +53 -0
  569. data/pilot/lib/pilot/tester_manager.rb +168 -0
  570. data/pilot/lib/pilot/tester_util.rb +0 -0
  571. data/precheck/README.md +17 -0
  572. data/precheck/lib/assets/PrecheckfileTemplate +27 -0
  573. data/precheck/lib/assets/PrecheckfileTemplate.swift +19 -0
  574. data/precheck/lib/precheck.rb +3 -0
  575. data/precheck/lib/precheck/commands_generator.rb +74 -0
  576. data/precheck/lib/precheck/item_to_check.rb +58 -0
  577. data/precheck/lib/precheck/module.rb +21 -0
  578. data/precheck/lib/precheck/options.rb +104 -0
  579. data/precheck/lib/precheck/rule.rb +171 -0
  580. data/precheck/lib/precheck/rule_check_result.rb +19 -0
  581. data/precheck/lib/precheck/rule_processor.rb +265 -0
  582. data/precheck/lib/precheck/rules/abstract_text_match_rule.rb +80 -0
  583. data/precheck/lib/precheck/rules/all.rb +1 -0
  584. data/precheck/lib/precheck/rules/copyright_date_rule.rb +37 -0
  585. data/precheck/lib/precheck/rules/curse_words_rule.rb +62 -0
  586. data/precheck/lib/precheck/rules/custom_text_rule.rb +35 -0
  587. data/precheck/lib/precheck/rules/free_stuff_iap_rule.rb +31 -0
  588. data/precheck/lib/precheck/rules/future_functionality_rule.rb +33 -0
  589. data/precheck/lib/precheck/rules/negative_apple_sentiment_rule.rb +37 -0
  590. data/precheck/lib/precheck/rules/other_platforms_rule.rb +43 -0
  591. data/precheck/lib/precheck/rules/placeholder_words_rule.rb +31 -0
  592. data/precheck/lib/precheck/rules/rules_data/curse_word_hashes/en_us.txt +349 -0
  593. data/precheck/lib/precheck/rules/test_words_rule.rb +30 -0
  594. data/precheck/lib/precheck/rules/unreachable_urls_rule.rb +47 -0
  595. data/precheck/lib/precheck/runner.rb +197 -0
  596. data/produce/README.md +17 -0
  597. data/produce/lib/produce.rb +6 -0
  598. data/produce/lib/produce/available_default_languages.rb +51 -0
  599. data/produce/lib/produce/cloud_container.rb +82 -0
  600. data/produce/lib/produce/commands_generator.rb +236 -0
  601. data/produce/lib/produce/developer_center.rb +143 -0
  602. data/produce/lib/produce/group.rb +90 -0
  603. data/produce/lib/produce/itunes_connect.rb +139 -0
  604. data/produce/lib/produce/manager.rb +15 -0
  605. data/produce/lib/produce/merchant.rb +121 -0
  606. data/produce/lib/produce/module.rb +14 -0
  607. data/produce/lib/produce/options.rb +184 -0
  608. data/produce/lib/produce/service.rb +319 -0
  609. data/scan/README.md +17 -0
  610. data/scan/lib/assets/ScanfileTemplate +16 -0
  611. data/scan/lib/assets/ScanfileTemplate.swift +13 -0
  612. data/scan/lib/scan.rb +10 -0
  613. data/scan/lib/scan/commands_generator.rb +78 -0
  614. data/scan/lib/scan/detect_values.rb +224 -0
  615. data/scan/lib/scan/error_handler.rb +57 -0
  616. data/scan/lib/scan/manager.rb +38 -0
  617. data/scan/lib/scan/module.rb +32 -0
  618. data/scan/lib/scan/options.rb +445 -0
  619. data/scan/lib/scan/runner.rb +197 -0
  620. data/scan/lib/scan/slack_poster.rb +60 -0
  621. data/scan/lib/scan/test_command_generator.rb +174 -0
  622. data/scan/lib/scan/test_result_parser.rb +33 -0
  623. data/scan/lib/scan/xcpretty_reporter_options_generator.rb +85 -0
  624. data/screengrab/README.md +17 -0
  625. data/screengrab/lib/assets/ScreengrabfileTemplate +15 -0
  626. data/screengrab/lib/assets/ScreengrabfileTemplate.swift +15 -0
  627. data/screengrab/lib/screengrab.rb +7 -0
  628. data/screengrab/lib/screengrab/android_environment.rb +91 -0
  629. data/screengrab/lib/screengrab/commands_generator.rb +70 -0
  630. data/screengrab/lib/screengrab/dependency_checker.rb +58 -0
  631. data/screengrab/lib/screengrab/detect_values.rb +16 -0
  632. data/screengrab/lib/screengrab/module.rb +26 -0
  633. data/screengrab/lib/screengrab/options.rb +148 -0
  634. data/screengrab/lib/screengrab/page.html.erb +190 -0
  635. data/screengrab/lib/screengrab/reports_generator.rb +36 -0
  636. data/screengrab/lib/screengrab/runner.rb +449 -0
  637. data/screengrab/lib/screengrab/setup.rb +24 -0
  638. data/sigh/README.md +17 -0
  639. data/sigh/lib/assets/resign.sh +909 -0
  640. data/sigh/lib/sigh.rb +4 -0
  641. data/sigh/lib/sigh/commands_generator.rb +154 -0
  642. data/sigh/lib/sigh/download_all.rb +112 -0
  643. data/sigh/lib/sigh/local_manage.rb +145 -0
  644. data/sigh/lib/sigh/manager.rb +47 -0
  645. data/sigh/lib/sigh/module.rb +42 -0
  646. data/sigh/lib/sigh/options.rb +187 -0
  647. data/sigh/lib/sigh/repair.rb +34 -0
  648. data/sigh/lib/sigh/resign.rb +220 -0
  649. data/sigh/lib/sigh/runner.rb +402 -0
  650. data/snapshot/README.md +17 -0
  651. data/snapshot/lib/assets/SnapfileTemplate +37 -0
  652. data/snapshot/lib/assets/SnapfileTemplate.swift +41 -0
  653. data/snapshot/lib/assets/SnapshotHelper.swift +301 -0
  654. data/snapshot/lib/assets/SnapshotHelperXcode8.swift +172 -0
  655. data/snapshot/lib/snapshot.rb +19 -0
  656. data/snapshot/lib/snapshot/collector.rb +140 -0
  657. data/snapshot/lib/snapshot/commands_generator.rb +115 -0
  658. data/snapshot/lib/snapshot/dependency_checker.rb +69 -0
  659. data/snapshot/lib/snapshot/detect_values.rb +86 -0
  660. data/snapshot/lib/snapshot/error_handler.rb +24 -0
  661. data/snapshot/lib/snapshot/fixes/README.md +5 -0
  662. data/snapshot/lib/snapshot/fixes/hardware_keyboard_fix.rb +27 -0
  663. data/snapshot/lib/snapshot/fixes/simulator_shared_pasteboard.rb +16 -0
  664. data/snapshot/lib/snapshot/fixes/simulator_zoom_fix.rb +27 -0
  665. data/snapshot/lib/snapshot/latest_os_version.rb +34 -0
  666. data/snapshot/lib/snapshot/module.rb +44 -0
  667. data/snapshot/lib/snapshot/options.rb +290 -0
  668. data/snapshot/lib/snapshot/page.html.erb +285 -0
  669. data/snapshot/lib/snapshot/reports_generator.rb +139 -0
  670. data/snapshot/lib/snapshot/reset_simulators.rb +122 -0
  671. data/snapshot/lib/snapshot/runner.rb +146 -0
  672. data/snapshot/lib/snapshot/screenshot_flatten.rb +20 -0
  673. data/snapshot/lib/snapshot/screenshot_rotate.rb +36 -0
  674. data/snapshot/lib/snapshot/setup.rb +58 -0
  675. data/snapshot/lib/snapshot/simulator_launchers/launcher_configuration.rb +62 -0
  676. data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher.rb +219 -0
  677. data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher_base.rb +200 -0
  678. data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher_xcode_8.rb +113 -0
  679. data/snapshot/lib/snapshot/test_command_generator.rb +108 -0
  680. data/snapshot/lib/snapshot/test_command_generator_base.rb +128 -0
  681. data/snapshot/lib/snapshot/test_command_generator_xcode_8.rb +70 -0
  682. data/snapshot/lib/snapshot/update.rb +38 -0
  683. data/spaceship/README.md +183 -0
  684. data/spaceship/lib/assets/displayFamilies.json +181 -0
  685. data/spaceship/lib/assets/languageMapping.json +306 -0
  686. data/spaceship/lib/assets/languageMappingReadable.json +30 -0
  687. data/spaceship/lib/spaceship.rb +30 -0
  688. data/spaceship/lib/spaceship/base.rb +310 -0
  689. data/spaceship/lib/spaceship/client.rb +913 -0
  690. data/spaceship/lib/spaceship/commands_generator.rb +53 -0
  691. data/spaceship/lib/spaceship/connect_api.rb +116 -0
  692. data/spaceship/lib/spaceship/connect_api/api_client.rb +279 -0
  693. data/spaceship/lib/spaceship/connect_api/client.rb +216 -0
  694. data/spaceship/lib/spaceship/connect_api/file_uploader.rb +99 -0
  695. data/spaceship/lib/spaceship/connect_api/model.rb +172 -0
  696. data/spaceship/lib/spaceship/connect_api/models/age_rating_declaration.rb +114 -0
  697. data/spaceship/lib/spaceship/connect_api/models/app.rb +388 -0
  698. data/spaceship/lib/spaceship/connect_api/models/app_category.rb +94 -0
  699. data/spaceship/lib/spaceship/connect_api/models/app_info.rb +95 -0
  700. data/spaceship/lib/spaceship/connect_api/models/app_info_localization.rb +39 -0
  701. data/spaceship/lib/spaceship/connect_api/models/app_preview.rb +131 -0
  702. data/spaceship/lib/spaceship/connect_api/models/app_preview_set.rb +100 -0
  703. data/spaceship/lib/spaceship/connect_api/models/app_price.rb +22 -0
  704. data/spaceship/lib/spaceship/connect_api/models/app_price_point.rb +26 -0
  705. data/spaceship/lib/spaceship/connect_api/models/app_price_tier.rb +12 -0
  706. data/spaceship/lib/spaceship/connect_api/models/app_screenshot.rb +187 -0
  707. data/spaceship/lib/spaceship/connect_api/models/app_screenshot_set.rb +153 -0
  708. data/spaceship/lib/spaceship/connect_api/models/app_store_review_attachment.rb +71 -0
  709. data/spaceship/lib/spaceship/connect_api/models/app_store_review_detail.rb +51 -0
  710. data/spaceship/lib/spaceship/connect_api/models/app_store_version.rb +217 -0
  711. data/spaceship/lib/spaceship/connect_api/models/app_store_version_localization.rb +85 -0
  712. data/spaceship/lib/spaceship/connect_api/models/app_store_version_phased_release.rb +57 -0
  713. data/spaceship/lib/spaceship/connect_api/models/app_store_version_release_request.rb +12 -0
  714. data/spaceship/lib/spaceship/connect_api/models/app_store_version_submission.rb +26 -0
  715. data/spaceship/lib/spaceship/connect_api/models/beta_app_localization.rb +28 -0
  716. data/spaceship/lib/spaceship/connect_api/models/beta_app_review_detail.rb +32 -0
  717. data/spaceship/lib/spaceship/connect_api/models/beta_app_review_submission.rb +26 -0
  718. data/spaceship/lib/spaceship/connect_api/models/beta_build_localization.rb +20 -0
  719. data/spaceship/lib/spaceship/connect_api/models/beta_build_metric.rb +24 -0
  720. data/spaceship/lib/spaceship/connect_api/models/beta_feedback.rb +75 -0
  721. data/spaceship/lib/spaceship/connect_api/models/beta_group.rb +41 -0
  722. data/spaceship/lib/spaceship/connect_api/models/beta_screenshot.rb +18 -0
  723. data/spaceship/lib/spaceship/connect_api/models/beta_tester.rb +57 -0
  724. data/spaceship/lib/spaceship/connect_api/models/beta_tester_metric.rb +44 -0
  725. data/spaceship/lib/spaceship/connect_api/models/build.rb +172 -0
  726. data/spaceship/lib/spaceship/connect_api/models/build_beta_detail.rb +61 -0
  727. data/spaceship/lib/spaceship/connect_api/models/build_delivery.rb +36 -0
  728. data/spaceship/lib/spaceship/connect_api/models/bundle_id.rb +58 -0
  729. data/spaceship/lib/spaceship/connect_api/models/bundle_id_capability.rb +71 -0
  730. data/spaceship/lib/spaceship/connect_api/models/certificate.rb +102 -0
  731. data/spaceship/lib/spaceship/connect_api/models/custom_app_organization.rb +43 -0
  732. data/spaceship/lib/spaceship/connect_api/models/custom_app_user.rb +41 -0
  733. data/spaceship/lib/spaceship/connect_api/models/device.rb +58 -0
  734. data/spaceship/lib/spaceship/connect_api/models/idfa_declaration.rb +41 -0
  735. data/spaceship/lib/spaceship/connect_api/models/pre_release_version.rb +20 -0
  736. data/spaceship/lib/spaceship/connect_api/models/profile.rb +97 -0
  737. data/spaceship/lib/spaceship/connect_api/models/reset_ratings_request.rb +26 -0
  738. data/spaceship/lib/spaceship/connect_api/models/sandbox_tester.rb +64 -0
  739. data/spaceship/lib/spaceship/connect_api/models/territory.rb +27 -0
  740. data/spaceship/lib/spaceship/connect_api/models/user.rb +51 -0
  741. data/spaceship/lib/spaceship/connect_api/models/user_invitation.rb +59 -0
  742. data/spaceship/lib/spaceship/connect_api/provisioning/client.rb +92 -0
  743. data/spaceship/lib/spaceship/connect_api/provisioning/provisioning.rb +143 -0
  744. data/spaceship/lib/spaceship/connect_api/response.rb +67 -0
  745. data/spaceship/lib/spaceship/connect_api/spaceship.rb +102 -0
  746. data/spaceship/lib/spaceship/connect_api/testflight/client.rb +24 -0
  747. data/spaceship/lib/spaceship/connect_api/testflight/testflight.rb +391 -0
  748. data/spaceship/lib/spaceship/connect_api/token.rb +102 -0
  749. data/spaceship/lib/spaceship/connect_api/token_refresh_middleware.rb +24 -0
  750. data/spaceship/lib/spaceship/connect_api/tunes/client.rb +24 -0
  751. data/spaceship/lib/spaceship/connect_api/tunes/tunes.rb +1045 -0
  752. data/spaceship/lib/spaceship/connect_api/users/client.rb +24 -0
  753. data/spaceship/lib/spaceship/connect_api/users/users.rb +80 -0
  754. data/spaceship/lib/spaceship/du/du_client.rb +138 -0
  755. data/spaceship/lib/spaceship/du/upload_file.rb +58 -0
  756. data/spaceship/lib/spaceship/du/utilities.rb +99 -0
  757. data/spaceship/lib/spaceship/errors.rb +82 -0
  758. data/spaceship/lib/spaceship/globals.rb +12 -0
  759. data/spaceship/lib/spaceship/helper/net_http_generic_request.rb +20 -0
  760. data/spaceship/lib/spaceship/helper/plist_middleware.rb +16 -0
  761. data/spaceship/lib/spaceship/helper/rels_middleware.rb +28 -0
  762. data/spaceship/lib/spaceship/launcher.rb +99 -0
  763. data/spaceship/lib/spaceship/module.rb +8 -0
  764. data/spaceship/lib/spaceship/playground.rb +75 -0
  765. data/spaceship/lib/spaceship/portal/app.rb +201 -0
  766. data/spaceship/lib/spaceship/portal/app_group.rb +73 -0
  767. data/spaceship/lib/spaceship/portal/app_service.rb +87 -0
  768. data/spaceship/lib/spaceship/portal/certificate.rb +365 -0
  769. data/spaceship/lib/spaceship/portal/cloud_container.rb +74 -0
  770. data/spaceship/lib/spaceship/portal/device.rb +191 -0
  771. data/spaceship/lib/spaceship/portal/invite.rb +53 -0
  772. data/spaceship/lib/spaceship/portal/key.rb +101 -0
  773. data/spaceship/lib/spaceship/portal/legacy_wrapper.rb +21 -0
  774. data/spaceship/lib/spaceship/portal/merchant.rb +86 -0
  775. data/spaceship/lib/spaceship/portal/passbook.rb +78 -0
  776. data/spaceship/lib/spaceship/portal/person.rb +62 -0
  777. data/spaceship/lib/spaceship/portal/persons.rb +67 -0
  778. data/spaceship/lib/spaceship/portal/portal.rb +17 -0
  779. data/spaceship/lib/spaceship/portal/portal_base.rb +16 -0
  780. data/spaceship/lib/spaceship/portal/portal_client.rb +862 -0
  781. data/spaceship/lib/spaceship/portal/provisioning_profile.rb +559 -0
  782. data/spaceship/lib/spaceship/portal/provisioning_profile_template.rb +52 -0
  783. data/spaceship/lib/spaceship/portal/spaceship.rb +154 -0
  784. data/spaceship/lib/spaceship/portal/ui/select_team.rb +116 -0
  785. data/spaceship/lib/spaceship/portal/website_push.rb +88 -0
  786. data/spaceship/lib/spaceship/provider.rb +13 -0
  787. data/spaceship/lib/spaceship/spaceauth_runner.rb +74 -0
  788. data/spaceship/lib/spaceship/stats_middleware.rb +65 -0
  789. data/spaceship/lib/spaceship/test_flight.rb +10 -0
  790. data/spaceship/lib/spaceship/test_flight/app_test_info.rb +40 -0
  791. data/spaceship/lib/spaceship/test_flight/base.rb +39 -0
  792. data/spaceship/lib/spaceship/test_flight/beta_review_info.rb +19 -0
  793. data/spaceship/lib/spaceship/test_flight/build.rb +242 -0
  794. data/spaceship/lib/spaceship/test_flight/build_trains.rb +50 -0
  795. data/spaceship/lib/spaceship/test_flight/client.rb +361 -0
  796. data/spaceship/lib/spaceship/test_flight/export_compliance.rb +12 -0
  797. data/spaceship/lib/spaceship/test_flight/group.rb +131 -0
  798. data/spaceship/lib/spaceship/test_flight/test_info.rb +56 -0
  799. data/spaceship/lib/spaceship/test_flight/tester.rb +136 -0
  800. data/spaceship/lib/spaceship/tunes/app_analytics.rb +168 -0
  801. data/spaceship/lib/spaceship/tunes/app_details.rb +147 -0
  802. data/spaceship/lib/spaceship/tunes/app_image.rb +51 -0
  803. data/spaceship/lib/spaceship/tunes/app_ratings.rb +58 -0
  804. data/spaceship/lib/spaceship/tunes/app_review.rb +55 -0
  805. data/spaceship/lib/spaceship/tunes/app_review_attachment.rb +49 -0
  806. data/spaceship/lib/spaceship/tunes/app_screenshot.rb +12 -0
  807. data/spaceship/lib/spaceship/tunes/app_status.rb +63 -0
  808. data/spaceship/lib/spaceship/tunes/app_submission.rb +161 -0
  809. data/spaceship/lib/spaceship/tunes/app_trailer.rb +64 -0
  810. data/spaceship/lib/spaceship/tunes/app_version.rb +970 -0
  811. data/spaceship/lib/spaceship/tunes/app_version_common.rb +35 -0
  812. data/spaceship/lib/spaceship/tunes/app_version_generated_promocodes.rb +28 -0
  813. data/spaceship/lib/spaceship/tunes/app_version_history.rb +52 -0
  814. data/spaceship/lib/spaceship/tunes/app_version_promocodes.rb +27 -0
  815. data/spaceship/lib/spaceship/tunes/app_version_ref.rb +15 -0
  816. data/spaceship/lib/spaceship/tunes/app_version_states_history.rb +27 -0
  817. data/spaceship/lib/spaceship/tunes/application.rb +453 -0
  818. data/spaceship/lib/spaceship/tunes/availability.rb +164 -0
  819. data/spaceship/lib/spaceship/tunes/b2b_organization.rb +50 -0
  820. data/spaceship/lib/spaceship/tunes/b2b_user.rb +30 -0
  821. data/spaceship/lib/spaceship/tunes/build.rb +263 -0
  822. data/spaceship/lib/spaceship/tunes/build_details.rb +184 -0
  823. data/spaceship/lib/spaceship/tunes/build_train.rb +181 -0
  824. data/spaceship/lib/spaceship/tunes/developer_response.rb +23 -0
  825. data/spaceship/lib/spaceship/tunes/device_type.rb +17 -0
  826. data/spaceship/lib/spaceship/tunes/display_family.rb +84 -0
  827. data/spaceship/lib/spaceship/tunes/errors.rb +17 -0
  828. data/spaceship/lib/spaceship/tunes/iap.rb +168 -0
  829. data/spaceship/lib/spaceship/tunes/iap_detail.rb +264 -0
  830. data/spaceship/lib/spaceship/tunes/iap_families.rb +68 -0
  831. data/spaceship/lib/spaceship/tunes/iap_family_details.rb +90 -0
  832. data/spaceship/lib/spaceship/tunes/iap_family_list.rb +28 -0
  833. data/spaceship/lib/spaceship/tunes/iap_list.rb +76 -0
  834. data/spaceship/lib/spaceship/tunes/iap_status.rb +56 -0
  835. data/spaceship/lib/spaceship/tunes/iap_subscription_pricing_info.rb +46 -0
  836. data/spaceship/lib/spaceship/tunes/iap_subscription_pricing_tier.rb +25 -0
  837. data/spaceship/lib/spaceship/tunes/iap_type.rb +45 -0
  838. data/spaceship/lib/spaceship/tunes/language_converter.rb +65 -0
  839. data/spaceship/lib/spaceship/tunes/language_item.rb +61 -0
  840. data/spaceship/lib/spaceship/tunes/legacy_wrapper.rb +13 -0
  841. data/spaceship/lib/spaceship/tunes/member.rb +84 -0
  842. data/spaceship/lib/spaceship/tunes/members.rb +35 -0
  843. data/spaceship/lib/spaceship/tunes/pricing_info.rb +42 -0
  844. data/spaceship/lib/spaceship/tunes/pricing_tier.rb +25 -0
  845. data/spaceship/lib/spaceship/tunes/sandbox_tester.rb +74 -0
  846. data/spaceship/lib/spaceship/tunes/spaceship.rb +39 -0
  847. data/spaceship/lib/spaceship/tunes/territory.rb +39 -0
  848. data/spaceship/lib/spaceship/tunes/transit_app_file.rb +23 -0
  849. data/spaceship/lib/spaceship/tunes/tunes.rb +35 -0
  850. data/spaceship/lib/spaceship/tunes/tunes_base.rb +17 -0
  851. data/spaceship/lib/spaceship/tunes/tunes_client.rb +1644 -0
  852. data/spaceship/lib/spaceship/tunes/user_detail.rb +15 -0
  853. data/spaceship/lib/spaceship/tunes/version_set.rb +26 -0
  854. data/spaceship/lib/spaceship/two_step_or_factor_client.rb +346 -0
  855. data/spaceship/lib/spaceship/ui.rb +27 -0
  856. data/supply/README.md +17 -0
  857. data/supply/lib/supply.rb +53 -0
  858. data/supply/lib/supply/apk_listing.rb +14 -0
  859. data/supply/lib/supply/client.rb +551 -0
  860. data/supply/lib/supply/commands_generator.rb +67 -0
  861. data/supply/lib/supply/languages.rb +88 -0
  862. data/supply/lib/supply/listing.rb +32 -0
  863. data/supply/lib/supply/options.rb +324 -0
  864. data/supply/lib/supply/reader.rb +41 -0
  865. data/supply/lib/supply/release_listing.rb +18 -0
  866. data/supply/lib/supply/setup.rb +122 -0
  867. data/supply/lib/supply/uploader.rb +480 -0
  868. metadata +1832 -0
@@ -0,0 +1,78 @@
1
+ require_relative 'portal_base'
2
+
3
+ module Spaceship
4
+ module Portal
5
+ # Represents an Passbook ID from the Developer Portal
6
+ class Passbook < PortalBase
7
+ # @return (String) The identifier of this passbook, provided by the Dev Portal
8
+ # @example
9
+ # "RGAWZGXSAA"
10
+ attr_accessor :passbook_id
11
+
12
+ # @return (String) The name you provided for this passbook
13
+ # @example
14
+ # "Spaceship"
15
+ attr_accessor :name
16
+
17
+ # @return (String) the supported platform of this passbook
18
+ # @example
19
+ # "ios"
20
+ attr_accessor :platform
21
+
22
+ # Prefix provided by the Dev Portal
23
+ # @example
24
+ # "5A997XSHK2"
25
+ attr_accessor :prefix
26
+
27
+ # @return (String) The bundle_id (passbook) of passbook id
28
+ # @example
29
+ # "web.com.krausefx.app"
30
+ attr_accessor :bundle_id
31
+
32
+ # @return (String) Status of the passbook
33
+ # @example
34
+ # "current"
35
+ attr_accessor :status
36
+
37
+ attr_mapping(
38
+ 'passTypeId' => :passbook_id,
39
+ 'name' => :name,
40
+ 'prefix' => :prefix,
41
+ 'identifier' => :bundle_id,
42
+ 'status' => :status
43
+ )
44
+
45
+ class << self
46
+ # @return (Array) Returns all passbook available for this account
47
+ def all
48
+ client.passbooks.map { |pass_type| self.new(pass_type) }
49
+ end
50
+
51
+ # Creates a new Passbook ID on the Apple Dev Portal
52
+ #
53
+ # @param bundle_id [String] the bundle id (Passbook_id) of the passbook
54
+ # @param name [String] the name of the Passbook
55
+ # @return (Passbook) The Passbook you just created
56
+ def create!(bundle_id: nil, name: nil)
57
+ new_passbook = client.create_passbook!(name, bundle_id)
58
+ self.new(new_passbook)
59
+ end
60
+
61
+ # Find a specific Passbook ID based on the bundle_id
62
+ # @return (Passbook) The passbook you're looking for. This is nil if the passbook can't be found.
63
+ def find(bundle_id)
64
+ all.find do |passbook|
65
+ passbook.bundle_id == bundle_id
66
+ end
67
+ end
68
+ end
69
+
70
+ # Delete this Passbook ID.
71
+ # @return (Passbook) The passbook you just deleted
72
+ def delete!
73
+ client.delete_passbook!(passbook_id)
74
+ self
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,62 @@
1
+ require_relative 'portal_base'
2
+
3
+ module Spaceship
4
+ module Portal
5
+ class Person < PortalBase
6
+ # @return (String) Person Id
7
+ attr_accessor :person_id
8
+
9
+ # @return (String) First name
10
+ attr_accessor :firstname
11
+
12
+ # @return (String) Last name
13
+ attr_accessor :lastname
14
+
15
+ # @return (String) Email Address
16
+ attr_accessor :email_address
17
+
18
+ # @return (String) Developer status (active, inactive)
19
+ attr_accessor :developer_status
20
+
21
+ # @return (String) Joined Date
22
+ attr_accessor :joined
23
+
24
+ # @return (String) Id in Team scope
25
+ attr_accessor :team_member_id
26
+
27
+ # @return (String) Role (member, admin or agent)
28
+ attr_accessor :type
29
+
30
+ attr_mapping(
31
+ 'personId' => :person_id,
32
+ 'firstName' => :firstname,
33
+ 'lastName' => :lastname,
34
+ 'email' => :email_address,
35
+ 'developerStatus' => :developer_status,
36
+ 'dateJoined' => :joined,
37
+ 'teamMemberId' => :team_member_id
38
+ )
39
+
40
+ def remove!
41
+ client.team_remove_member!(team_member_id)
42
+ end
43
+
44
+ def change_role(role)
45
+ client.team_set_role(team_member_id, role)
46
+ end
47
+
48
+ class << self
49
+ def factory(attrs)
50
+ begin
51
+ attrs['dateJoined'] = Time.parse(attrs['dateJoined'])
52
+ rescue TypeError
53
+ # Raised if we start getting integer timestamps
54
+ rescue ArgumentError
55
+ # Raised if the string's format can't be parsed
56
+ end
57
+ return self.new(attrs)
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,67 @@
1
+ require_relative 'person'
2
+ require_relative 'invite'
3
+
4
+ module Spaceship
5
+ module Portal
6
+ class Persons < PortalBase
7
+ class << self
8
+ def all
9
+ members = client.team_members
10
+ all_members = []
11
+ member = factory_member(members["members"], "member")
12
+ admins = factory_member(members["admins"], "admin")
13
+ agent = factory_member(members["agent"], "agent")
14
+
15
+ all_members.concat(member)
16
+ all_members.concat(admins)
17
+ all_members << agent
18
+
19
+ return all_members
20
+ end
21
+
22
+ def invited
23
+ return factory_invite(client.team_invited["invites"])
24
+ end
25
+
26
+ def factory_invite(invitees)
27
+ if invitees.kind_of?(Hash)
28
+ return Spaceship::Portal::Invite.factory(invitees)
29
+ end
30
+ final_invitees = []
31
+ invitees.each do |invitee|
32
+ final_invitees << Spaceship::Portal::Invite.factory(invitee)
33
+ end
34
+ return final_invitees
35
+ end
36
+
37
+ def factory_member(members, type)
38
+ if members.kind_of?(Hash)
39
+ attrs = members
40
+ attrs[:type] = type
41
+ return Spaceship::Portal::Person.factory(attrs)
42
+ end
43
+ final_members = []
44
+ members.each do |member|
45
+ attrs = member
46
+ attrs[:type] = type
47
+ final_members << Spaceship::Portal::Person.factory(attrs)
48
+ end
49
+ return final_members
50
+ end
51
+
52
+ def find(email)
53
+ all.each do |member|
54
+ if member.email_address == email
55
+ return member
56
+ end
57
+ end
58
+ return nil
59
+ end
60
+
61
+ def invite(email, role)
62
+ client.team_invite(email, role)
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,17 @@
1
+ require 'spaceship/portal/portal_base'
2
+ require 'spaceship/portal/app'
3
+ require 'spaceship/portal/website_push'
4
+ require 'spaceship/portal/app_group'
5
+ require 'spaceship/portal/app_service'
6
+ require 'spaceship/portal/certificate'
7
+ require 'spaceship/portal/cloud_container'
8
+ require 'spaceship/portal/device'
9
+ require 'spaceship/portal/provisioning_profile'
10
+ require 'spaceship/portal/portal_client'
11
+ require 'spaceship/portal/persons'
12
+ require 'spaceship/portal/person'
13
+ require 'spaceship/portal/key'
14
+ require 'spaceship/portal/provisioning_profile_template'
15
+ require 'spaceship/portal/merchant'
16
+ require 'spaceship/portal/passbook'
17
+ require 'spaceship/portal/invite'
@@ -0,0 +1,16 @@
1
+ require_relative '../base'
2
+
3
+ module Spaceship
4
+ class PortalBase < Spaceship::Base
5
+ class << self
6
+ def client
7
+ require_relative 'spaceship'
8
+ (
9
+ @client or
10
+ Spaceship::Portal.client or
11
+ raise "Please login using `Spaceship::Portal.login('user', 'password')`"
12
+ )
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,862 @@
1
+ require_relative '../client'
2
+
3
+ require_relative 'app'
4
+ require_relative 'app_group'
5
+ require_relative 'cloud_container'
6
+ require_relative 'device'
7
+ require_relative 'merchant'
8
+ require_relative 'passbook'
9
+ require_relative 'provisioning_profile'
10
+ require_relative 'certificate'
11
+ require_relative 'website_push'
12
+ require_relative 'persons'
13
+
14
+ module Spaceship
15
+ # rubocop:disable Metrics/ClassLength
16
+ class PortalClient < Spaceship::Client
17
+ #####################################################
18
+ # @!group Init and Login
19
+ #####################################################
20
+
21
+ PROTOCOL_VERSION = Spaceship::Client::PROTOCOL_VERSION
22
+
23
+ def self.hostname
24
+ "https://developer.apple.com/services-account/#{PROTOCOL_VERSION}/"
25
+ end
26
+
27
+ def send_login_request(user, password)
28
+ response = send_shared_login_request(user, password)
29
+ return response if self.cookie.include?("myacinfo")
30
+
31
+ # When the user has 2 step enabled, we might have to call this method again
32
+ # This only occurs when the user doesn't have a team on App Store Connect
33
+ # For 2 step verification we use the App Store Connect back-end
34
+ # which is enough to get the DES... cookie, however we don't get a valid
35
+ # myacinfo cookie at that point. That means, after getting the DES... cookie
36
+ # we have to send the login request again. This will then get us a valid myacinfo
37
+ # cookie, additionally to the DES... cookie
38
+ return send_shared_login_request(user, password)
39
+ end
40
+
41
+ # @return (Array) A list of all available teams
42
+ def teams
43
+ return @teams if @teams
44
+ req = request(:post, "account/listTeams.action")
45
+ @teams = parse_response(req, 'teams').sort_by do |team|
46
+ [
47
+ team['name'],
48
+ team['teamId']
49
+ ]
50
+ end
51
+ end
52
+
53
+ # @return (String) The currently selected Team ID
54
+ def team_id
55
+ return @current_team_id if @current_team_id
56
+
57
+ if teams.count > 1
58
+ puts("The current user is in #{teams.count} teams. Pass a team ID or call `select_team` to choose a team. Using the first one for now.")
59
+ end
60
+
61
+ if teams.count == 0
62
+ raise "User '#{user}' does not have access to any teams with an active membership"
63
+ end
64
+ @current_team_id ||= teams[0]['teamId']
65
+ end
66
+
67
+ # Shows a team selection for the user in the terminal. This should not be
68
+ # called on CI systems
69
+ #
70
+ # @param team_id (String) (optional): The ID of a Developer Portal team
71
+ # @param team_name (String) (optional): The name of a Developer Portal team
72
+ def select_team(team_id: nil, team_name: nil)
73
+ @current_team_id = self.UI.select_team(team_id: team_id, team_name: team_name)
74
+ end
75
+
76
+ # Set a new team ID which will be used from now on
77
+ def team_id=(team_id)
78
+ @current_team_id = team_id
79
+ end
80
+
81
+ # @return (Hash) Fetches all information of the currently used team
82
+ def team_information
83
+ teams.find do |t|
84
+ t['teamId'] == team_id
85
+ end
86
+ end
87
+
88
+ # Is the current session from an Enterprise In House account?
89
+ def in_house?
90
+ return @in_house unless @in_house.nil?
91
+ @in_house = (team_information['type'] == 'In-House')
92
+ end
93
+
94
+ def platform_slug(mac)
95
+ if mac
96
+ 'mac'
97
+ else
98
+ 'ios'
99
+ end
100
+ end
101
+ private :platform_slug
102
+
103
+ def list_pending_agreements(language: "en")
104
+ r = request(:post) do |req|
105
+ req.url("account/listPendingAgreements")
106
+ req.body = {
107
+ teamId: team_id,
108
+ languageIsoCode: language
109
+ }.to_json
110
+ req.headers['Content-Type'] = 'application/json'
111
+ end
112
+
113
+ return parse_response(r)
114
+ end
115
+
116
+ #####################################################
117
+ # @!group Apps
118
+ #####################################################
119
+
120
+ def apps(mac: false)
121
+ paging do |page_number|
122
+ r = request(:post, "account/#{platform_slug(mac)}/identifiers/listAppIds.action", {
123
+ teamId: team_id,
124
+ pageNumber: page_number,
125
+ pageSize: page_size,
126
+ sort: 'name=asc'
127
+ })
128
+ parse_response(r, 'appIds')
129
+ end
130
+ end
131
+
132
+ def details_for_app(app)
133
+ r = request(:post, "account/#{platform_slug(app.mac?)}/identifiers/getAppIdDetail.action", {
134
+ teamId: team_id,
135
+ appIdId: app.app_id
136
+ })
137
+ parse_response(r, 'appId')
138
+ end
139
+
140
+ def update_service_for_app(app, service)
141
+ ensure_csrf(Spaceship::Portal::App)
142
+
143
+ request(:post, service.service_uri, {
144
+ teamId: team_id,
145
+ displayId: app.app_id,
146
+ featureType: service.service_id,
147
+ featureValue: service.value
148
+ })
149
+
150
+ details_for_app(app)
151
+ end
152
+
153
+ def associate_groups_with_app(app, groups)
154
+ ensure_csrf(Spaceship::Portal::AppGroup)
155
+
156
+ request(:post, 'account/ios/identifiers/assignApplicationGroupToAppId.action', {
157
+ teamId: team_id,
158
+ appIdId: app.app_id,
159
+ displayId: app.app_id,
160
+ applicationGroups: groups.map(&:app_group_id)
161
+ })
162
+
163
+ details_for_app(app)
164
+ end
165
+
166
+ def associate_cloud_containers_with_app(app, containers)
167
+ ensure_csrf(Spaceship::Portal::CloudContainer)
168
+
169
+ request(:post, 'account/ios/identifiers/assignCloudContainerToAppId.action', {
170
+ teamId: team_id,
171
+ appIdId: app.app_id,
172
+ cloudContainers: containers.map(&:cloud_container)
173
+ })
174
+
175
+ details_for_app(app)
176
+ end
177
+
178
+ def associate_merchants_with_app(app, merchants, mac)
179
+ ensure_csrf(Spaceship::Portal::Merchant)
180
+
181
+ request(:post, "account/#{platform_slug(mac)}/identifiers/assignOMCToAppId.action", {
182
+ teamId: team_id,
183
+ appIdId: app.app_id,
184
+ omcIds: merchants.map(&:merchant_id)
185
+ })
186
+
187
+ details_for_app(app)
188
+ end
189
+
190
+ def valid_name_for(input)
191
+ latinized = input.to_slug.transliterate
192
+ latinized = latinized.gsub(/[^0-9A-Za-z\d\s]/, '') # remove non-valid characters
193
+ # Check if the input string was modified, since it might be empty now
194
+ # (if it only contained non-latin symbols) or the duplicate of another app
195
+ if latinized != input
196
+ latinized << " "
197
+ latinized << Digest::MD5.hexdigest(input)
198
+ end
199
+ latinized
200
+ end
201
+
202
+ def create_app!(type, name, bundle_id, mac: false, enable_services: {})
203
+ # We moved the ensure_csrf to the top of this method
204
+ # as we got some users with issues around creating new apps
205
+ # https://github.com/fastlane/fastlane/issues/5813
206
+ ensure_csrf(Spaceship::Portal::App)
207
+
208
+ ident_params = case type.to_sym
209
+ when :explicit
210
+ {
211
+ type: 'explicit',
212
+ identifier: bundle_id,
213
+ inAppPurchase: 'on',
214
+ gameCenter: 'on'
215
+ }
216
+ when :wildcard
217
+ {
218
+ type: 'wildcard',
219
+ identifier: bundle_id
220
+ }
221
+ end
222
+
223
+ params = {
224
+ name: valid_name_for(name),
225
+ teamId: team_id
226
+ }
227
+ params.merge!(ident_params)
228
+ enable_services.each do |k, v|
229
+ params[v.service_id.to_sym] = v.value
230
+ end
231
+ r = request(:post, "account/#{platform_slug(mac)}/identifiers/addAppId.action", params)
232
+ parse_response(r, 'appId')
233
+ end
234
+
235
+ def delete_app!(app_id, mac: false)
236
+ ensure_csrf(Spaceship::Portal::App)
237
+
238
+ r = request(:post, "account/#{platform_slug(mac)}/identifiers/deleteAppId.action", {
239
+ teamId: team_id,
240
+ appIdId: app_id
241
+ })
242
+ parse_response(r)
243
+ end
244
+
245
+ def update_app_name!(app_id, name, mac: false)
246
+ ensure_csrf(Spaceship::Portal::App)
247
+
248
+ r = request(:post, "account/#{platform_slug(mac)}/identifiers/updateAppIdName.action", {
249
+ teamId: team_id,
250
+ appIdId: app_id,
251
+ name: valid_name_for(name)
252
+ })
253
+ parse_response(r, 'appId')
254
+ end
255
+
256
+ #####################################################
257
+ # @!group Passbook
258
+ #####################################################
259
+
260
+ def passbooks
261
+ paging do |page_number|
262
+ r = request(:post, "account/ios/identifiers/listPassTypeIds.action", {
263
+ teamId: team_id,
264
+ pageNumber: page_number,
265
+ pageSize: page_size,
266
+ sort: 'name=asc'
267
+ })
268
+ parse_response(r, 'passTypeIdList')
269
+ end
270
+ end
271
+
272
+ def create_passbook!(name, bundle_id)
273
+ ensure_csrf(Spaceship::Portal::Passbook)
274
+
275
+ r = request(:post, "account/ios/identifiers/addPassTypeId.action", {
276
+ name: name,
277
+ identifier: bundle_id,
278
+ teamId: team_id
279
+ })
280
+ parse_response(r, 'passTypeId')
281
+ end
282
+
283
+ def delete_passbook!(passbook_id)
284
+ ensure_csrf(Spaceship::Portal::Passbook)
285
+
286
+ r = request(:post, "account/ios/identifiers/deletePassTypeId.action", {
287
+ teamId: team_id,
288
+ passTypeId: passbook_id
289
+ })
290
+ parse_response(r)
291
+ end
292
+
293
+ #####################################################
294
+ # @!group Website Push
295
+ #####################################################
296
+
297
+ def website_push(mac: false)
298
+ paging do |page_number|
299
+ r = request(:post, "account/#{platform_slug(mac)}/identifiers/listWebsitePushIds.action", {
300
+ teamId: team_id,
301
+ pageNumber: page_number,
302
+ pageSize: page_size,
303
+ sort: 'name=asc'
304
+ })
305
+ parse_response(r, 'websitePushIdList')
306
+ end
307
+ end
308
+
309
+ def create_website_push!(name, bundle_id, mac: false)
310
+ ensure_csrf(Spaceship::Portal::WebsitePush)
311
+
312
+ r = request(:post, "account/#{platform_slug(mac)}/identifiers/addWebsitePushId.action", {
313
+ name: name,
314
+ identifier: bundle_id,
315
+ teamId: team_id
316
+ })
317
+ parse_response(r, 'websitePushId')
318
+ end
319
+
320
+ def delete_website_push!(website_id, mac: false)
321
+ ensure_csrf(Spaceship::Portal::WebsitePush)
322
+
323
+ r = request(:post, "account/#{platform_slug(mac)}/identifiers/deleteWebsitePushId.action", {
324
+ teamId: team_id,
325
+ websitePushId: website_id
326
+ })
327
+ parse_response(r)
328
+ end
329
+
330
+ #####################################################
331
+ # @!group Merchant
332
+ #####################################################
333
+
334
+ def merchants(mac: false)
335
+ paging do |page_number|
336
+ r = request(:post, "account/#{platform_slug(mac)}/identifiers/listOMCs.action", {
337
+ teamId: team_id,
338
+ pageNumber: page_number,
339
+ pageSize: page_size,
340
+ sort: 'name=asc'
341
+ })
342
+ parse_response(r, 'identifierList')
343
+ end
344
+ end
345
+
346
+ def create_merchant!(name, bundle_id, mac: false)
347
+ ensure_csrf(Spaceship::Portal::Merchant)
348
+
349
+ r = request(:post, "account/#{platform_slug(mac)}/identifiers/addOMC.action", {
350
+ name: name,
351
+ identifier: bundle_id,
352
+ teamId: team_id
353
+ })
354
+ parse_response(r, 'omcId')
355
+ end
356
+
357
+ def delete_merchant!(merchant_id, mac: false)
358
+ ensure_csrf(Spaceship::Portal::Merchant)
359
+
360
+ r = request(:post, "account/#{platform_slug(mac)}/identifiers/deleteOMC.action", {
361
+ teamId: team_id,
362
+ omcId: merchant_id
363
+ })
364
+ parse_response(r)
365
+ end
366
+
367
+ #####################################################
368
+ # @!group App Groups
369
+ #####################################################
370
+
371
+ def app_groups
372
+ paging do |page_number|
373
+ r = request(:post, 'account/ios/identifiers/listApplicationGroups.action', {
374
+ teamId: team_id,
375
+ pageNumber: page_number,
376
+ pageSize: page_size,
377
+ sort: 'name=asc'
378
+ })
379
+ parse_response(r, 'applicationGroupList')
380
+ end
381
+ end
382
+
383
+ def create_app_group!(name, group_id)
384
+ ensure_csrf(Spaceship::Portal::AppGroup)
385
+
386
+ r = request(:post, 'account/ios/identifiers/addApplicationGroup.action', {
387
+ name: valid_name_for(name),
388
+ identifier: group_id,
389
+ teamId: team_id
390
+ })
391
+ parse_response(r, 'applicationGroup')
392
+ end
393
+
394
+ def delete_app_group!(app_group_id)
395
+ ensure_csrf(Spaceship::Portal::AppGroup)
396
+
397
+ r = request(:post, 'account/ios/identifiers/deleteApplicationGroup.action', {
398
+ teamId: team_id,
399
+ applicationGroup: app_group_id
400
+ })
401
+ parse_response(r)
402
+ end
403
+
404
+ #####################################################
405
+ # @!group Cloud Containers
406
+ #####################################################
407
+
408
+ def cloud_containers
409
+ paging do |page_number|
410
+ r = request(:post, 'account/cloudContainer/listCloudContainers.action', {
411
+ teamId: team_id,
412
+ pageNumber: page_number,
413
+ pageSize: page_size,
414
+ sort: 'name=asc'
415
+ })
416
+ result = parse_response(r, 'cloudContainerList')
417
+
418
+ csrf_cache[Spaceship::Portal::CloudContainer] = self.csrf_tokens
419
+
420
+ result
421
+ end
422
+ end
423
+
424
+ def create_cloud_container!(name, identifier)
425
+ ensure_csrf(Spaceship::Portal::CloudContainer)
426
+
427
+ r = request(:post, 'account/cloudContainer/addCloudContainer.action', {
428
+ name: valid_name_for(name),
429
+ identifier: identifier,
430
+ teamId: team_id
431
+ })
432
+ parse_response(r, 'cloudContainer')
433
+ end
434
+
435
+ #####################################################
436
+ # @!group Team
437
+ #####################################################
438
+ def team_members
439
+ response = request(:post) do |req|
440
+ req.url("/services-account/#{PROTOCOL_VERSION}/account/getTeamMembers")
441
+ req.body = {
442
+ teamId: team_id
443
+ }.to_json
444
+ req.headers['Content-Type'] = 'application/json'
445
+ end
446
+ parse_response(response)
447
+ end
448
+
449
+ def team_invited
450
+ response = request(:post) do |req|
451
+ req.url("/services-account/#{PROTOCOL_VERSION}/account/getInvites")
452
+ req.body = {
453
+ teamId: team_id
454
+ }.to_json
455
+ req.headers['Content-Type'] = 'application/json'
456
+ end
457
+ parse_response(response)
458
+ end
459
+
460
+ def team_set_role(team_member_id, role)
461
+ ensure_csrf(Spaceship::Portal::Persons)
462
+ response = request(:post) do |req|
463
+ req.url("/services-account/#{PROTOCOL_VERSION}/account/setTeamMemberRoles")
464
+ req.body = {
465
+ teamId: team_id,
466
+ role: role,
467
+ teamMemberIds: [team_member_id]
468
+ }.to_json
469
+ req.headers['Content-Type'] = 'application/json'
470
+ end
471
+ parse_response(response)
472
+ end
473
+
474
+ def team_remove_member!(team_member_id)
475
+ ensure_csrf(Spaceship::Portal::Persons)
476
+ response = request(:post) do |req|
477
+ req.url("/services-account/#{PROTOCOL_VERSION}/account/removeTeamMembers")
478
+ req.body = {
479
+ teamId: team_id,
480
+ teamMemberIds: [team_member_id]
481
+ }.to_json
482
+ req.headers['Content-Type'] = 'application/json'
483
+ end
484
+ parse_response(response)
485
+ end
486
+
487
+ def team_invite(email, role)
488
+ ensure_csrf(Spaceship::Portal::Persons)
489
+ response = request(:post) do |req|
490
+ req.url("/services-account/#{PROTOCOL_VERSION}/account/sendInvites")
491
+ req.body = {
492
+ invites: [
493
+ { recipientEmail: email, recipientRole: role }
494
+ ],
495
+ teamId: team_id
496
+ }.to_json
497
+ req.headers['Content-Type'] = 'application/json'
498
+ end
499
+ parse_response(response)
500
+ end
501
+
502
+ #####################################################
503
+ # @!group Devices
504
+ #####################################################
505
+
506
+ def devices(mac: false, include_disabled: false)
507
+ paging do |page_number|
508
+ r = request(:post, "account/#{platform_slug(mac)}/device/listDevices.action", {
509
+ teamId: team_id,
510
+ pageNumber: page_number,
511
+ pageSize: page_size,
512
+ sort: 'name=asc',
513
+ includeRemovedDevices: include_disabled
514
+ })
515
+ result = parse_response(r, 'devices')
516
+
517
+ csrf_cache[Spaceship::Portal::Device] = self.csrf_tokens
518
+
519
+ result
520
+ end
521
+ end
522
+
523
+ def devices_by_class(device_class, include_disabled: false)
524
+ paging do |page_number|
525
+ r = request(:post, 'account/ios/device/listDevices.action', {
526
+ teamId: team_id,
527
+ pageNumber: page_number,
528
+ pageSize: page_size,
529
+ sort: 'name=asc',
530
+ deviceClasses: device_class,
531
+ includeRemovedDevices: include_disabled
532
+ })
533
+ parse_response(r, 'devices')
534
+ end
535
+ end
536
+
537
+ def create_device!(device_name, device_id, mac: false)
538
+ ensure_csrf(Spaceship::Portal::Device)
539
+
540
+ req = request(:post, "account/#{platform_slug(mac)}/device/addDevices.action", {
541
+ teamId: team_id,
542
+ deviceClasses: mac ? 'mac' : 'iphone',
543
+ deviceNumbers: device_id,
544
+ deviceNames: device_name,
545
+ register: 'single'
546
+ })
547
+
548
+ devices = parse_response(req, 'devices')
549
+ return devices.first unless devices.empty?
550
+
551
+ validation_messages = parse_response(req, 'validationMessages').map { |message| message["validationUserMessage"] }.compact.uniq
552
+
553
+ raise UnexpectedResponse.new, validation_messages.join('\n') unless validation_messages.empty?
554
+ raise UnexpectedResponse.new, "Couldn't register new device, got this: #{parse_response(req)}"
555
+ end
556
+
557
+ def disable_device!(device_id, device_udid, mac: false)
558
+ request(:post, "https://developer.apple.com/services-account/#{PROTOCOL_VERSION}/account/#{platform_slug(mac)}/device/deleteDevice.action", {
559
+ teamId: team_id,
560
+ deviceId: device_id
561
+ })
562
+ end
563
+
564
+ def enable_device!(device_id, device_udid, mac: false)
565
+ req = request(:post, "https://developer.apple.com/services-account/#{PROTOCOL_VERSION}/account/#{platform_slug(mac)}/device/enableDevice.action", {
566
+ teamId: team_id,
567
+ displayId: device_id,
568
+ deviceNumber: device_udid
569
+ })
570
+ parse_response(req, 'device')
571
+ end
572
+
573
+ #####################################################
574
+ # @!group Certificates
575
+ #####################################################
576
+
577
+ def certificates(types, mac: false)
578
+ paging do |page_number|
579
+ r = request(:post, "account/#{platform_slug(mac)}/certificate/listCertRequests.action", {
580
+ teamId: team_id,
581
+ types: types.join(','),
582
+ pageNumber: page_number,
583
+ pageSize: page_size,
584
+ sort: 'certRequestStatusCode=asc'
585
+ })
586
+ parse_response(r, 'certRequests')
587
+ end
588
+ end
589
+
590
+ def create_certificate!(type, csr, app_id = nil, mac = false)
591
+ ensure_csrf(Spaceship::Portal::Certificate)
592
+
593
+ r = request(:post, "account/#{platform_slug(mac)}/certificate/submitCertificateRequest.action", {
594
+ teamId: team_id,
595
+ type: type,
596
+ csrContent: csr,
597
+ appIdId: app_id, # optional
598
+ specialIdentifierDisplayId: app_id, # For requesting Web Push certificates
599
+ })
600
+ parse_response(r, 'certRequest')
601
+ end
602
+
603
+ def download_certificate(certificate_id, type, mac: false)
604
+ { type: type, certificate_id: certificate_id }.each { |k, v| raise "#{k} must not be nil" if v.nil? }
605
+
606
+ r = request(:get, "account/#{platform_slug(mac)}/certificate/downloadCertificateContent.action", {
607
+ teamId: team_id,
608
+ certificateId: certificate_id,
609
+ type: type
610
+ })
611
+ a = parse_response(r)
612
+ if r.success? && a.include?("Apple Inc")
613
+ return a
614
+ else
615
+ raise UnexpectedResponse.new, "Couldn't download certificate, got this instead: #{a}"
616
+ end
617
+ end
618
+
619
+ def revoke_certificate!(certificate_id, type, mac: false)
620
+ ensure_csrf(Spaceship::Portal::Certificate)
621
+
622
+ r = request(:post, "account/#{platform_slug(mac)}/certificate/revokeCertificate.action", {
623
+ teamId: team_id,
624
+ certificateId: certificate_id,
625
+ type: type
626
+ })
627
+ parse_response(r, 'certRequests')
628
+ end
629
+
630
+ #####################################################
631
+ # @!group Provisioning Profiles
632
+ #####################################################
633
+
634
+ def provisioning_profiles(mac: false)
635
+ paging do |page_number|
636
+ req = request(:post, "account/#{platform_slug(mac)}/profile/listProvisioningProfiles.action", {
637
+ teamId: team_id,
638
+ pageNumber: page_number,
639
+ pageSize: page_size,
640
+ sort: 'name=asc',
641
+ includeInactiveProfiles: true,
642
+ onlyCountLists: true
643
+ })
644
+
645
+ result = parse_response(req, 'provisioningProfiles')
646
+
647
+ csrf_cache[Spaceship::Portal::ProvisioningProfile] = self.csrf_tokens
648
+
649
+ result
650
+ end
651
+ end
652
+
653
+ ##
654
+ # this endpoint is used by Xcode to fetch provisioning profiles.
655
+ # The response is an xml plist but has the added benefit of containing the appId of each provisioning profile.
656
+ #
657
+ # Use this method over `provisioning_profiles` if possible because no secondary API calls are necessary to populate the ProvisioningProfile data model.
658
+ def provisioning_profiles_via_xcode_api(mac: false)
659
+ req = request(:post) do |r|
660
+ r.url("https://developerservices2.apple.com/services/#{PROTOCOL_VERSION}/#{platform_slug(mac)}/listProvisioningProfiles.action")
661
+ r.params = {
662
+ teamId: team_id,
663
+ includeInactiveProfiles: true,
664
+ includeExpiredProfiles: true,
665
+ onlyCountLists: true
666
+ }
667
+ end
668
+
669
+ result = parse_response(req, 'provisioningProfiles')
670
+
671
+ csrf_cache[Spaceship::Portal::ProvisioningProfile] = self.csrf_tokens
672
+
673
+ result
674
+ end
675
+
676
+ def provisioning_profile_details(provisioning_profile_id: nil, mac: false)
677
+ r = request(:post, "account/#{platform_slug(mac)}/profile/getProvisioningProfile.action", {
678
+ teamId: team_id,
679
+ provisioningProfileId: provisioning_profile_id
680
+ })
681
+ parse_response(r, 'provisioningProfile')
682
+ end
683
+
684
+ def create_provisioning_profile!(name, distribution_method, app_id, certificate_ids, device_ids, mac: false, sub_platform: nil, template_name: nil)
685
+ ensure_csrf(Spaceship::Portal::ProvisioningProfile) do
686
+ fetch_csrf_token_for_provisioning
687
+ end
688
+
689
+ params = {
690
+ teamId: team_id,
691
+ provisioningProfileName: name,
692
+ appIdId: app_id,
693
+ distributionType: distribution_method,
694
+ certificateIds: certificate_ids,
695
+ deviceIds: device_ids
696
+ }
697
+ params[:subPlatform] = sub_platform if sub_platform
698
+
699
+ # if `template_name` is nil, Default entitlements will be used
700
+ params[:template] = template_name if template_name
701
+
702
+ r = request(:post, "account/#{platform_slug(mac)}/profile/createProvisioningProfile.action", params)
703
+ parse_response(r, 'provisioningProfile')
704
+ end
705
+
706
+ def download_provisioning_profile(profile_id, mac: false)
707
+ ensure_csrf(Spaceship::Portal::ProvisioningProfile) do
708
+ fetch_csrf_token_for_provisioning
709
+ end
710
+
711
+ r = request(:get, "account/#{platform_slug(mac)}/profile/downloadProfileContent", {
712
+ teamId: team_id,
713
+ provisioningProfileId: profile_id
714
+ })
715
+ a = parse_response(r)
716
+ if r.success? && a.include?("DOCTYPE plist PUBLIC")
717
+ return a
718
+ else
719
+ raise UnexpectedResponse.new, "Couldn't download provisioning profile, got this instead: #{a}"
720
+ end
721
+ end
722
+
723
+ def delete_provisioning_profile!(profile_id, mac: false)
724
+ fetch_csrf_token_for_provisioning
725
+ r = request(:post, "account/#{platform_slug(mac)}/profile/deleteProvisioningProfile.action", {
726
+ teamId: team_id,
727
+ provisioningProfileId: profile_id
728
+ })
729
+ parse_response(r)
730
+ end
731
+
732
+ def repair_provisioning_profile!(profile_id, name, distribution_method, app_id, certificate_ids, device_ids, mac: false, sub_platform: nil, template_name: nil)
733
+ fetch_csrf_token_for_provisioning
734
+
735
+ params = {
736
+ teamId: team_id,
737
+ provisioningProfileId: profile_id,
738
+ provisioningProfileName: name,
739
+ appIdId: app_id,
740
+ distributionType: distribution_method,
741
+ certificateIds: certificate_ids.join(','),
742
+ deviceIds: device_ids
743
+ }
744
+ params[:subPlatform] = sub_platform if sub_platform
745
+ # if `template_name` is nil, Default entitlements will be used
746
+ params[:template] = template_name if template_name
747
+
748
+ r = request(:post, "account/#{platform_slug(mac)}/profile/regenProvisioningProfile.action", params)
749
+
750
+ parse_response(r, 'provisioningProfile')
751
+ end
752
+
753
+ #####################################################
754
+ # @!group Keys
755
+ #####################################################
756
+
757
+ def list_keys
758
+ paging do |page_number|
759
+ response = request(:post, 'account/auth/key/list', {
760
+ teamId: team_id,
761
+ pageNumber: page_number,
762
+ pageSize: page_size,
763
+ sort: 'name=asc'
764
+ })
765
+ parse_response(response, 'keys')
766
+ end
767
+ end
768
+
769
+ def get_key(id: nil)
770
+ response = request(:post, 'account/auth/key/get', { teamId: team_id, keyId: id })
771
+ # response contains a list of keys with 1 item
772
+ parse_response(response, 'keys').first
773
+ end
774
+
775
+ def download_key(id: nil)
776
+ response = request(:get, 'account/auth/key/download', { teamId: team_id, keyId: id })
777
+ parse_response(response)
778
+ end
779
+
780
+ def create_key!(name: nil, service_configs: nil)
781
+ fetch_csrf_token_for_keys
782
+
783
+ params = {
784
+ name: name,
785
+ serviceConfigurations: service_configs,
786
+ teamId: team_id
787
+ }
788
+
789
+ response = request(:post, 'account/auth/key/create') do |req|
790
+ req.headers['Content-Type'] = 'application/json'
791
+ req.body = params.to_json
792
+ end
793
+
794
+ # response contains a list of keys with 1 item
795
+ parse_response(response, 'keys').first
796
+ end
797
+
798
+ def revoke_key!(id: nil)
799
+ fetch_csrf_token_for_keys
800
+ response = request(:post, 'account/auth/key/revoke', { teamId: team_id, keyId: id })
801
+ parse_response(response)
802
+ end
803
+
804
+ private
805
+
806
+ # This is a cache of entity type (App, AppGroup, Certificate, Device) to csrf_tokens
807
+ def csrf_cache
808
+ @csrf_cache ||= {}
809
+ end
810
+
811
+ # Ensures that there are csrf tokens for the appropriate entity type
812
+ # Relies on store_csrf_tokens to set csrf_tokens to the appropriate value
813
+ # then stores that in the correct place in cache
814
+ # This method also takes a block, if you want to send a custom request, instead of
815
+ # calling `.all` on the given klass. This is used for provisioning profiles.
816
+ def ensure_csrf(klass)
817
+ if csrf_cache[klass]
818
+ self.csrf_tokens = csrf_cache[klass]
819
+ return
820
+ end
821
+
822
+ self.csrf_tokens = nil
823
+
824
+ # If we directly create a new resource (e.g. app) without querying anything before
825
+ # we don't have a valid csrf token, that's why we have to do at least one request
826
+ block_given? ? yield : klass.all
827
+
828
+ csrf_cache[klass] = self.csrf_tokens
829
+ end
830
+
831
+ # We need a custom way to fetch the csrf token for the provisioning profile requests, since
832
+ # we use a separate API endpoint (host of Xcode API) to fetch the provisioning profiles
833
+ # All we do is fetch one profile (if exists) to get a valid csrf token with its time stamp
834
+ # This method is being called from all requests that modify, create or downloading provisioning
835
+ # profiles.
836
+ # Source https://github.com/fastlane/fastlane/issues/5903
837
+ def fetch_csrf_token_for_provisioning(mac: false)
838
+ response = request(:post, "account/#{platform_slug(mac)}/profile/listProvisioningProfiles.action", {
839
+ teamId: team_id,
840
+ pageNumber: 1,
841
+ pageSize: 1,
842
+ sort: 'name=asc'
843
+ })
844
+
845
+ parse_response(response, 'provisioningProfiles')
846
+ return nil
847
+ end
848
+
849
+ def fetch_csrf_token_for_keys
850
+ response = request(:post, 'account/auth/key/list', {
851
+ teamId: team_id,
852
+ pageNumber: 1,
853
+ pageSize: 1,
854
+ sort: 'name=asc'
855
+ })
856
+
857
+ parse_response(response, 'keys')
858
+ return nil
859
+ end
860
+ end
861
+ # rubocop:enable Metrics/ClassLength
862
+ end