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,68 @@
1
+ module Fastlane
2
+ module Actions
3
+ # See: https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/xcode-select.1.html
4
+ #
5
+ # DESCRIPTION
6
+ # xcode-select controls the location of the developer directory used by xcrun(1), xcodebuild(1), cc(1),
7
+ # and other Xcode and BSD development tools. This also controls the locations that are searched for by
8
+ # man(1) for developer tool manpages.
9
+ #
10
+ # DEVELOPER_DIR
11
+ # Overrides the active developer directory. When DEVELOPER_DIR is set, its value will be used
12
+ # instead of the system-wide active developer directory.
13
+ #
14
+ # Note that for historical reason, the developer directory is considered to be the Developer content
15
+ # directory inside the Xcode application (for example /Applications/Xcode.app/Contents/Developer).
16
+ # You can set the environment variable to either the actual Developer contents directory, or the
17
+ # Xcode application directory -- the xcode-select provided shims will automatically convert the
18
+ # environment variable into the full Developer content path.
19
+ #
20
+ class XcodeSelectAction < Action
21
+ def self.run(params)
22
+ params = nil unless params.kind_of?(Array)
23
+ xcode_path = (params || []).first
24
+
25
+ # Verify that a param was passed in
26
+ UI.user_error!("Path to Xcode application required (e.g. `xcode_select(\"/Applications/Xcode.app\")`)") unless xcode_path.to_s.length > 0
27
+
28
+ # Verify that a path to a directory was passed in
29
+ UI.user_error!("Path '#{xcode_path}' doesn't exist") unless Dir.exist?(xcode_path)
30
+
31
+ UI.message("Setting Xcode version to #{xcode_path} for all build steps")
32
+
33
+ ENV["DEVELOPER_DIR"] = File.join(xcode_path, "/Contents/Developer")
34
+ end
35
+
36
+ def self.description
37
+ "Change the xcode-path to use. Useful for beta versions of Xcode"
38
+ end
39
+
40
+ def self.details
41
+ [
42
+ "Select and build with the Xcode installed at the provided path.",
43
+ "Use the `xcversion` action if you want to select an Xcode:",
44
+ "- Based on a version specifier or",
45
+ "- You don't have known, stable paths, as may happen in a CI environment."
46
+ ].join("\n")
47
+ end
48
+
49
+ def self.author
50
+ "dtrenz"
51
+ end
52
+
53
+ def self.is_supported?(platform)
54
+ [:ios, :mac].include?(platform)
55
+ end
56
+
57
+ def self.example_code
58
+ [
59
+ 'xcode_select("/Applications/Xcode-8.3.2.app")'
60
+ ]
61
+ end
62
+
63
+ def self.category
64
+ :building
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,312 @@
1
+ module Fastlane
2
+ module Actions
3
+ module SharedValues
4
+ XCODE_SERVER_GET_ASSETS_PATH = :XCODE_SERVER_GET_ASSETS_PATH
5
+ XCODE_SERVER_GET_ASSETS_ARCHIVE_PATH = :XCODE_SERVER_GET_ASSETS_ARCHIVE_PATH
6
+ end
7
+
8
+ class XcodeServerGetAssetsAction < Action
9
+ require 'excon'
10
+ require 'json'
11
+ require 'fileutils'
12
+
13
+ def self.run(params)
14
+ host = params[:host]
15
+ bot_name = params[:bot_name]
16
+ integration_number_override = params[:integration_number]
17
+ target_folder = params[:target_folder]
18
+ keep_all_assets = params[:keep_all_assets]
19
+ username = params[:username]
20
+ password = params[:password]
21
+ trust_self_signed_certs = params[:trust_self_signed_certs]
22
+
23
+ # setup (not)trusting self signed certificates.
24
+ # it's normal to have a self signed certificate on your Xcode Server
25
+ Excon.defaults[:ssl_verify_peer] = !trust_self_signed_certs # for self-signed certificates
26
+
27
+ # create Xcode Server config
28
+ xcs = XcodeServer.new(host, username, password)
29
+ bots = xcs.fetch_all_bots
30
+
31
+ UI.important("Fetched #{bots.count} Bots from Xcode Server at #{host}.")
32
+
33
+ # pull out names
34
+ bot_names = bots.map { |bot| bot['name'] }
35
+
36
+ # match the bot name with a found bot, otherwise fail
37
+ found_bots = bots.select { |bot| bot['name'] == bot_name }
38
+ UI.user_error!("Failed to find a Bot with name #{bot_name} on server #{host}, only available Bots: #{bot_names}") if found_bots.count == 0
39
+
40
+ bot = found_bots[0]
41
+
42
+ UI.success("Found Bot with name #{bot_name} with id #{bot['_id']}.")
43
+
44
+ # we have our bot, get finished integrations, sorted from newest to oldest
45
+ integrations = xcs.fetch_integrations(bot['_id']).select { |i| i['currentStep'] == 'completed' }
46
+ UI.user_error!("Failed to find any completed integration for Bot \"#{bot_name}\"") if (integrations || []).count == 0
47
+
48
+ # if no integration number is specified, pick the newest one (this is sorted from newest to oldest)
49
+ if integration_number_override
50
+ integration = integrations.find { |i| i['number'] == integration_number_override }
51
+ UI.user_error!("Specified integration number #{integration_number_override} does not exist.") unless integration
52
+ else
53
+ integration = integrations.first
54
+ end
55
+
56
+ # consider: only taking the last successful one? or allow failing tests? warnings?
57
+
58
+ UI.important("Using integration #{integration['number']}.")
59
+
60
+ # fetch assets for this integration
61
+ assets_path = xcs.fetch_assets(integration['_id'], target_folder, self)
62
+ UI.user_error!("Failed to fetch assets for integration #{integration['number']}.") unless assets_path
63
+
64
+ asset_entries = Dir.entries(assets_path).map { |i| File.join(assets_path, i) }
65
+
66
+ UI.success("Successfully downloaded #{asset_entries.count} assets to file #{assets_path}!")
67
+
68
+ # now find the archive and unzip it
69
+ zipped_archive_path = asset_entries.find { |i| i.end_with?('xcarchive.zip') }
70
+
71
+ if zipped_archive_path
72
+
73
+ UI.important("Found an archive in the assets folder...")
74
+
75
+ archive_file_path = File.basename(zipped_archive_path, File.extname(zipped_archive_path))
76
+ archive_dir_path = File.dirname(zipped_archive_path)
77
+ archive_path = File.join(archive_dir_path, archive_file_path)
78
+ if File.exist?(archive_path)
79
+ # we already have the archive, skip
80
+ UI.important("Archive #{archive_path} already exists, not unzipping again...")
81
+ else
82
+ # unzip the archive
83
+ sh("unzip -q \"#{zipped_archive_path}\" -d \"#{archive_dir_path}\"")
84
+ end
85
+
86
+ # reload asset entries to also contain the xcarchive file
87
+ asset_entries = Dir.entries(assets_path).map { |i| File.join(assets_path, i) }
88
+
89
+ # optionally delete everything except for the archive
90
+ unless keep_all_assets
91
+ files_to_delete = asset_entries.select do |i|
92
+ File.extname(i) != '.xcarchive' && ![".", ".."].include?(File.basename(i))
93
+ end
94
+
95
+ files_to_delete.each do |i|
96
+ FileUtils.rm_rf(i)
97
+ end
98
+ end
99
+
100
+ Actions.lane_context[SharedValues::XCODE_SERVER_GET_ASSETS_ARCHIVE_PATH] = archive_path
101
+ end
102
+
103
+ Actions.lane_context[SharedValues::XCODE_SERVER_GET_ASSETS_PATH] = assets_path
104
+
105
+ return assets_path
106
+ end
107
+
108
+ class XcodeServer
109
+ def initialize(host, username, password)
110
+ @host = host.start_with?('https://') ? host : "https://#{host}"
111
+ @username = username
112
+ @password = password
113
+ end
114
+
115
+ def fetch_all_bots
116
+ response = get_endpoint('/bots')
117
+ UI.user_error!("You are unauthorized to access data on #{@host}, please check that you're passing in a correct username and password.") if response.status == 401
118
+ UI.user_error!("Failed to fetch Bots from Xcode Server at #{@host}, response: #{response.status}: #{response.body}.") if response.status != 200
119
+ JSON.parse(response.body)['results']
120
+ end
121
+
122
+ def fetch_integrations(bot_id)
123
+ response = get_endpoint("/bots/#{bot_id}/integrations?last=10")
124
+ UI.user_error!("Failed to fetch Integrations for Bot #{bot_id} from Xcode Server at #{@host}, response: #{response.status}: #{response.body}") if response.status != 200
125
+ JSON.parse(response.body)['results']
126
+ end
127
+
128
+ def fetch_assets(integration_id, target_folder, action)
129
+ # create a temp folder and a file, stream the download into it
130
+ Dir.mktmpdir do |dir|
131
+ temp_file = File.join(dir, "tmp_download.#{rand(1_000_000)}")
132
+ f = open(temp_file, 'w')
133
+ streamer = lambda do |chunk, remaining_bytes, total_bytes|
134
+ if remaining_bytes && total_bytes
135
+ UI.important("Downloading: #{100 - (100 * remaining_bytes.to_f / total_bytes.to_f).to_i}%")
136
+ else
137
+ UI.error(chunk.to_s)
138
+ end
139
+ f.write(chunk)
140
+ end
141
+
142
+ response = self.get_endpoint("/integrations/#{integration_id}/assets", streamer)
143
+ f.close
144
+
145
+ UI.user_error!("Integration doesn't have any assets (it probably never ran).") if response.status == 500
146
+ UI.user_error!("Failed to fetch Assets zip for Integration #{integration_id} from Xcode Server at #{@host}, response: #{response.status}: #{response.body}") if response.status != 200
147
+
148
+ # unzip it, it's a .tar.gz file
149
+ out_folder = File.join(dir, "out_#{rand(1_000_000)}")
150
+ FileUtils.mkdir_p(out_folder)
151
+
152
+ action.sh("cd \"#{out_folder}\"; cat \"#{temp_file}\" | gzip -d | tar -x")
153
+
154
+ # then pull the real name from headers
155
+ asset_filename = response.headers['Content-Disposition'].split(';')[1].split('=')[1].delete('"')
156
+ asset_foldername = asset_filename.split('.')[0]
157
+
158
+ # rename the folder in out_folder to asset_foldername
159
+ found_folder = Dir.entries(out_folder).select { |item| item != '.' && item != '..' }[0]
160
+
161
+ UI.user_error!("Internal error, couldn't find unzipped folder") if found_folder.nil?
162
+
163
+ unzipped_folder_temp_name = File.join(out_folder, found_folder)
164
+ unzipped_folder = File.join(out_folder, asset_foldername)
165
+
166
+ # rename to destination name
167
+ FileUtils.mv(unzipped_folder_temp_name, unzipped_folder)
168
+
169
+ target_folder = File.absolute_path(target_folder)
170
+
171
+ # create target folder if it doesn't exist
172
+ FileUtils.mkdir_p(target_folder)
173
+
174
+ # and move+rename it to the destination place
175
+ FileUtils.cp_r(unzipped_folder, target_folder)
176
+ out = File.join(target_folder, asset_foldername)
177
+ return out
178
+ end
179
+ return nil
180
+ end
181
+
182
+ def headers
183
+ require 'base64'
184
+ headers = {
185
+ 'User-Agent' => 'fastlane-xcode_server_get_assets', # XCS wants user agent. for some API calls. not for others. sigh.
186
+ 'X-XCSAPIVersion' => 1 # XCS API version with this API, Xcode needs this otherwise it explodes in a 500 error fire. Currently Xcode 7 Beta 5 is on Version 5.
187
+ }
188
+
189
+ if @username && @password
190
+ userpass = "#{@username}:#{@password}"
191
+ headers['Authorization'] = "Basic #{Base64.strict_encode64(userpass)}"
192
+ end
193
+
194
+ return headers
195
+ end
196
+
197
+ def get_endpoint(endpoint, response_block = nil)
198
+ url = url_for_endpoint(endpoint)
199
+ headers = self.headers || {}
200
+
201
+ if response_block
202
+ response = Excon.get(url, response_block: response_block, headers: headers)
203
+ else
204
+ response = Excon.get(url, headers: headers)
205
+ end
206
+
207
+ return response
208
+ end
209
+
210
+ private
211
+
212
+ def url_for_endpoint(endpoint)
213
+ "#{@host}:20343/api#{endpoint}"
214
+ end
215
+ end
216
+
217
+ #####################################################
218
+ # @!group Documentation
219
+ #####################################################
220
+
221
+ def self.description
222
+ "Downloads Xcode Bot assets like the `.xcarchive` and logs"
223
+ end
224
+
225
+ def self.details
226
+ [
227
+ "This action downloads assets from your Xcode Server Bot (works with Xcode Server using Xcode 6 and 7. By default, this action downloads all assets, unzips them and deletes everything except for the `.xcarchive`.",
228
+ "If you'd like to keep all downloaded assets, pass `keep_all_assets: true`.",
229
+ "This action returns the path to the downloaded assets folder and puts into shared values the paths to the asset folder and to the `.xcarchive` inside it."
230
+ ].join("\n")
231
+ end
232
+
233
+ def self.available_options
234
+ [
235
+ FastlaneCore::ConfigItem.new(key: :host,
236
+ env_name: "FL_XCODE_SERVER_GET_ASSETS_HOST",
237
+ description: "IP Address/Hostname of Xcode Server",
238
+ optional: false),
239
+ FastlaneCore::ConfigItem.new(key: :bot_name,
240
+ env_name: "FL_XCODE_SERVER_GET_ASSETS_BOT_NAME",
241
+ description: "Name of the Bot to pull assets from",
242
+ optional: false),
243
+ FastlaneCore::ConfigItem.new(key: :integration_number,
244
+ env_name: "FL_XCODE_SERVER_GET_ASSETS_INTEGRATION_NUMBER",
245
+ description: "Optionally you can override which integration's assets should be downloaded. If not provided, the latest integration is used",
246
+ is_string: false,
247
+ optional: true),
248
+ FastlaneCore::ConfigItem.new(key: :username,
249
+ env_name: "FL_XCODE_SERVER_GET_ASSETS_USERNAME",
250
+ description: "Username for your Xcode Server",
251
+ optional: true,
252
+ default_value: ""),
253
+ FastlaneCore::ConfigItem.new(key: :password,
254
+ env_name: "FL_XCODE_SERVER_GET_ASSETS_PASSWORD",
255
+ description: "Password for your Xcode Server",
256
+ sensitive: true,
257
+ optional: true,
258
+ default_value: ""),
259
+ FastlaneCore::ConfigItem.new(key: :target_folder,
260
+ env_name: "FL_XCODE_SERVER_GET_ASSETS_TARGET_FOLDER",
261
+ description: "Relative path to a folder into which to download assets",
262
+ optional: true,
263
+ default_value: './xcs_assets'),
264
+ FastlaneCore::ConfigItem.new(key: :keep_all_assets,
265
+ env_name: "FL_XCODE_SERVER_GET_ASSETS_KEEP_ALL_ASSETS",
266
+ description: "Whether to keep all assets or let the script delete everything except for the .xcarchive",
267
+ optional: true,
268
+ is_string: false,
269
+ default_value: false),
270
+ FastlaneCore::ConfigItem.new(key: :trust_self_signed_certs,
271
+ env_name: "FL_XCODE_SERVER_GET_ASSETS_TRUST_SELF_SIGNED_CERTS",
272
+ description: "Whether to trust self-signed certs on your Xcode Server",
273
+ optional: true,
274
+ is_string: false,
275
+ default_value: true)
276
+ ]
277
+ end
278
+
279
+ def self.output
280
+ [
281
+ ['XCODE_SERVER_GET_ASSETS_PATH', 'Absolute path to the downloaded assets folder'],
282
+ ['XCODE_SERVER_GET_ASSETS_ARCHIVE_PATH', 'Absolute path to the downloaded xcarchive file']
283
+ ]
284
+ end
285
+
286
+ def self.return_type
287
+ :array_of_strings
288
+ end
289
+
290
+ def self.authors
291
+ ["czechboy0"]
292
+ end
293
+
294
+ def self.is_supported?(platform)
295
+ [:ios, :mac].include?(platform)
296
+ end
297
+
298
+ def self.example_code
299
+ [
300
+ 'xcode_server_get_assets(
301
+ host: "10.99.0.59", # Specify Xcode Server\'s Host or IP Address
302
+ bot_name: "release-1.3.4" # Specify the particular Bot
303
+ )'
304
+ ]
305
+ end
306
+
307
+ def self.category
308
+ :testing
309
+ end
310
+ end
311
+ end
312
+ end
@@ -0,0 +1,641 @@
1
+ # rubocop:disable all
2
+ module Fastlane
3
+ module Actions
4
+ module SharedValues
5
+ XCODEBUILD_ARCHIVE ||= :XCODEBUILD_ARCHIVE
6
+ XCODEBUILD_DERIVED_DATA_PATH = :XCODEBUILD_DERIVED_DATA_PATH
7
+ end
8
+
9
+ # xcodebuild man page:
10
+ # https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/xcodebuild.1.html
11
+
12
+ class XcodebuildAction < Action
13
+ ARGS_MAP = {
14
+ # actions
15
+ analyze: "analyze",
16
+ archive: "archive",
17
+ build: "build",
18
+ clean: "clean",
19
+ install: "install",
20
+ installsrc: "installsrc",
21
+ test: "test",
22
+
23
+ # parameters
24
+ alltargets: "-alltargets",
25
+ arch: "-arch",
26
+ archive_path: "-archivePath",
27
+ configuration: "-configuration",
28
+ derivedDataPath: "-derivedDataPath",
29
+ destination_timeout: "-destination-timeout",
30
+ dry_run: "-dry-run",
31
+ enableAddressSanitizer: "-enableAddressSanitizer",
32
+ enableThreadSanitizer: "-enableThreadSanitizer",
33
+ enableCodeCoverage: "-enableCodeCoverage",
34
+ export_archive: "-exportArchive",
35
+ export_format: "-exportFormat",
36
+ export_installer_identity: "-exportInstallerIdentity",
37
+ export_options_plist: "-exportOptionsPlist",
38
+ export_path: "-exportPath",
39
+ export_profile: "-exportProvisioningProfile",
40
+ export_signing_identity: "-exportSigningIdentity",
41
+ export_with_original_signing_identity: "-exportWithOriginalSigningIdentity",
42
+ hide_shell_script_environment: "-hideShellScriptEnvironment",
43
+ jobs: "-jobs",
44
+ parallelize_targets: "-parallelizeTargets",
45
+ project: "-project",
46
+ result_bundle_path: "-resultBundlePath",
47
+ scheme: "-scheme",
48
+ sdk: "-sdk",
49
+ skip_unavailable_actions: "-skipUnavailableActions",
50
+ target: "-target",
51
+ toolchain: "-toolchain",
52
+ workspace: "-workspace",
53
+ xcconfig: "-xcconfig"
54
+ }
55
+
56
+ def self.is_supported?(platform)
57
+ [:ios, :mac].include? platform
58
+ end
59
+
60
+ def self.example_code
61
+ [
62
+ 'xcodebuild(
63
+ archive: true,
64
+ archive_path: "./build-dir/MyApp.xcarchive",
65
+ scheme: "MyApp",
66
+ workspace: "MyApp.xcworkspace"
67
+ )'
68
+ ]
69
+ end
70
+
71
+ def self.category
72
+ :building
73
+ end
74
+
75
+ def self.run(params)
76
+ unless Helper.test?
77
+ UI.user_error!("xcodebuild not installed") if `which xcodebuild`.length == 0
78
+ end
79
+
80
+ # The args we will build with
81
+ xcodebuild_args = Array[]
82
+
83
+ # Supported ENV vars
84
+ build_path = ENV["XCODE_BUILD_PATH"] || nil
85
+ scheme = ENV["XCODE_SCHEME"]
86
+ workspace = ENV["XCODE_WORKSPACE"]
87
+ project = ENV["XCODE_PROJECT"]
88
+ buildlog_path = ENV["XCODE_BUILDLOG_PATH"]
89
+
90
+ # Set derived data path.
91
+ params[:derivedDataPath] ||= ENV["XCODE_DERIVED_DATA_PATH"]
92
+ Actions.lane_context[SharedValues::XCODEBUILD_DERIVED_DATA_PATH] = params[:derivedDataPath]
93
+
94
+ # Append slash to build path, if needed
95
+ if build_path && !build_path.end_with?("/")
96
+ build_path += "/"
97
+ end
98
+
99
+ # By default we use xcpretty
100
+ raw_buildlog = false
101
+
102
+ # By default we don't pass the utf flag
103
+ xcpretty_utf = false
104
+
105
+ if params
106
+ # Operation bools
107
+ archiving = params.key? :archive
108
+ exporting = params.key? :export_archive
109
+ testing = params.key? :test
110
+ xcpretty_utf = params[:xcpretty_utf]
111
+
112
+ if params.key? :raw_buildlog
113
+ raw_buildlog = params[:raw_buildlog]
114
+ end
115
+
116
+ if exporting
117
+ # If not passed, retrieve path from previous xcodebuild call
118
+ params[:archive_path] ||= Actions.lane_context[SharedValues::XCODEBUILD_ARCHIVE]
119
+
120
+ # If not passed, construct export path from env vars
121
+ if params[:export_path].nil?
122
+ ipa_filename = scheme ? scheme : File.basename(params[:archive_path], ".*")
123
+ params[:export_path] = "#{build_path}#{ipa_filename}"
124
+ end
125
+
126
+ # Default to ipa as export format
127
+ export_format = params[:export_format] || "ipa"
128
+
129
+ # Store IPA path for later deploy steps (i.e. Crashlytics)
130
+ Actions.lane_context[SharedValues::IPA_OUTPUT_PATH] = params[:export_path] + "." + export_format.downcase
131
+ else
132
+ # If not passed, check for archive scheme & workspace/project env vars
133
+ params[:scheme] ||= scheme
134
+ params[:workspace] ||= workspace
135
+ params[:project] ||= project
136
+
137
+ # If no project or workspace was passed in or set as an environment
138
+ # variable, attempt to autodetect the workspace.
139
+ if params[:project].to_s.empty? && params[:workspace].to_s.empty?
140
+ params[:workspace] = detect_workspace
141
+ end
142
+ end
143
+
144
+ if archiving
145
+ # If not passed, construct archive path from env vars
146
+ params[:archive_path] ||= "#{build_path}#{params[:scheme]}.xcarchive"
147
+
148
+ # Cache path for later xcodebuild calls
149
+ Actions.lane_context[SharedValues::XCODEBUILD_ARCHIVE] = params[:archive_path]
150
+ end
151
+
152
+ if params.key? :enable_address_sanitizer
153
+ params[:enableAddressSanitizer] = params[:enable_address_sanitizer] ? 'YES' : 'NO'
154
+ end
155
+ if params.key? :enable_thread_sanitizer
156
+ params[:enableThreadSanitizer] = params[:enable_thread_sanitizer] ? 'YES' : 'NO'
157
+ end
158
+ if params.key? :enable_code_coverage
159
+ params[:enableCodeCoverage] = params[:enable_code_coverage] ? 'YES' : 'NO'
160
+ end
161
+
162
+ # Maps parameter hash to CLI args
163
+ params = export_options_to_plist(params)
164
+ if hash_args = hash_to_args(params)
165
+ xcodebuild_args += hash_args
166
+ end
167
+
168
+ buildlog_path ||= params[:buildlog_path]
169
+ end
170
+
171
+ # By default we put xcodebuild.log in the Logs folder
172
+ buildlog_path ||= File.expand_path("#{FastlaneCore::Helper.buildlog_path}/fastlane/xcbuild/#{Time.now.strftime('%F')}/#{Process.pid}")
173
+
174
+ # Joins args into space delimited string
175
+ xcodebuild_args = xcodebuild_args.join(" ")
176
+
177
+ # Default args
178
+ xcpretty_args = []
179
+
180
+ # Formatting style
181
+ if params && params[:output_style]
182
+ output_style = params[:output_style]
183
+ UI.user_error!("Invalid output_style #{output_style}") unless [:standard, :basic].include?(output_style)
184
+ else
185
+ output_style = :standard
186
+ end
187
+
188
+ case output_style
189
+ when :standard
190
+ xcpretty_args << '--color' unless Helper.colors_disabled?
191
+ when :basic
192
+ xcpretty_args << '--no-utf'
193
+ end
194
+
195
+ if testing
196
+ if params[:reports]
197
+ # New report options format
198
+ reports = params[:reports].reduce("") do |arguments, report|
199
+ report_string = "--report #{report[:report]}"
200
+
201
+ if report[:output]
202
+ report_string << " --output \"#{report[:output]}\""
203
+ elsif report[:report] == 'junit'
204
+ report_string << " --output \"#{build_path}report/report.xml\""
205
+ elsif report[:report] == 'html'
206
+ report_string << " --output \"#{build_path}report/report.html\""
207
+ elsif report[:report] == 'json-compilation-database'
208
+ report_string << " --output \"#{build_path}report/report.json\""
209
+ end
210
+
211
+ if report[:screenshots]
212
+ report_string << " --screenshots"
213
+ end
214
+
215
+ unless arguments == ""
216
+ arguments << " "
217
+ end
218
+
219
+ arguments << report_string
220
+ end
221
+
222
+ xcpretty_args.push reports
223
+
224
+ elsif params[:report_formats]
225
+ # Test report file format
226
+ report_formats = params[:report_formats].map do |format|
227
+ "--report #{format}"
228
+ end.sort.join(" ")
229
+
230
+ xcpretty_args.push report_formats
231
+
232
+ # Save screenshots flag
233
+ if params[:report_formats].include?("html") && params[:report_screenshots]
234
+ xcpretty_args.push "--screenshots"
235
+ end
236
+
237
+ xcpretty_args.sort!
238
+
239
+ # Test report file path
240
+ if params[:report_path]
241
+ xcpretty_args.push "--output \"#{params[:report_path]}\""
242
+ elsif build_path
243
+ xcpretty_args.push "--output \"#{build_path}report\""
244
+ end
245
+ end
246
+ end
247
+
248
+ # Stdout format
249
+ if testing && !archiving
250
+ xcpretty_args << (params[:xcpretty_output] ? "--#{params[:xcpretty_output]}" : "--test")
251
+ else
252
+ xcpretty_args << (params[:xcpretty_output] ? "--#{params[:xcpretty_output]}" : "--simple")
253
+ end
254
+
255
+ xcpretty_args = xcpretty_args.join(" ")
256
+
257
+ xcpretty_command = ""
258
+ xcpretty_command = "| xcpretty #{xcpretty_args}" unless raw_buildlog
259
+ unless raw_buildlog
260
+ xcpretty_command = "#{xcpretty_command} --utf" if xcpretty_utf
261
+ end
262
+
263
+ pipe_command = "| tee '#{buildlog_path}/xcodebuild.log' #{xcpretty_command}"
264
+
265
+ FileUtils.mkdir_p buildlog_path
266
+ UI.message("For a more detailed xcodebuild log open #{buildlog_path}/xcodebuild.log")
267
+
268
+ output_result = ""
269
+
270
+ # In some cases the simulator is not booting up in time
271
+ # One way to solve it is to try to rerun it for one more time
272
+ begin
273
+ output_result = Actions.sh "set -o pipefail && xcodebuild #{xcodebuild_args} #{pipe_command}"
274
+ rescue => ex
275
+ exit_status = $?.exitstatus
276
+
277
+ raise_error = true
278
+ if exit_status.eql? 65
279
+ iphone_simulator_time_out_error = /iPhoneSimulator: Timed out waiting/
280
+
281
+ if (iphone_simulator_time_out_error =~ ex.message) != nil
282
+ raise_error = false
283
+
284
+ UI.important("First attempt failed with iPhone Simulator error: #{iphone_simulator_time_out_error.source}")
285
+ UI.important("Retrying once more...")
286
+ output_result = Actions.sh "set -o pipefail && xcodebuild #{xcodebuild_args} #{pipe_command}"
287
+ end
288
+ end
289
+
290
+ raise ex if raise_error
291
+ end
292
+
293
+ # If raw_buildlog and some reports had to be created, create xcpretty reports from the build log
294
+ if raw_buildlog && xcpretty_args.include?('--report')
295
+ output_result = Actions.sh "set -o pipefail && cat '#{buildlog_path}/xcodebuild.log' | xcpretty #{xcpretty_args} > /dev/null"
296
+ end
297
+
298
+ output_result
299
+ end
300
+
301
+ def self.export_options_to_plist(hash)
302
+ # Extract export options parameters from input options
303
+ if hash.has_key?(:export_options_plist) && hash[:export_options_plist].is_a?(Hash)
304
+ export_options = hash[:export_options_plist]
305
+
306
+ # Normalize some values
307
+ export_options[:teamID] = CredentialsManager::AppfileConfig.try_fetch_value(:team_id) if !export_options[:teamID] && CredentialsManager::AppfileConfig.try_fetch_value(:team_id)
308
+ export_options[:onDemandResourcesAssetPacksBaseURL] = URI.escape(export_options[:onDemandResourcesAssetPacksBaseURL]) if export_options[:onDemandResourcesAssetPacksBaseURL]
309
+ if export_options[:manifest]
310
+ export_options[:manifest][:appURL] = URI.encode_www_form_component(export_options[:manifest][:appURL]) if export_options[:manifest][:appURL]
311
+ export_options[:manifest][:displayImageURL] = URI.encode_www_form_component(export_options[:manifest][:displayImageURL]) if export_options[:manifest][:displayImageURL]
312
+ export_options[:manifest][:fullSizeImageURL] = URI.encode_www_form_component(export_options[:manifest][:fullSizeImageURL]) if export_options[:manifest][:fullSizeImageURL]
313
+ export_options[:manifest][:assetPackManifestURL] = URI.encode_www_form_component(export_options[:manifest][:assetPackManifestURL]) if export_options[:manifest][:assetPackManifestURL]
314
+ end
315
+
316
+ # Saves options to plist
317
+ path = "#{Tempfile.new('exportOptions').path}.plist"
318
+ File.write(path, export_options.to_plist)
319
+ hash[:export_options_plist] = path
320
+ end
321
+ hash
322
+ end
323
+
324
+ def self.hash_to_args(hash)
325
+ # Remove nil value params
326
+ hash = hash.delete_if { |_, v| v.nil? }
327
+
328
+ # Maps nice developer param names to CLI arguments
329
+ hash.map do |k, v|
330
+ v ||= ""
331
+ if arg = ARGS_MAP[k]
332
+ value = (v != true && v.to_s.length > 0 ? "\"#{v}\"" : "")
333
+ "#{arg} #{value}".strip
334
+ elsif k == :build_settings
335
+ v.map do |setting, val|
336
+ val = clean_build_setting_value(val)
337
+ "#{setting}=\"#{val}\""
338
+ end.join(' ')
339
+ elsif k == :destination
340
+ [*v].collect { |dst| "-destination \"#{dst}\"" }.join(' ')
341
+ elsif k == :keychain && v.to_s.length > 0
342
+ # If keychain is specified, append as OTHER_CODE_SIGN_FLAGS
343
+ "OTHER_CODE_SIGN_FLAGS=\"--keychain #{v}\""
344
+ elsif k == :xcargs && v.to_s.length > 0
345
+ # Add more xcodebuild arguments
346
+ "#{v}"
347
+ end
348
+ end.compact
349
+ end
350
+
351
+ # Cleans values for build settings
352
+ # Only escaping `$(inherit)` types of values since "sh"
353
+ # interprets these as sub-commands instead of passing value into xcodebuild
354
+ def self.clean_build_setting_value(value)
355
+ value.to_s.gsub('$(', '\\$(')
356
+ end
357
+
358
+ def self.detect_workspace
359
+ workspace = nil
360
+ workspaces = Dir.glob("*.xcworkspace")
361
+
362
+ if workspaces.length > 1
363
+ UI.important("Multiple workspaces detected.")
364
+ end
365
+
366
+ unless workspaces.empty?
367
+ workspace = workspaces.first
368
+ UI.important("Using workspace \"#{workspace}\"")
369
+ end
370
+
371
+ return workspace
372
+ end
373
+
374
+ def self.description
375
+ "Use the `xcodebuild` command to build and sign your app"
376
+ end
377
+
378
+ def self.available_options
379
+ [
380
+ ['archive', 'Set to true to build archive'],
381
+ ['archive_path', 'The path to archive the to. Must contain `.xcarchive`'],
382
+ ['workspace', 'The workspace to use'],
383
+ ['scheme', 'The scheme to build'],
384
+ ['build_settings', 'Hash of additional build information'],
385
+ ['xcargs', 'Pass additional xcodebuild options'],
386
+ ['output_style', 'Set the output format to one of: :standard (Colored UTF8 output, default), :basic (black & white ASCII output)'],
387
+ ['buildlog_path', 'The path where the xcodebuild.log will be created, by default it is created in ~/Library/Logs/fastlane/xcbuild'],
388
+ ['raw_buildlog', 'Set to true to see xcodebuild raw output. Default value is false'],
389
+ ['xcpretty_output', 'specifies the output type for xcpretty. eg. \'test\', or \'simple\''],
390
+ ['xcpretty_utf', 'Specifies xcpretty should use utf8 when reporting builds. This has no effect when raw_buildlog is specified.']
391
+ ]
392
+ end
393
+
394
+ def self.details
395
+ "**Note**: `xcodebuild` is a complex command, so it is recommended to use [_gym_](https://docs.fastlane.tools/actions/gym/) for building your ipa file and [_scan_](https://docs.fastlane.tools/actions/scan/) for testing your app instead."
396
+ end
397
+
398
+ def self.author
399
+ "dtrenz"
400
+ end
401
+ end
402
+
403
+ class XcarchiveAction < Action
404
+ def self.run(params)
405
+ params_hash = params || {}
406
+ params_hash[:archive] = true
407
+ XcodebuildAction.run(params_hash)
408
+ end
409
+
410
+ def self.description
411
+ "Archives the project using `xcodebuild`"
412
+ end
413
+
414
+ def self.example_code
415
+ [
416
+ 'xcarchive'
417
+ ]
418
+ end
419
+
420
+ def self.category
421
+ :building
422
+ end
423
+
424
+ def self.author
425
+ "dtrenz"
426
+ end
427
+
428
+ def self.is_supported?(platform)
429
+ [:ios, :mac].include? platform
430
+ end
431
+
432
+ def self.available_options
433
+ [
434
+ ['archive_path', 'The path to archive the to. Must contain `.xcarchive`'],
435
+ ['workspace', 'The workspace to use'],
436
+ ['scheme', 'The scheme to build'],
437
+ ['build_settings', 'Hash of additional build information'],
438
+ ['xcargs', 'Pass additional xcodebuild options'],
439
+ ['output_style', 'Set the output format to one of: :standard (Colored UTF8 output, default), :basic (black & white ASCII output)'],
440
+ ['buildlog_path', 'The path where the xcodebuild.log will be created, by default it is created in ~/Library/Logs/fastlane/xcbuild'],
441
+ ['raw_buildlog', 'Set to true to see xcodebuild raw output. Default value is false'],
442
+ ['xcpretty_output', 'specifies the output type for xcpretty. eg. \'test\', or \'simple\''],
443
+ ['xcpretty_utf', 'Specifies xcpretty should use utf8 when reporting builds. This has no effect when raw_buildlog is specified.']
444
+ ]
445
+ end
446
+ end
447
+
448
+ class XcbuildAction < Action
449
+ def self.run(params)
450
+ params_hash = params || {}
451
+ params_hash[:build] = true
452
+ XcodebuildAction.run(params_hash)
453
+ end
454
+
455
+ def self.example_code
456
+ [
457
+ 'xcbuild'
458
+ ]
459
+ end
460
+
461
+ def self.category
462
+ :building
463
+ end
464
+
465
+ def self.description
466
+ "Builds the project using `xcodebuild`"
467
+ end
468
+
469
+ def self.author
470
+ "dtrenz"
471
+ end
472
+
473
+ def self.is_supported?(platform)
474
+ [:ios, :mac].include? platform
475
+ end
476
+
477
+ def self.available_options
478
+ [
479
+ ['archive', 'Set to true to build archive'],
480
+ ['archive_path', 'The path to archive the to. Must contain `.xcarchive`'],
481
+ ['workspace', 'The workspace to use'],
482
+ ['scheme', 'The scheme to build'],
483
+ ['build_settings', 'Hash of additional build information'],
484
+ ['xcargs', 'Pass additional xcodebuild options'],
485
+ ['output_style', 'Set the output format to one of: :standard (Colored UTF8 output, default), :basic (black & white ASCII output)'],
486
+ ['buildlog_path', 'The path where the xcodebuild.log will be created, by default it is created in ~/Library/Logs/fastlane/xcbuild'],
487
+ ['raw_buildlog', 'Set to true to see xcodebuild raw output. Default value is false'],
488
+ ['xcpretty_output', 'specifies the output type for xcpretty. eg. \'test\', or \'simple\''],
489
+ ['xcpretty_utf', 'Specifies xcpretty should use utf8 when reporting builds. This has no effect when raw_buildlog is specified.']
490
+ ]
491
+ end
492
+ end
493
+
494
+ class XccleanAction < Action
495
+ def self.run(params)
496
+ params_hash = params || {}
497
+ params_hash[:clean] = true
498
+ XcodebuildAction.run(params_hash)
499
+ end
500
+
501
+ def self.description
502
+ "Cleans the project using `xcodebuild`"
503
+ end
504
+
505
+ def self.example_code
506
+ [
507
+ 'xcclean'
508
+ ]
509
+ end
510
+
511
+ def self.category
512
+ :building
513
+ end
514
+
515
+ def self.author
516
+ "dtrenz"
517
+ end
518
+
519
+ def self.is_supported?(platform)
520
+ [:ios, :mac].include? platform
521
+ end
522
+
523
+ def self.available_options
524
+ [
525
+ ['archive', 'Set to true to build archive'],
526
+ ['archive_path', 'The path to archive the to. Must contain `.xcarchive`'],
527
+ ['workspace', 'The workspace to use'],
528
+ ['scheme', 'The scheme to build'],
529
+ ['build_settings', 'Hash of additional build information'],
530
+ ['xcargs', 'Pass additional xcodebuild options'],
531
+ ['output_style', 'Set the output format to one of: :standard (Colored UTF8 output, default), :basic (black & white ASCII output)'],
532
+ ['buildlog_path', 'The path where the xcodebuild.log will be created, by default it is created in ~/Library/Logs/fastlane/xcbuild'],
533
+ ['raw_buildlog', 'Set to true to see xcodebuild raw output. Default value is false'],
534
+ ['xcpretty_output', 'specifies the output type for xcpretty. eg. \'test\', or \'simple\''],
535
+ ['xcpretty_utf', 'Specifies xcpretty should use utf8 when reporting builds. This has no effect when raw_buildlog is specified.']
536
+ ]
537
+ end
538
+ end
539
+
540
+ class XcexportAction < Action
541
+ def self.run(params)
542
+ params_hash = params || {}
543
+ params_hash[:export_archive] = true
544
+ XcodebuildAction.run(params_hash)
545
+ end
546
+
547
+ def self.description
548
+ "Exports the project using `xcodebuild`"
549
+ end
550
+
551
+ def self.example_code
552
+ [
553
+ 'xcexport'
554
+ ]
555
+ end
556
+
557
+ def self.category
558
+ :building
559
+ end
560
+
561
+ def self.author
562
+ "dtrenz"
563
+ end
564
+
565
+ def self.available_options
566
+ [
567
+ ['archive', 'Set to true to build archive'],
568
+ ['archive_path', 'The path to archive the to. Must contain `.xcarchive`'],
569
+ ['workspace', 'The workspace to use'],
570
+ ['scheme', 'The scheme to build'],
571
+ ['build_settings', 'Hash of additional build information'],
572
+ ['xcargs', 'Pass additional xcodebuild options'],
573
+ ['output_style', 'Set the output format to one of: :standard (Colored UTF8 output, default), :basic (black & white ASCII output)'],
574
+ ['buildlog_path', 'The path where the xcodebuild.log will be created, by default it is created in ~/Library/Logs/fastlane/xcbuild'],
575
+ ['raw_buildlog', 'Set to true to see xcodebuild raw output. Default value is false'],
576
+ ['xcpretty_output', 'specifies the output type for xcpretty. eg. \'test\', or \'simple\''],
577
+ ['xcpretty_utf', 'Specifies xcpretty should use utf8 when reporting builds. This has no effect when raw_buildlog is specified.']
578
+ ]
579
+ end
580
+
581
+ def self.is_supported?(platform)
582
+ [:ios, :mac].include? platform
583
+ end
584
+ end
585
+
586
+ class XctestAction < Action
587
+ def self.run(params)
588
+ UI.important("Have you seen the new 'scan' tool to run tests? https://docs.fastlane.tools/actions/scan/")
589
+ params_hash = params || {}
590
+ params_hash[:build] = true
591
+ params_hash[:test] = true
592
+
593
+ XcodebuildAction.run(params_hash)
594
+ end
595
+
596
+ def self.example_code
597
+ [
598
+ 'xctest(
599
+ destination: "name=iPhone 7s,OS=10.0"
600
+ )'
601
+ ]
602
+ end
603
+
604
+ def self.category
605
+ :building
606
+ end
607
+
608
+ def self.description
609
+ "Runs tests on the given simulator"
610
+ end
611
+
612
+ def self.available_options
613
+ [
614
+ ['archive', 'Set to true to build archive'],
615
+ ['archive_path', 'The path to archive the to. Must contain `.xcarchive`'],
616
+ ['workspace', 'The workspace to use'],
617
+ ['scheme', 'The scheme to build'],
618
+ ['build_settings', 'Hash of additional build information'],
619
+ ['xcargs', 'Pass additional xcodebuild options'],
620
+ ['destination', 'The simulator to use, e.g. "name=iPhone 5s,OS=8.1"'],
621
+ ['destination_timeout', 'The timeout for connecting to the simulator, in seconds'],
622
+ ['enable_code_coverage', 'Turn code coverage on or off when testing. eg. true|false. Requires Xcode 7+'],
623
+ ['output_style', 'Set the output format to one of: :standard (Colored UTF8 output, default), :basic (black & white ASCII output)'],
624
+ ['buildlog_path', 'The path where the xcodebuild.log will be created, by default it is created in ~/Library/Logs/fastlane/xcbuild'],
625
+ ['raw_buildlog', 'Set to true to see xcodebuild raw output. Default value is false'],
626
+ ['xcpretty_output', 'specifies the output type for xcpretty. eg. \'test\', or \'simple\''],
627
+ ['xcpretty_utf', 'Specifies xcpretty should use utf8 when reporting builds. This has no effect when raw_buildlog is specified.']
628
+ ]
629
+ end
630
+
631
+ def self.is_supported?(platform)
632
+ [:ios, :mac].include? platform
633
+ end
634
+
635
+ def self.author
636
+ "dtrenz"
637
+ end
638
+ end
639
+ end
640
+ end
641
+ # rubocop:enable all