fastlane 1.111.0 → 2.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (558) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +76 -111
  3. data/bin/bin-proxy +19 -0
  4. data/cert/README.md +163 -0
  5. data/cert/lib/cert.rb +18 -0
  6. data/cert/lib/cert/commands_generator.rb +51 -0
  7. data/cert/lib/cert/options.rb +67 -0
  8. data/cert/lib/cert/runner.rb +181 -0
  9. data/credentials_manager/README.md +62 -0
  10. data/credentials_manager/lib/credentials_manager.rb +12 -0
  11. data/credentials_manager/lib/credentials_manager/account_manager.rb +104 -0
  12. data/credentials_manager/lib/credentials_manager/appfile_config.rb +186 -0
  13. data/credentials_manager/lib/credentials_manager/cli.rb +65 -0
  14. data/deliver/README.md +271 -0
  15. data/deliver/lib/assets/DeliverfileDefault +10 -0
  16. data/deliver/lib/assets/ScreenshotsHelp +7 -0
  17. data/deliver/lib/assets/summary.html.erb +210 -0
  18. data/deliver/lib/deliver.rb +31 -0
  19. data/deliver/lib/deliver/app_screenshot.rb +226 -0
  20. data/deliver/lib/deliver/commands_generator.rb +150 -0
  21. data/deliver/lib/deliver/detect_values.rb +69 -0
  22. data/deliver/lib/deliver/download_screenshots.rb +46 -0
  23. data/deliver/lib/deliver/generate_summary.rb +9 -0
  24. data/deliver/lib/deliver/html_generator.rb +58 -0
  25. data/deliver/lib/deliver/loader.rb +18 -0
  26. data/deliver/lib/deliver/options.rb +269 -0
  27. data/deliver/lib/deliver/runner.rb +99 -0
  28. data/deliver/lib/deliver/setup.rb +78 -0
  29. data/deliver/lib/deliver/submit_for_review.rb +87 -0
  30. data/deliver/lib/deliver/upload_assets.rb +22 -0
  31. data/deliver/lib/deliver/upload_metadata.rb +191 -0
  32. data/deliver/lib/deliver/upload_price_tier.rb +21 -0
  33. data/deliver/lib/deliver/upload_screenshots.rb +110 -0
  34. data/fastlane/README.md +193 -0
  35. data/{lib → fastlane/lib}/assets/Actions.md.erb +0 -0
  36. data/{lib → fastlane/lib}/assets/AppfileTemplate +0 -0
  37. data/{lib → fastlane/lib}/assets/AppfileTemplateAndroid +0 -0
  38. data/{lib → fastlane/lib}/assets/AvailablePlugins.md.erb +0 -0
  39. data/{lib → fastlane/lib}/assets/DefaultFastfileTemplate +2 -2
  40. data/{lib → fastlane/lib}/assets/FastfileTemplateAndroid +2 -2
  41. data/{lib → fastlane/lib}/assets/completions/completion.bash +0 -0
  42. data/{lib → fastlane/lib}/assets/completions/completion.sh +0 -0
  43. data/{lib → fastlane/lib}/assets/completions/completion.zsh +0 -0
  44. data/{lib → fastlane/lib}/assets/custom_action_template.rb +0 -0
  45. data/{lib → fastlane/lib}/assets/mailgun_html_template.erb +0 -0
  46. data/{lib → fastlane/lib}/assets/report_template.xml.erb +0 -0
  47. data/{lib → fastlane/lib}/assets/s3_html_template.erb +0 -0
  48. data/{lib → fastlane/lib}/assets/s3_plist_template.erb +0 -0
  49. data/{lib → fastlane/lib}/assets/s3_version_template.erb +0 -0
  50. data/{lib → fastlane/lib}/fastlane.rb +3 -3
  51. data/{lib → fastlane/lib}/fastlane/action.rb +0 -0
  52. data/{lib → fastlane/lib}/fastlane/action_collector.rb +0 -0
  53. data/{lib → fastlane/lib}/fastlane/actions/README.md +0 -0
  54. data/{lib → fastlane/lib}/fastlane/actions/actions_helper.rb +16 -0
  55. data/{lib → fastlane/lib}/fastlane/actions/adb.rb +0 -0
  56. data/{lib → fastlane/lib}/fastlane/actions/adb_devices.rb +0 -0
  57. data/{lib → fastlane/lib}/fastlane/actions/add_git_tag.rb +0 -0
  58. data/{lib → fastlane/lib}/fastlane/actions/app_store_build_number.rb +0 -0
  59. data/{lib → fastlane/lib}/fastlane/actions/appaloosa.rb +1 -0
  60. data/{lib → fastlane/lib}/fastlane/actions/appetize.rb +1 -0
  61. data/{lib → fastlane/lib}/fastlane/actions/appetize_viewing_url_generator.rb +1 -0
  62. data/{lib → fastlane/lib}/fastlane/actions/appium.rb +0 -0
  63. data/{lib → fastlane/lib}/fastlane/actions/appledoc.rb +0 -0
  64. data/{lib → fastlane/lib}/fastlane/actions/appstore.rb +0 -0
  65. data/{lib → fastlane/lib}/fastlane/actions/apteligent.rb +1 -0
  66. data/{lib → fastlane/lib}/fastlane/actions/artifactory.rb +2 -0
  67. data/{lib → fastlane/lib}/fastlane/actions/backup_file.rb +0 -0
  68. data/{lib → fastlane/lib}/fastlane/actions/backup_xcarchive.rb +0 -0
  69. data/{lib → fastlane/lib}/fastlane/actions/badge.rb +0 -0
  70. data/{lib → fastlane/lib}/fastlane/actions/build_and_upload_to_appetize.rb +1 -0
  71. data/{lib → fastlane/lib}/fastlane/actions/bundle_install.rb +0 -0
  72. data/{lib → fastlane/lib}/fastlane/actions/carthage.rb +1 -1
  73. data/{lib → fastlane/lib}/fastlane/actions/cert.rb +0 -4
  74. data/{lib → fastlane/lib}/fastlane/actions/changelog_from_git_commits.rb +0 -0
  75. data/{lib → fastlane/lib}/fastlane/actions/chatwork.rb +1 -0
  76. data/{lib → fastlane/lib}/fastlane/actions/clean_build_artifacts.rb +0 -0
  77. data/{lib → fastlane/lib}/fastlane/actions/clean_cocoapods_cache.rb +0 -0
  78. data/{lib → fastlane/lib}/fastlane/actions/clear_derived_data.rb +0 -0
  79. data/{lib → fastlane/lib}/fastlane/actions/clipboard.rb +0 -0
  80. data/{lib → fastlane/lib}/fastlane/actions/cloc.rb +0 -0
  81. data/{lib → fastlane/lib}/fastlane/actions/cocoapods.rb +0 -0
  82. data/{lib → fastlane/lib}/fastlane/actions/commit_version_bump.rb +0 -0
  83. data/{lib → fastlane/lib}/fastlane/actions/copy_artifacts.rb +0 -0
  84. data/{lib → fastlane/lib}/fastlane/actions/crashlytics.rb +2 -0
  85. data/{lib → fastlane/lib}/fastlane/actions/create_keychain.rb +1 -0
  86. data/{lib → fastlane/lib}/fastlane/actions/create_pull_request.rb +1 -0
  87. data/{lib → fastlane/lib}/fastlane/actions/danger.rb +1 -0
  88. data/{lib → fastlane/lib}/fastlane/actions/debug.rb +0 -0
  89. data/{lib → fastlane/lib}/fastlane/actions/default_platform.rb +0 -0
  90. data/{lib → fastlane/lib}/fastlane/actions/delete_keychain.rb +0 -0
  91. data/{lib → fastlane/lib}/fastlane/actions/deliver.rb +0 -4
  92. data/{lib → fastlane/lib}/fastlane/actions/deploygate.rb +34 -19
  93. data/{lib → fastlane/lib}/fastlane/actions/device_grid/README.md +0 -0
  94. data/{lib → fastlane/lib}/fastlane/actions/dotgpg_environment.rb +0 -0
  95. data/{lib → fastlane/lib}/fastlane/actions/download.rb +0 -0
  96. data/{lib → fastlane/lib}/fastlane/actions/download_dsyms.rb +0 -0
  97. data/{lib → fastlane/lib}/fastlane/actions/dsym_zip.rb +0 -0
  98. data/{lib → fastlane/lib}/fastlane/actions/ensure_git_branch.rb +0 -0
  99. data/{lib → fastlane/lib}/fastlane/actions/ensure_git_status_clean.rb +0 -0
  100. data/{lib → fastlane/lib}/fastlane/actions/ensure_no_debug_code.rb +10 -2
  101. data/{lib → fastlane/lib}/fastlane/actions/ensure_xcode_version.rb +0 -0
  102. data/{lib → fastlane/lib}/fastlane/actions/erb.rb +0 -0
  103. data/{lib → fastlane/lib}/fastlane/actions/fastlane_version.rb +0 -0
  104. data/{lib → fastlane/lib}/fastlane/actions/flock.rb +1 -0
  105. data/{lib → fastlane/lib}/fastlane/actions/frameit.rb +6 -10
  106. data/{lib → fastlane/lib}/fastlane/actions/gcovr.rb +0 -0
  107. data/{lib → fastlane/lib}/fastlane/actions/get_build_number.rb +0 -0
  108. data/{lib → fastlane/lib}/fastlane/actions/get_build_number_repository.rb +0 -0
  109. data/{lib → fastlane/lib}/fastlane/actions/get_github_release.rb +1 -0
  110. data/{lib → fastlane/lib}/fastlane/actions/get_info_plist_value.rb +0 -0
  111. data/{lib → fastlane/lib}/fastlane/actions/get_ipa_info_plist_value.rb +0 -0
  112. data/{lib → fastlane/lib}/fastlane/actions/get_version_number.rb +0 -0
  113. data/{lib → fastlane/lib}/fastlane/actions/git_add.rb +0 -0
  114. data/{lib → fastlane/lib}/fastlane/actions/git_branch.rb +0 -0
  115. data/{lib → fastlane/lib}/fastlane/actions/git_commit.rb +0 -0
  116. data/{lib → fastlane/lib}/fastlane/actions/git_pull.rb +0 -0
  117. data/{lib → fastlane/lib}/fastlane/actions/git_tag_exists.rb +0 -0
  118. data/{lib → fastlane/lib}/fastlane/actions/gradle.rb +0 -0
  119. data/fastlane/lib/fastlane/actions/gym.rb +84 -0
  120. data/{lib → fastlane/lib}/fastlane/actions/hg_add_tag.rb +0 -0
  121. data/{lib → fastlane/lib}/fastlane/actions/hg_commit_version_bump.rb +0 -0
  122. data/{lib → fastlane/lib}/fastlane/actions/hg_ensure_clean_status.rb +0 -0
  123. data/{lib → fastlane/lib}/fastlane/actions/hg_push.rb +0 -0
  124. data/{lib → fastlane/lib}/fastlane/actions/hipchat.rb +1 -0
  125. data/{lib → fastlane/lib}/fastlane/actions/hockey.rb +37 -11
  126. data/{lib → fastlane/lib}/fastlane/actions/ifttt.rb +1 -0
  127. data/{lib → fastlane/lib}/fastlane/actions/import.rb +0 -0
  128. data/{lib → fastlane/lib}/fastlane/actions/import_certificate.rb +2 -0
  129. data/{lib → fastlane/lib}/fastlane/actions/import_from_git.rb +0 -0
  130. data/{lib → fastlane/lib}/fastlane/actions/increment_build_number.rb +0 -0
  131. data/{lib → fastlane/lib}/fastlane/actions/increment_version_number.rb +0 -0
  132. data/{lib → fastlane/lib}/fastlane/actions/install_on_device.rb +0 -0
  133. data/{lib → fastlane/lib}/fastlane/actions/install_xcode_plugin.rb +0 -0
  134. data/{lib → fastlane/lib}/fastlane/actions/installr.rb +1 -0
  135. data/{lib → fastlane/lib}/fastlane/actions/ipa.rb +12 -4
  136. data/{lib → fastlane/lib}/fastlane/actions/is_ci.rb +0 -0
  137. data/{lib → fastlane/lib}/fastlane/actions/jazzy.rb +0 -0
  138. data/{lib → fastlane/lib}/fastlane/actions/jira.rb +1 -0
  139. data/{lib → fastlane/lib}/fastlane/actions/lane_context.rb +0 -0
  140. data/{lib → fastlane/lib}/fastlane/actions/last_git_commit.rb +0 -0
  141. data/{lib → fastlane/lib}/fastlane/actions/last_git_tag.rb +0 -0
  142. data/{lib → fastlane/lib}/fastlane/actions/latest_testflight_build_number.rb +0 -0
  143. data/{lib → fastlane/lib}/fastlane/actions/lcov.rb +0 -0
  144. data/{lib → fastlane/lib}/fastlane/actions/mailgun.rb +2 -0
  145. data/{lib → fastlane/lib}/fastlane/actions/make_changelog_from_jenkins.rb +0 -0
  146. data/{lib → fastlane/lib}/fastlane/actions/match.rb +3 -9
  147. data/{lib → fastlane/lib}/fastlane/actions/nexus_upload.rb +1 -0
  148. data/{lib → fastlane/lib}/fastlane/actions/notification.rb +0 -0
  149. data/{lib → fastlane/lib}/fastlane/actions/notify.rb +0 -0
  150. data/{lib → fastlane/lib}/fastlane/actions/number_of_commits.rb +0 -0
  151. data/{lib → fastlane/lib}/fastlane/actions/oclint.rb +0 -0
  152. data/{lib → fastlane/lib}/fastlane/actions/onesignal.rb +3 -0
  153. data/{lib → fastlane/lib}/fastlane/actions/opt_out_usage.rb +0 -0
  154. data/{lib → fastlane/lib}/fastlane/actions/pem.rb +9 -15
  155. data/{lib → fastlane/lib}/fastlane/actions/pilot.rb +6 -12
  156. data/{lib → fastlane/lib}/fastlane/actions/pod_lib_lint.rb +0 -0
  157. data/{lib → fastlane/lib}/fastlane/actions/pod_push.rb +0 -0
  158. data/{lib → fastlane/lib}/fastlane/actions/podio_item.rb +2 -0
  159. data/{lib → fastlane/lib}/fastlane/actions/produce.rb +7 -11
  160. data/{lib → fastlane/lib}/fastlane/actions/prompt.rb +5 -2
  161. data/{lib → fastlane/lib}/fastlane/actions/push_git_tags.rb +0 -0
  162. data/{lib → fastlane/lib}/fastlane/actions/push_to_git_remote.rb +0 -0
  163. data/{lib → fastlane/lib}/fastlane/actions/puts.rb +8 -0
  164. data/{lib → fastlane/lib}/fastlane/actions/read_podspec.rb +0 -0
  165. data/{lib → fastlane/lib}/fastlane/actions/recreate_schemes.rb +0 -0
  166. data/{lib → fastlane/lib}/fastlane/actions/register_devices.rb +0 -0
  167. data/{lib → fastlane/lib}/fastlane/actions/reset_git_repo.rb +0 -0
  168. data/fastlane/lib/fastlane/actions/reset_simulator_contents.rb +62 -0
  169. data/{lib → fastlane/lib}/fastlane/actions/resign.rb +0 -0
  170. data/{lib → fastlane/lib}/fastlane/actions/restore_file.rb +0 -0
  171. data/{lib → fastlane/lib}/fastlane/actions/rocket.rb +0 -0
  172. data/{lib → fastlane/lib}/fastlane/actions/rsync.rb +0 -0
  173. data/{lib → fastlane/lib}/fastlane/actions/s3.rb +2 -1
  174. data/{lib → fastlane/lib}/fastlane/actions/say.rb +0 -0
  175. data/{lib → fastlane/lib}/fastlane/actions/scan.rb +0 -4
  176. data/{lib → fastlane/lib}/fastlane/actions/scp.rb +1 -0
  177. data/{lib → fastlane/lib}/fastlane/actions/screengrab.rb +7 -13
  178. data/{lib → fastlane/lib}/fastlane/actions/set_build_number_repository.rb +0 -0
  179. data/{lib → fastlane/lib}/fastlane/actions/set_changelog.rb +0 -0
  180. data/{lib → fastlane/lib}/fastlane/actions/set_github_release.rb +1 -0
  181. data/{lib → fastlane/lib}/fastlane/actions/set_info_plist_value.rb +0 -0
  182. data/{lib → fastlane/lib}/fastlane/actions/set_pod_key.rb +0 -0
  183. data/{lib → fastlane/lib}/fastlane/actions/setup_jenkins.rb +0 -0
  184. data/{lib → fastlane/lib}/fastlane/actions/sigh.rb +9 -15
  185. data/{lib → fastlane/lib}/fastlane/actions/skip_docs.rb +0 -0
  186. data/{lib → fastlane/lib}/fastlane/actions/slack.rb +1 -0
  187. data/{lib → fastlane/lib}/fastlane/actions/slather.rb +0 -0
  188. data/{lib → fastlane/lib}/fastlane/actions/snapshot.rb +5 -11
  189. data/{lib → fastlane/lib}/fastlane/actions/sonar.rb +0 -0
  190. data/{lib → fastlane/lib}/fastlane/actions/splunkmint.rb +3 -0
  191. data/{lib → fastlane/lib}/fastlane/actions/ssh.rb +1 -0
  192. data/{lib → fastlane/lib}/fastlane/actions/supply.rb +9 -13
  193. data/{lib → fastlane/lib}/fastlane/actions/swiftlint.rb +0 -0
  194. data/{lib → fastlane/lib}/fastlane/actions/team_id.rb +0 -0
  195. data/{lib → fastlane/lib}/fastlane/actions/team_name.rb +0 -0
  196. data/{lib → fastlane/lib}/fastlane/actions/testfairy.rb +28 -9
  197. data/{lib → fastlane/lib}/fastlane/actions/testflight.rb +0 -0
  198. data/{lib → fastlane/lib}/fastlane/actions/tryouts.rb +1 -0
  199. data/{lib → fastlane/lib}/fastlane/actions/twitter.rb +4 -0
  200. data/{lib → fastlane/lib}/fastlane/actions/typetalk.rb +0 -0
  201. data/{lib → fastlane/lib}/fastlane/actions/unlock_keychain.rb +1 -0
  202. data/{lib → fastlane/lib}/fastlane/actions/update_app_group_identifiers.rb +0 -0
  203. data/{lib → fastlane/lib}/fastlane/actions/update_app_identifier.rb +0 -0
  204. data/{lib → fastlane/lib}/fastlane/actions/update_fastlane.rb +1 -20
  205. data/{lib → fastlane/lib}/fastlane/actions/update_icloud_container_identifiers.rb +0 -0
  206. data/{lib → fastlane/lib}/fastlane/actions/update_info_plist.rb +0 -0
  207. data/{lib → fastlane/lib}/fastlane/actions/update_project_code_signing.rb +0 -0
  208. data/{lib → fastlane/lib}/fastlane/actions/update_project_provisioning.rb +0 -0
  209. data/{lib → fastlane/lib}/fastlane/actions/update_project_team.rb +0 -0
  210. data/{lib → fastlane/lib}/fastlane/actions/update_urban_airship_configuration.rb +4 -0
  211. data/{lib → fastlane/lib}/fastlane/actions/update_url_schemes.rb +0 -0
  212. data/{lib → fastlane/lib}/fastlane/actions/upload_symbols_to_crashlytics.rb +1 -0
  213. data/{lib → fastlane/lib}/fastlane/actions/upload_symbols_to_sentry.rb +2 -0
  214. data/{lib → fastlane/lib}/fastlane/actions/verify_build.rb +0 -0
  215. data/{lib → fastlane/lib}/fastlane/actions/verify_pod_keys.rb +0 -0
  216. data/{lib → fastlane/lib}/fastlane/actions/verify_xcode.rb +0 -0
  217. data/{lib → fastlane/lib}/fastlane/actions/version_bump_podspec.rb +0 -0
  218. data/{lib → fastlane/lib}/fastlane/actions/version_get_podspec.rb +0 -0
  219. data/{lib → fastlane/lib}/fastlane/actions/xcode_install.rb +0 -0
  220. data/{lib → fastlane/lib}/fastlane/actions/xcode_select.rb +0 -0
  221. data/{lib → fastlane/lib}/fastlane/actions/xcode_server_get_assets.rb +1 -0
  222. data/{lib → fastlane/lib}/fastlane/actions/xcodebuild.rb +0 -0
  223. data/{lib → fastlane/lib}/fastlane/actions/xcov.rb +0 -0
  224. data/{lib → fastlane/lib}/fastlane/actions/xctool.rb +1 -1
  225. data/{lib → fastlane/lib}/fastlane/actions/xcversion.rb +0 -0
  226. data/{lib → fastlane/lib}/fastlane/actions/zip.rb +0 -0
  227. data/{lib → fastlane/lib}/fastlane/auto_complete.rb +0 -0
  228. data/fastlane/lib/fastlane/cli_tools_distributor.rb +125 -0
  229. data/{lib → fastlane/lib}/fastlane/command_line_handler.rb +0 -0
  230. data/{lib → fastlane/lib}/fastlane/commands_generator.rb +5 -4
  231. data/{lib → fastlane/lib}/fastlane/configuration_helper.rb +0 -1
  232. data/{lib → fastlane/lib}/fastlane/core_ext/bundler_monkey_patch.rb +0 -0
  233. data/{lib → fastlane/lib}/fastlane/documentation/actions_list.rb +1 -1
  234. data/{lib → fastlane/lib}/fastlane/documentation/docs_generator.rb +1 -1
  235. data/{lib → fastlane/lib}/fastlane/documentation/markdown_docs_generator.rb +0 -0
  236. data/{lib → fastlane/lib}/fastlane/environment_printer.rb +1 -1
  237. data/{lib → fastlane/lib}/fastlane/erb_template_helper.rb +0 -0
  238. data/{lib → fastlane/lib}/fastlane/fast_file.rb +1 -1
  239. data/{lib → fastlane/lib}/fastlane/fastlane_require.rb +27 -3
  240. data/{lib → fastlane/lib}/fastlane/features.rb +0 -0
  241. data/{lib → fastlane/lib}/fastlane/helper/README.md +0 -0
  242. data/{lib → fastlane/lib}/fastlane/helper/adb_helper.rb +0 -0
  243. data/{lib → fastlane/lib}/fastlane/helper/cocoapod_helper.rb +0 -0
  244. data/{lib → fastlane/lib}/fastlane/helper/crashlytics_helper.rb +0 -0
  245. data/{lib → fastlane/lib}/fastlane/helper/gem_helper.rb +0 -0
  246. data/{lib → fastlane/lib}/fastlane/helper/git_helper.rb +0 -0
  247. data/{lib → fastlane/lib}/fastlane/helper/gradle_helper.rb +0 -0
  248. data/{lib → fastlane/lib}/fastlane/helper/podspec_helper.rb +0 -0
  249. data/{lib → fastlane/lib}/fastlane/helper/sh_helper.rb +0 -0
  250. data/{lib → fastlane/lib}/fastlane/helper/xcversion_helper.rb +0 -0
  251. data/{lib → fastlane/lib}/fastlane/junit_generator.rb +1 -1
  252. data/{lib → fastlane/lib}/fastlane/lane.rb +0 -0
  253. data/{lib → fastlane/lib}/fastlane/lane_list.rb +0 -0
  254. data/{lib → fastlane/lib}/fastlane/lane_manager.rb +25 -6
  255. data/{lib → fastlane/lib}/fastlane/markdown_table_formatter.rb +0 -0
  256. data/{lib → fastlane/lib}/fastlane/new_action.rb +1 -1
  257. data/{lib → fastlane/lib}/fastlane/one_off.rb +0 -0
  258. data/{lib → fastlane/lib}/fastlane/other_action.rb +0 -0
  259. data/{lib → fastlane/lib}/fastlane/plugins/plugin_fetcher.rb +0 -0
  260. data/{lib → fastlane/lib}/fastlane/plugins/plugin_generator.rb +0 -0
  261. data/{lib → fastlane/lib}/fastlane/plugins/plugin_generator_ui.rb +0 -0
  262. data/{lib → fastlane/lib}/fastlane/plugins/plugin_info.rb +0 -0
  263. data/{lib → fastlane/lib}/fastlane/plugins/plugin_info_collector.rb +0 -0
  264. data/{lib → fastlane/lib}/fastlane/plugins/plugin_manager.rb +4 -4
  265. data/{lib → fastlane/lib}/fastlane/plugins/plugin_search.rb +0 -0
  266. data/{lib → fastlane/lib}/fastlane/plugins/plugin_update_manager.rb +0 -0
  267. data/{lib → fastlane/lib}/fastlane/plugins/plugins.rb +0 -0
  268. data/{lib → fastlane/lib}/fastlane/plugins/template/%gem_name%.gemspec.erb +3 -0
  269. data/{lib → fastlane/lib}/fastlane/plugins/template/.gitignore +0 -0
  270. data/{lib → fastlane/lib}/fastlane/plugins/template/.rspec +0 -0
  271. data/{lib → fastlane/lib}/fastlane/plugins/template/.rubocop.yml +0 -0
  272. data/{lib → fastlane/lib}/fastlane/plugins/template/.travis.yml +0 -0
  273. data/{lib → fastlane/lib}/fastlane/plugins/template/Gemfile +0 -0
  274. data/{lib → fastlane/lib}/fastlane/plugins/template/LICENSE.erb +0 -0
  275. data/{lib → fastlane/lib}/fastlane/plugins/template/README.md.erb +2 -2
  276. data/{lib → fastlane/lib}/fastlane/plugins/template/Rakefile +0 -0
  277. data/{lib → fastlane/lib}/fastlane/plugins/template/circle.yml +0 -0
  278. data/{lib → fastlane/lib}/fastlane/plugins/template/fastlane/Fastfile.erb +0 -0
  279. data/{lib → fastlane/lib}/fastlane/plugins/template/fastlane/Pluginfile.erb +0 -0
  280. data/{lib → fastlane/lib}/fastlane/plugins/template/lib/fastlane/plugin/%plugin_name%.rb.erb +0 -0
  281. data/{lib → fastlane/lib}/fastlane/plugins/template/lib/fastlane/plugin/%plugin_name%/actions/%plugin_name%_action.rb.erb +0 -0
  282. data/{lib → fastlane/lib}/fastlane/plugins/template/lib/fastlane/plugin/%plugin_name%/helper/%plugin_name%_helper.rb.erb +0 -0
  283. data/{lib → fastlane/lib}/fastlane/plugins/template/lib/fastlane/plugin/%plugin_name%/version.rb.erb +0 -0
  284. data/{lib → fastlane/lib}/fastlane/plugins/template/spec/%plugin_name%_action_spec.rb.erb +0 -0
  285. data/{lib → fastlane/lib}/fastlane/plugins/template/spec/spec_helper.rb.erb +0 -0
  286. data/{lib → fastlane/lib}/fastlane/runner.rb +25 -2
  287. data/{lib → fastlane/lib}/fastlane/setup/crashlytics_beta.rb +1 -1
  288. data/{lib → fastlane/lib}/fastlane/setup/crashlytics_beta_command_line_handler.rb +0 -0
  289. data/{lib → fastlane/lib}/fastlane/setup/crashlytics_beta_info.rb +0 -0
  290. data/{lib → fastlane/lib}/fastlane/setup/crashlytics_beta_info_collector.rb +0 -0
  291. data/{lib → fastlane/lib}/fastlane/setup/crashlytics_beta_ui.rb +0 -0
  292. data/{lib → fastlane/lib}/fastlane/setup/crashlytics_beta_user_email_fetcher.rb +0 -0
  293. data/{lib → fastlane/lib}/fastlane/setup/crashlytics_project_parser.rb +0 -0
  294. data/{lib → fastlane/lib}/fastlane/setup/setup.rb +2 -2
  295. data/{lib → fastlane/lib}/fastlane/setup/setup_android.rb +2 -2
  296. data/{lib → fastlane/lib}/fastlane/setup/setup_ios.rb +3 -3
  297. data/{lib → fastlane/lib}/fastlane/supported_platforms.rb +0 -0
  298. data/{lib → fastlane/lib}/fastlane/tools.rb +0 -0
  299. data/{lib → fastlane/lib}/fastlane/version.rb +2 -2
  300. data/fastlane_core/README.md +54 -0
  301. data/fastlane_core/lib/assets/XMLTemplate.xml.erb +12 -0
  302. data/fastlane_core/lib/fastlane_core.rb +48 -0
  303. data/fastlane_core/lib/fastlane_core/cert_checker.rb +94 -0
  304. data/fastlane_core/lib/fastlane_core/command_executor.rb +98 -0
  305. data/fastlane_core/lib/fastlane_core/configuration/commander_generator.rb +82 -0
  306. data/fastlane_core/lib/fastlane_core/configuration/config_item.rb +133 -0
  307. data/fastlane_core/lib/fastlane_core/configuration/configuration.rb +266 -0
  308. data/fastlane_core/lib/fastlane_core/configuration/configuration_file.rb +82 -0
  309. data/fastlane_core/lib/fastlane_core/core_ext/string.rb +17 -0
  310. data/fastlane_core/lib/fastlane_core/device_manager.rb +231 -0
  311. data/fastlane_core/lib/fastlane_core/env.rb +9 -0
  312. data/{lib/fastlane → fastlane_core/lib/fastlane_core}/fastlane_folder.rb +1 -11
  313. data/fastlane_core/lib/fastlane_core/feature/feature.rb +49 -0
  314. data/fastlane_core/lib/fastlane_core/features.rb +2 -0
  315. data/fastlane_core/lib/fastlane_core/helper.rb +240 -0
  316. data/fastlane_core/lib/fastlane_core/ipa_file_analyser.rb +55 -0
  317. data/fastlane_core/lib/fastlane_core/ipa_upload_package_builder.rb +44 -0
  318. data/fastlane_core/lib/fastlane_core/itunes_search_api.rb +48 -0
  319. data/fastlane_core/lib/fastlane_core/itunes_transporter.rb +409 -0
  320. data/fastlane_core/lib/fastlane_core/keychain_importer.rb +27 -0
  321. data/fastlane_core/lib/fastlane_core/languages.rb +11 -0
  322. data/fastlane_core/lib/fastlane_core/pkg_file_analyser.rb +42 -0
  323. data/fastlane_core/lib/fastlane_core/pkg_upload_package_builder.rb +44 -0
  324. data/fastlane_core/lib/fastlane_core/print_table.rb +63 -0
  325. data/fastlane_core/lib/fastlane_core/project.rb +450 -0
  326. data/fastlane_core/lib/fastlane_core/provisioning_profile.rb +69 -0
  327. data/fastlane_core/lib/fastlane_core/string_filters.rb +34 -0
  328. data/fastlane_core/lib/fastlane_core/tool_collector.rb +179 -0
  329. data/fastlane_core/lib/fastlane_core/ui/disable_colors.rb +17 -0
  330. data/fastlane_core/lib/fastlane_core/ui/fastlane_runner.rb +190 -0
  331. data/fastlane_core/lib/fastlane_core/ui/github_issue_inspector_reporter.rb +50 -0
  332. data/fastlane_core/lib/fastlane_core/ui/implementations/shell.rb +122 -0
  333. data/fastlane_core/lib/fastlane_core/ui/interface.rb +159 -0
  334. data/fastlane_core/lib/fastlane_core/ui/ui.rb +26 -0
  335. data/fastlane_core/lib/fastlane_core/update_checker/changelog.rb +37 -0
  336. data/fastlane_core/lib/fastlane_core/update_checker/update_checker.rb +198 -0
  337. data/fastlane_core/lib/fastlane_core/xcodebuild_list_output_parser.rb +28 -0
  338. data/frameit/README.md +284 -0
  339. data/frameit/lib/assets/empty.png +0 -0
  340. data/frameit/lib/frameit.rb +52 -0
  341. data/frameit/lib/frameit/commands_generator.rb +99 -0
  342. data/frameit/lib/frameit/config_parser.rb +98 -0
  343. data/frameit/lib/frameit/dependency_checker.rb +20 -0
  344. data/frameit/lib/frameit/device_types.rb +13 -0
  345. data/frameit/lib/frameit/editor.rb +351 -0
  346. data/frameit/lib/frameit/frame_downloader.rb +71 -0
  347. data/frameit/lib/frameit/mac_editor.rb +32 -0
  348. data/frameit/lib/frameit/offsets.rb +19 -0
  349. data/frameit/lib/frameit/options.rb +46 -0
  350. data/frameit/lib/frameit/runner.rb +45 -0
  351. data/frameit/lib/frameit/screenshot.rb +89 -0
  352. data/frameit/lib/frameit/strings_parser.rb +35 -0
  353. data/frameit/lib/frameit/template_finder.rb +36 -0
  354. data/gym/README.md +288 -0
  355. data/gym/lib/assets/GymfileTemplate +13 -0
  356. data/gym/lib/assets/package_application_patches/0001_codesign_args_patch.diff +38 -0
  357. data/gym/lib/assets/package_application_patches/0002_no_strict_parameter_patch.diff +42 -0
  358. data/gym/lib/assets/package_application_patches/PackageApplication_MD5 +2 -0
  359. data/gym/lib/assets/wrap_xcodebuild/xcbuild-safe.sh +58 -0
  360. data/gym/lib/gym.rb +49 -0
  361. data/gym/lib/gym/commands_generator.rb +62 -0
  362. data/gym/lib/gym/detect_values.rb +105 -0
  363. data/gym/lib/gym/error_handler.rb +186 -0
  364. data/gym/lib/gym/generators/README.md +1 -0
  365. data/gym/lib/gym/generators/build_command_generator.rb +136 -0
  366. data/gym/lib/gym/generators/package_command_generator.rb +58 -0
  367. data/gym/lib/gym/generators/package_command_generator_legacy.rb +102 -0
  368. data/gym/lib/gym/generators/package_command_generator_xcode7.rb +191 -0
  369. data/gym/lib/gym/manager.rb +17 -0
  370. data/gym/lib/gym/options.rb +254 -0
  371. data/gym/lib/gym/runner.rb +256 -0
  372. data/gym/lib/gym/xcode.rb +21 -0
  373. data/gym/lib/gym/xcodebuild_fixes/README.md +9 -0
  374. data/gym/lib/gym/xcodebuild_fixes/generic_archive_fix.rb +32 -0
  375. data/gym/lib/gym/xcodebuild_fixes/package_application_fix.rb +53 -0
  376. data/gym/lib/gym/xcodebuild_fixes/swift_fix.rb +99 -0
  377. data/gym/lib/gym/xcodebuild_fixes/watchkit2_fix.rb +35 -0
  378. data/gym/lib/gym/xcodebuild_fixes/watchkit_fix.rb +40 -0
  379. data/match/README.md +414 -0
  380. data/match/lib/assets/MatchfileTemplate +9 -0
  381. data/match/lib/assets/READMETemplate.md +49 -0
  382. data/match/lib/match.rb +57 -0
  383. data/match/lib/match/change_password.rb +30 -0
  384. data/match/lib/match/commands_generator.rb +120 -0
  385. data/match/lib/match/encrypt.rb +93 -0
  386. data/match/lib/match/generator.rb +74 -0
  387. data/match/lib/match/git_helper.rb +139 -0
  388. data/match/lib/match/nuke.rb +190 -0
  389. data/match/lib/match/options.rb +124 -0
  390. data/match/lib/match/runner.rb +172 -0
  391. data/match/lib/match/setup.rb +20 -0
  392. data/match/lib/match/spaceship_ensure.rb +78 -0
  393. data/match/lib/match/table_printer.rb +43 -0
  394. data/match/lib/match/utils.rb +59 -0
  395. data/pem/README.md +175 -0
  396. data/pem/lib/pem.rb +21 -0
  397. data/pem/lib/pem/commands_generator.rb +41 -0
  398. data/pem/lib/pem/manager.rb +93 -0
  399. data/pem/lib/pem/options.rb +79 -0
  400. data/pilot/README.md +285 -0
  401. data/pilot/lib/pilot.rb +22 -0
  402. data/pilot/lib/pilot/build_manager.rb +209 -0
  403. data/pilot/lib/pilot/commands_generator.rb +136 -0
  404. data/pilot/lib/pilot/features.rb +0 -0
  405. data/pilot/lib/pilot/manager.rb +71 -0
  406. data/pilot/lib/pilot/options.rb +161 -0
  407. data/pilot/lib/pilot/tester_exporter.rb +37 -0
  408. data/pilot/lib/pilot/tester_importer.rb +51 -0
  409. data/pilot/lib/pilot/tester_manager.rb +212 -0
  410. data/pilot/lib/pilot/tester_util.rb +23 -0
  411. data/produce/README.md +232 -0
  412. data/produce/lib/produce.rb +21 -0
  413. data/produce/lib/produce/available_default_languages.rb +36 -0
  414. data/produce/lib/produce/commands_generator.rb +134 -0
  415. data/produce/lib/produce/developer_center.rb +58 -0
  416. data/produce/lib/produce/group.rb +89 -0
  417. data/produce/lib/produce/itunes_connect.rb +87 -0
  418. data/produce/lib/produce/manager.rb +11 -0
  419. data/produce/lib/produce/options.rb +114 -0
  420. data/produce/lib/produce/service.rb +227 -0
  421. data/scan/README.md +219 -0
  422. data/scan/lib/assets/ScanfileTemplate +13 -0
  423. data/scan/lib/scan.rb +40 -0
  424. data/scan/lib/scan/commands_generator.rb +61 -0
  425. data/scan/lib/scan/detect_values.rb +184 -0
  426. data/scan/lib/scan/error_handler.rb +43 -0
  427. data/scan/lib/scan/manager.rb +17 -0
  428. data/scan/lib/scan/options.rb +189 -0
  429. data/scan/lib/scan/report_collector.rb +70 -0
  430. data/scan/lib/scan/runner.rb +103 -0
  431. data/scan/lib/scan/slack_poster.rb +59 -0
  432. data/scan/lib/scan/test_command_generator.rb +130 -0
  433. data/scan/lib/scan/test_result_parser.rb +21 -0
  434. data/screengrab/README.md +190 -0
  435. data/screengrab/lib/assets/ScreengrabfileTemplate +15 -0
  436. data/screengrab/lib/screengrab.rb +32 -0
  437. data/screengrab/lib/screengrab/android_environment.rb +88 -0
  438. data/screengrab/lib/screengrab/commands_generator.rb +60 -0
  439. data/screengrab/lib/screengrab/dependency_checker.rb +56 -0
  440. data/screengrab/lib/screengrab/detect_values.rb +16 -0
  441. data/screengrab/lib/screengrab/options.rb +109 -0
  442. data/screengrab/lib/screengrab/page.html.erb +206 -0
  443. data/screengrab/lib/screengrab/runner.rb +336 -0
  444. data/screengrab/lib/screengrab/setup.rb +16 -0
  445. data/sigh/README.md +256 -0
  446. data/sigh/lib/assets/resign.sh +774 -0
  447. data/sigh/lib/sigh.rb +19 -0
  448. data/sigh/lib/sigh/commands_generator.rb +133 -0
  449. data/sigh/lib/sigh/download_all.rb +36 -0
  450. data/sigh/lib/sigh/local_manage.rb +140 -0
  451. data/sigh/lib/sigh/manager.rb +44 -0
  452. data/sigh/lib/sigh/options.rb +117 -0
  453. data/sigh/lib/sigh/repair.rb +30 -0
  454. data/sigh/lib/sigh/resign.rb +201 -0
  455. data/sigh/lib/sigh/runner.rb +235 -0
  456. data/snapshot/README.md +400 -0
  457. data/snapshot/lib/assets/SnapfileTemplate +36 -0
  458. data/snapshot/lib/assets/SnapshotHelper.swift +138 -0
  459. data/snapshot/lib/assets/SnapshotHelper2-3.swift +140 -0
  460. data/snapshot/lib/snapshot.rb +59 -0
  461. data/snapshot/lib/snapshot/collector.rb +92 -0
  462. data/snapshot/lib/snapshot/commands_generator.rb +108 -0
  463. data/snapshot/lib/snapshot/dependency_checker.rb +50 -0
  464. data/snapshot/lib/snapshot/detect_values.rb +53 -0
  465. data/snapshot/lib/snapshot/error_handler.rb +22 -0
  466. data/snapshot/lib/snapshot/fixes/README.md +5 -0
  467. data/snapshot/lib/snapshot/fixes/hardware_keyboard_fix.rb +14 -0
  468. data/snapshot/lib/snapshot/fixes/simulator_zoom_fix.rb +25 -0
  469. data/snapshot/lib/snapshot/latest_os_version.rb +31 -0
  470. data/snapshot/lib/snapshot/options.rb +161 -0
  471. data/snapshot/lib/snapshot/page.html.erb +206 -0
  472. data/snapshot/lib/snapshot/reports_generator.rb +64 -0
  473. data/snapshot/lib/snapshot/reset_simulators.rb +88 -0
  474. data/snapshot/lib/snapshot/runner.rb +294 -0
  475. data/snapshot/lib/snapshot/screenshot_flatten.rb +18 -0
  476. data/snapshot/lib/snapshot/screenshot_rotate.rb +38 -0
  477. data/snapshot/lib/snapshot/setup.rb +35 -0
  478. data/snapshot/lib/snapshot/test_command_generator.rb +118 -0
  479. data/snapshot/lib/snapshot/update.rb +29 -0
  480. data/spaceship/README.md +191 -0
  481. data/spaceship/lib/assets/languageMapping.json +240 -0
  482. data/spaceship/lib/assets/languageMappingReadable.json +30 -0
  483. data/spaceship/lib/spaceship.rb +31 -0
  484. data/spaceship/lib/spaceship/babosa_fix.rb +30 -0
  485. data/spaceship/lib/spaceship/base.rb +236 -0
  486. data/spaceship/lib/spaceship/client.rb +487 -0
  487. data/spaceship/lib/spaceship/commands_generator.rb +48 -0
  488. data/spaceship/lib/spaceship/du/du_client.rb +122 -0
  489. data/spaceship/lib/spaceship/du/upload_file.rb +56 -0
  490. data/spaceship/lib/spaceship/du/utilities.rb +81 -0
  491. data/spaceship/lib/spaceship/helper/net_http_generic_request.rb +14 -0
  492. data/spaceship/lib/spaceship/helper/plist_middleware.rb +15 -0
  493. data/spaceship/lib/spaceship/launcher.rb +94 -0
  494. data/spaceship/lib/spaceship/playground.rb +72 -0
  495. data/spaceship/lib/spaceship/portal/app.rb +148 -0
  496. data/spaceship/lib/spaceship/portal/app_group.rb +77 -0
  497. data/spaceship/lib/spaceship/portal/app_service.rb +278 -0
  498. data/spaceship/lib/spaceship/portal/certificate.rb +333 -0
  499. data/spaceship/lib/spaceship/portal/device.rb +192 -0
  500. data/spaceship/lib/spaceship/portal/portal.rb +8 -0
  501. data/spaceship/lib/spaceship/portal/portal_base.rb +13 -0
  502. data/spaceship/lib/spaceship/portal/portal_client.rb +491 -0
  503. data/spaceship/lib/spaceship/portal/provisioning_profile.rb +467 -0
  504. data/spaceship/lib/spaceship/portal/spaceship.rb +112 -0
  505. data/spaceship/lib/spaceship/portal/ui/select_team.rb +83 -0
  506. data/spaceship/lib/spaceship/spaceauth_runner.rb +50 -0
  507. data/spaceship/lib/spaceship/tunes/app_details.rb +139 -0
  508. data/spaceship/lib/spaceship/tunes/app_image.rb +55 -0
  509. data/spaceship/lib/spaceship/tunes/app_ratings.rb +107 -0
  510. data/spaceship/lib/spaceship/tunes/app_screenshot.rb +17 -0
  511. data/spaceship/lib/spaceship/tunes/app_status.rb +60 -0
  512. data/spaceship/lib/spaceship/tunes/app_submission.rb +136 -0
  513. data/spaceship/lib/spaceship/tunes/app_trailer.rb +68 -0
  514. data/spaceship/lib/spaceship/tunes/app_version.rb +766 -0
  515. data/spaceship/lib/spaceship/tunes/app_version_common.rb +33 -0
  516. data/spaceship/lib/spaceship/tunes/app_version_generated_promocodes.rb +35 -0
  517. data/spaceship/lib/spaceship/tunes/app_version_history.rb +59 -0
  518. data/spaceship/lib/spaceship/tunes/app_version_promocodes.rb +34 -0
  519. data/spaceship/lib/spaceship/tunes/app_version_ref.rb +19 -0
  520. data/spaceship/lib/spaceship/tunes/app_version_states_history.rb +34 -0
  521. data/spaceship/lib/spaceship/tunes/application.rb +437 -0
  522. data/spaceship/lib/spaceship/tunes/build.rb +269 -0
  523. data/spaceship/lib/spaceship/tunes/build_details.rb +48 -0
  524. data/spaceship/lib/spaceship/tunes/build_train.rb +182 -0
  525. data/spaceship/lib/spaceship/tunes/device_type.rb +14 -0
  526. data/spaceship/lib/spaceship/tunes/language_converter.rb +63 -0
  527. data/spaceship/lib/spaceship/tunes/language_item.rb +56 -0
  528. data/spaceship/lib/spaceship/tunes/pricing_tier.rb +81 -0
  529. data/spaceship/lib/spaceship/tunes/recovery_device.rb +69 -0
  530. data/spaceship/lib/spaceship/tunes/spaceship.rb +34 -0
  531. data/spaceship/lib/spaceship/tunes/tester.rb +283 -0
  532. data/spaceship/lib/spaceship/tunes/transit_app_file.rb +27 -0
  533. data/spaceship/lib/spaceship/tunes/tunes.rb +35 -0
  534. data/spaceship/lib/spaceship/tunes/tunes_base.rb +15 -0
  535. data/spaceship/lib/spaceship/tunes/tunes_client.rb +1068 -0
  536. data/spaceship/lib/spaceship/tunes/user_detail.rb +19 -0
  537. data/spaceship/lib/spaceship/tunes/version_set.rb +35 -0
  538. data/spaceship/lib/spaceship/two_step_client.rb +195 -0
  539. data/spaceship/lib/spaceship/ui.rb +27 -0
  540. data/supply/README.md +214 -0
  541. data/supply/lib/supply.rb +29 -0
  542. data/supply/lib/supply/apk_listing.rb +14 -0
  543. data/supply/lib/supply/client.rb +345 -0
  544. data/supply/lib/supply/commands_generator.rb +62 -0
  545. data/supply/lib/supply/listing.rb +32 -0
  546. data/supply/lib/supply/options.rb +135 -0
  547. data/supply/lib/supply/setup.rb +102 -0
  548. data/supply/lib/supply/uploader.rb +221 -0
  549. metadata +699 -428
  550. data/bin//360/237/232/200 +0 -5
  551. data/lib/.DS_Store +0 -0
  552. data/lib/assets/.DS_Store +0 -0
  553. data/lib/assets/completions/.DS_Store +0 -0
  554. data/lib/fastlane/.DS_Store +0 -0
  555. data/lib/fastlane/actions/gym.rb +0 -90
  556. data/lib/fastlane/actions/reset_simulators.rb +0 -44
  557. data/lib/fastlane/cli_tools_distributor.rb +0 -100
  558. data/lib/fastlane/setup/.DS_Store +0 -0
@@ -0,0 +1,21 @@
1
+ module Gym
2
+ class Xcode
3
+ class << self
4
+ def xcode_path
5
+ Helper.xcode_path
6
+ end
7
+
8
+ def xcode_version
9
+ Helper.xcode_version
10
+ end
11
+
12
+ # Below Xcode 7 (which offers a new nice API to sign the app)
13
+ def pre_7?
14
+ UI.user_error!("Unable to locate Xcode. Please make sure to have Xcode installed on your machine") if xcode_version.nil?
15
+ v = xcode_version
16
+ is_pre = v.split('.')[0].to_i < 7
17
+ is_pre
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,9 @@
1
+ ## Fixes
2
+
3
+ This directory contains all the (hopefully temporary) work-arounds to make the `ipa` export work.
4
+
5
+ `xcodebuild` doesn't get the same set of features as Xcode does (e.g. WatchKit app export, Swift export and more)
6
+
7
+ This directory should be empty as soon as all those `xcodebuild` issues are fixed.
8
+
9
+ In the mean-time we have all the workarounds in one central place
@@ -0,0 +1,32 @@
1
+ require 'shellwords'
2
+
3
+ module Gym
4
+ class XcodebuildFixes
5
+ class << self
6
+ # Determine IPAs for the Watch App which aren't inside of a containing
7
+ # iOS App and removes them.
8
+ #
9
+ # In the future it may be nice to modify the plist file for the archive
10
+ # itself so that it points to the correct IPA as well.
11
+ #
12
+ # This is a workaround for this bug
13
+ # https://github.com/CocoaPods/CocoaPods/issues/4178
14
+ def generic_archive_fix
15
+ UI.verbose "Looking For Orphaned WatchKit2 Applications"
16
+
17
+ Dir.glob("#{BuildCommandGenerator.archive_path}/Products/Applications/*.app").each do |app_path|
18
+ if is_watchkit_app?(app_path)
19
+ UI.verbose "Removing Orphaned WatchKit2 Application #{app_path}"
20
+ FileUtils.rm_rf(app_path)
21
+ end
22
+ end
23
+ end
24
+
25
+ # Does this application have a WatchKit target
26
+ def is_watchkit_app?(app_path)
27
+ plist_path = "#{app_path}/Info.plist"
28
+ `/usr/libexec/PlistBuddy -c 'Print :DTSDKName' #{plist_path.shellescape} 2>&1`.match(/^\s*watchos2\.\d+\s*$/) != nil
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,53 @@
1
+ module Gym
2
+ class XcodebuildFixes
3
+ class << self
4
+ # Fix PackageApplication Perl script by Xcode to create the IPA from the archive
5
+ def patch_package_application
6
+ require 'fileutils'
7
+
8
+ # Initialization
9
+ @patched_package_application_path = File.join("/tmp", "PackageApplication4Gym")
10
+
11
+ return @patched_package_application_path if File.exist?(@patched_package_application_path)
12
+
13
+ Dir.mktmpdir do |tmpdir|
14
+ # Check current set of PackageApplication MD5 hashes
15
+ require 'digest'
16
+
17
+ path = File.join(Gym::ROOT, "lib/assets/package_application_patches/PackageApplication_MD5")
18
+ expected_md5_hashes = File.read(path).split("\n")
19
+
20
+ # If that location changes, search it using xcrun --sdk iphoneos -f PackageApplication
21
+ package_application_path = "#{Xcode.xcode_path}/Platforms/iPhoneOS.platform/Developer/usr/bin/PackageApplication"
22
+
23
+ UI.crash!("Unable to patch the `PackageApplication` script bundled in Xcode. This is not supported.") unless expected_md5_hashes.include?(Digest::MD5.file(package_application_path).hexdigest)
24
+
25
+ # Duplicate PackageApplication script to PackageApplication4Gym
26
+ FileUtils.copy_file(package_application_path, @patched_package_application_path)
27
+
28
+ # Apply patches to PackageApplication4Gym from patches folder
29
+ Dir[File.join(Gym::ROOT, "lib/assets/package_application_patches/*.diff")].each do |patch|
30
+ UI.verbose "Applying Package Application patch: #{File.basename(patch)}"
31
+ command = ["patch '#{@patched_package_application_path}' < '#{patch}'"]
32
+ Runner.new.print_command(command, "Applying Package Application patch: #{File.basename(patch)}") if $verbose
33
+
34
+ FastlaneCore::CommandExecutor.execute(command: command,
35
+ print_all: false,
36
+ print_command: $verbose,
37
+ error: proc do |output|
38
+ ErrorHandler.handle_package_error(output)
39
+ end)
40
+ end
41
+ end
42
+
43
+ return @patched_package_application_path # Return path to the patched PackageApplication
44
+ end
45
+
46
+ # Wrap xcodebuild to work-around ipatool dependecy to system ruby
47
+ def wrap_xcodebuild
48
+ require 'fileutils'
49
+ @wrapped_xcodebuild_path ||= File.join(Gym::ROOT, "lib/assets/wrap_xcodebuild/xcbuild-safe.sh")
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,99 @@
1
+ # encoding: utf-8
2
+ # from http://stackoverflow.com/a/9857493/445598
3
+ # because of
4
+ # `incompatible encoding regexp match (UTF-8 regexp with ASCII-8BIT string) (Encoding::CompatibilityError)`
5
+ require 'zip'
6
+
7
+ module Gym
8
+ class XcodebuildFixes
9
+ class << self
10
+ # Determine whether it is a Swift project and, eventually, include all required libraries to copy from Xcode's toolchain directory.
11
+ # Since there's no "xcodebuild" target to do just that, it is done post-build when exporting an archived build.
12
+ def swift_library_fix
13
+ require 'fileutils'
14
+
15
+ return if check_for_swift(PackageCommandGenerator)
16
+
17
+ UI.verbose "Packaging up the Swift Framework as the current app is a Swift app"
18
+ ipa_swift_frameworks = Dir["#{PackageCommandGenerator.appfile_path}/Frameworks/libswift*"]
19
+
20
+ Dir.mktmpdir do |tmpdir|
21
+ # Copy all necessary Swift libraries to a temporary "SwiftSupport" directory so that we can
22
+ # easily add it to the .ipa later.
23
+ swift_support = File.join(tmpdir, "SwiftSupport")
24
+
25
+ Dir.mkdir(swift_support)
26
+
27
+ ipa_swift_frameworks.each do |path|
28
+ framework = File.basename(path)
29
+
30
+ begin
31
+ toolchain_dir = toolchain_dir_name_for_toolchain(Gym.config[:toolchain])
32
+
33
+ from = File.join(Xcode.xcode_path, "Toolchains/#{toolchain_dir}/usr/lib/swift/iphoneos/#{framework}")
34
+ to = File.join(swift_support, framework)
35
+
36
+ UI.verbose("Copying Swift framework from '#{from}'")
37
+ FileUtils.copy_file(from, to)
38
+ rescue => ex
39
+ UI.error("Error copying over framework file. Please try running gym without the legacy build API enabled")
40
+ UI.error("For more information visit https://github.com/fastlane/fastlane/issues/5863")
41
+ UI.error("Missing file #{path} inside #{Xcode.xcode_path}")
42
+
43
+ if Gym.config[:toolchain].nil?
44
+ UI.important("If you're using Swift 2.3, but already updated to Xcode 8")
45
+ UI.important("try adding the following parameter to your gym call:")
46
+ UI.success("gym(use_legacy_build_api: true, toolchain: :swift_2_3)")
47
+ UI.message("or")
48
+ UI.success("gym --use_legacy_build_api --toolchain swift_2_3")
49
+ end
50
+
51
+ UI.user_error!(ex)
52
+ end
53
+ end
54
+
55
+ # Add "SwiftSupport" to the .ipa archive
56
+ Dir.chdir(tmpdir) do
57
+ command_parts = ["zip --recurse-paths '#{PackageCommandGenerator.ipa_path}' SwiftSupport"]
58
+ command_parts << "> /dev/null" unless $verbose
59
+
60
+ FastlaneCore::CommandExecutor.execute(command: command_parts,
61
+ print_all: false,
62
+ print_command: !Gym.config[:silent],
63
+ error: proc do |output|
64
+ ErrorHandler.handle_package_error(output)
65
+ end)
66
+ end
67
+ end
68
+ end
69
+
70
+ def toolchain_dir_name_for_toolchain(toolchain)
71
+ return "Swift_2.3.xctoolchain" if toolchain == "com.apple.dt.toolchain.Swift_2_3"
72
+
73
+ UI.error("No specific folder was found for toolchain #{toolchain}. Using the default toolchain location.") if toolchain
74
+ return "XcodeDefault.xctoolchain"
75
+ end
76
+
77
+ # @param the PackageCommandGenerator
78
+ # @return true if swift
79
+ def check_for_swift(pcg)
80
+ UI.verbose "Checking for Swift framework"
81
+ default_swift_libs = "#{pcg.appfile_path}/Frameworks/libswift.*" # note the extra ., this is a string representation of a regexp
82
+ zip_entries_matching(pcg.ipa_path, /#{default_swift_libs}/).count > 0
83
+ end
84
+
85
+ # return the entries (files or directories) in the zip matching the pattern
86
+ # @param zipfile a zipfile
87
+ # @return the files or directories matching the pattern
88
+ def zip_entries_matching(zipfile, file_pattern)
89
+ files = []
90
+ Zip::File.open(zipfile) do |zip_file|
91
+ zip_file.each do |entry|
92
+ files << entry.name if entry.name.force_encoding("utf-8").match file_pattern
93
+ end
94
+ end
95
+ files
96
+ end
97
+ end
98
+ end
99
+ end
@@ -0,0 +1,35 @@
1
+ module Gym
2
+ class XcodebuildFixes
3
+ class << self
4
+ # Determine whether this app has WatchKit2 support and manually package up the WatchKit2 framework
5
+ def watchkit2_fix
6
+ return unless watchkit2?
7
+
8
+ UI.verbose "Adding WatchKit2 support"
9
+
10
+ Dir.mktmpdir do |tmpdir|
11
+ # Make watchkit support directory
12
+ watchkit_support = File.join(tmpdir, "WatchKitSupport2")
13
+ Dir.mkdir(watchkit_support)
14
+
15
+ # Copy WK from Xcode into WatchKitSupport2
16
+ FileUtils.copy_file("#{Xcode.xcode_path}/Platforms/WatchOS.platform/Developer/SDKs/WatchOS.sdk/Library/Application Support/WatchKit/WK", File.join(watchkit_support, "WK"))
17
+
18
+ # Add "WatchKitSupport2" to the .ipa archive
19
+ Dir.chdir(tmpdir) do
20
+ abort unless system %(zip --recurse-paths "#{PackageCommandGenerator.ipa_path}" "WatchKitSupport2" > /dev/null)
21
+ end
22
+
23
+ UI.verbose "Successfully added WatchKit2 support"
24
+ end
25
+ end
26
+
27
+ # Does this application have a WatchKit target
28
+ def watchkit2?
29
+ Dir["#{PackageCommandGenerator.appfile_path}/**/*.plist"].any? do |plist_path|
30
+ `/usr/libexec/PlistBuddy -c 'Print DTSDKName' '#{plist_path}' 2>&1`.match(/^\s*watchos2\.\d+\s*$/)
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,40 @@
1
+ module Gym
2
+ class XcodebuildFixes
3
+ class << self
4
+ # Determine whether this app has WatchKit support and manually package up the WatchKit framework
5
+ def watchkit_fix
6
+ return unless should_apply_watchkit1_fix?
7
+
8
+ UI.verbose "Adding WatchKit support"
9
+
10
+ Dir.mktmpdir do |tmpdir|
11
+ # Make watchkit support directory
12
+ watchkit_support = File.join(tmpdir, "WatchKitSupport")
13
+ Dir.mkdir(watchkit_support)
14
+
15
+ # Copy WK from Xcode into WatchKitSupport
16
+ FileUtils.copy_file("#{Xcode.xcode_path}/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/Library/Application Support/WatchKit/WK", File.join(watchkit_support, "WK"))
17
+
18
+ # Add "WatchKitSupport" to the .ipa archive
19
+ Dir.chdir(tmpdir) do
20
+ abort unless system %(zip --recurse-paths "#{PackageCommandGenerator.ipa_path}" "WatchKitSupport" > /dev/null)
21
+ end
22
+
23
+ UI.verbose "Successfully added WatchKit support"
24
+ end
25
+ end
26
+
27
+ # Does this application have a WatchKit target
28
+ def watchkit?
29
+ Dir["#{PackageCommandGenerator.appfile_path}/**/*.plist"].any? do |plist_path|
30
+ `/usr/libexec/PlistBuddy -c 'Print WKWatchKitApp' '#{plist_path}' 2>&1`.strip == 'true'
31
+ end
32
+ end
33
+
34
+ # Should only be applied if watchkit app is not a watchkit2 app
35
+ def should_apply_watchkit1_fix?
36
+ watchkit? && !Gym::XcodebuildFixes.watchkit2?
37
+ end
38
+ end
39
+ end
40
+ end
data/match/README.md ADDED
@@ -0,0 +1,414 @@
1
+ <h3 align="center">
2
+ <a href="https://github.com/fastlane/fastlane/tree/master/fastlane">
3
+ <img src="../fastlane/assets/fastlane.png" width="150" />
4
+ <br />
5
+ fastlane
6
+ </a>
7
+ </h3>
8
+ <p align="center">
9
+ <a href="https://github.com/fastlane/fastlane/tree/master/deliver">deliver</a> &bull;
10
+ <a href="https://github.com/fastlane/fastlane/tree/master/snapshot">snapshot</a> &bull;
11
+ <a href="https://github.com/fastlane/fastlane/tree/master/frameit">frameit</a> &bull;
12
+ <a href="https://github.com/fastlane/fastlane/tree/master/pem">pem</a> &bull;
13
+ <a href="https://github.com/fastlane/fastlane/tree/master/sigh">sigh</a> &bull;
14
+ <a href="https://github.com/fastlane/fastlane/tree/master/produce">produce</a> &bull;
15
+ <a href="https://github.com/fastlane/fastlane/tree/master/cert">cert</a> &bull;
16
+ <a href="https://github.com/fastlane/fastlane/tree/master/spaceship">spaceship</a> &bull;
17
+ <a href="https://github.com/fastlane/fastlane/tree/master/pilot">pilot</a> &bull;
18
+ <a href="https://github.com/fastlane/boarding">boarding</a> &bull;
19
+ <a href="https://github.com/fastlane/fastlane/tree/master/gym">gym</a> &bull;
20
+ <a href="https://github.com/fastlane/fastlane/tree/master/scan">scan</a> &bull;
21
+ <b>match</b>
22
+ </p>
23
+ -------
24
+
25
+ <p align="center">
26
+ <img src="assets/match.png" height="110">
27
+ </p>
28
+
29
+ match
30
+ ============
31
+
32
+ [![Twitter: @FastlaneTools](https://img.shields.io/badge/contact-@FastlaneTools-blue.svg?style=flat)](https://twitter.com/FastlaneTools)
33
+ [![License](https://img.shields.io/badge/license-MIT-green.svg?style=flat)](https://github.com/fastlane/fastlane/blob/master/match/LICENSE)
34
+ [![Gem](https://img.shields.io/gem/v/match.svg?style=flat)](http://rubygems.org/gems/match)
35
+
36
+ ###### Easily sync your certificates and profiles across your team using git
37
+
38
+ A new approach to iOS code signing: Share one code signing identity across your development team to simplify your codesigning setup and prevent code signing issues.
39
+
40
+ `match` is the implementation of the https://codesigning.guide concept. `match` creates all required certificates & provisioning profiles and stores them in a separate git repository. Every team member with access to the repo can use those credentials for code signing. `match` also automatically repairs broken and expired credentials. It's the easiest way to share signing credentials across teams
41
+
42
+ [More information on how to get started with codesigning](/fastlane/docs/Codesigning)
43
+
44
+ -------
45
+ <p align="center">
46
+ <a href="#why-match">Why?</a> &bull;
47
+ <a href="#installation">Installation</a> &bull;
48
+ <a href="#usage">Usage</a> &bull;
49
+ <a href="#is-this-secure">Is this secure?</a> &bull;
50
+ <a href="#need-help">Need help?</a>
51
+ </p>
52
+
53
+ -------
54
+
55
+ <h5 align="center"><code>match</code> is part of <a href="https://fastlane.tools">fastlane</a>: The easiest way to automate beta deployments and releases for your iOS and Android apps.</h5>
56
+
57
+ ## Why match?
58
+
59
+ Before starting to use `match`, make sure to read the [codesigning.guide](https://codesigning.guide)
60
+
61
+ > When deploying an app to the App Store, beta testing service or even installing it on a device, most development teams have separate code signing identities for every member. This results in dozens of profiles including a lot of duplicates.
62
+
63
+ > You have to manually renew and download the latest set of provisioning profiles every time you add a new device or a certificate expires. Additionally this requires spending a lot of time when setting up a new machine that will build your app.
64
+
65
+ **A new approach**
66
+
67
+ > Share one code signing identity across your development team to simplify your setup and prevent code signing issues. What if there was a central place where your code signing identity and profiles are kept, so anyone in the team can access them during the build process?
68
+
69
+ ### Why not let Xcode handle all this?
70
+
71
+ - You have full control over what happens
72
+ - You have access to all the certificates and profiles, which are all securely stored in git
73
+ - You share one code signing identity across the team to have fewer certificates and profiles
74
+ - Xcode sometimes revokes certificates which breaks your setup causing failed builds
75
+ - More predictable builds by settings profiles in an explicit way instead of using the `Automatic` setting
76
+ - It just works™
77
+
78
+ ### What does `match` do for you?
79
+
80
+ | match
81
+ --------------------------|------------------------------------------------------------
82
+ :arrows_counterclockwise: | Automatically sync your iOS keys and profiles across all your team members using git
83
+ :package: | Handle all the heavy lifting of creating and storing your certificates and profiles
84
+ :computer: | Setup codesigning on a new machine in under a minute
85
+ :dart: | Designed to work with apps with multiple targets and bundle identifiers
86
+ :lock: | You have full control over your files and Git repo, no third party service involved
87
+ :sparkles: | Provisioning profile will always match the correct certificate
88
+ :boom: | Easily reset your existing profiles and certificates if your current account has expired or invalid profiles
89
+ :recycle: | Automatically renew your provisioning profiles to include all your devices using the `--force` option
90
+ :busts_in_silhouette: | Support for multiple Apple accounts and multiple teams
91
+ :sparkles: | Tightly integrated with [fastlane](https://fastlane.tools) to work seamlessly with [gym](https://github.com/fastlane/fastlane/tree/master/gym) and other build tools
92
+
93
+ For more information about the concept, visit [codesigning.guide](https://codesigning.guide).
94
+
95
+ ## Installation
96
+
97
+ ```
98
+ sudo gem install fastlane
99
+ ```
100
+
101
+ Make sure you have the latest version of the Xcode command line tools installed:
102
+
103
+ xcode-select --install
104
+
105
+ ## Usage
106
+
107
+ ### Setup
108
+
109
+ 1. Create a **new, private Git repo** (e.g. on [GitHub](https://github.com/new) or [BitBucket](https://bitbucket.org/repo/create)) and name it something like `certificates`. **Important:** Make sure the repository is set to *private*.
110
+
111
+ 2. Optional: Create a **new, shared Apple Developer Portal account**, something like `office@company.com` that will be shared across your team from now on (for more information visit [codesigning.guide](https://codesigning.guide))
112
+
113
+ 3. Run the following in your project folder to start using `match`:
114
+
115
+ ```
116
+ fastlane match init
117
+ ```
118
+
119
+ <img src="assets/match_init.gif" width="550" />
120
+
121
+ You'll be asked to enter the URL to your Git repo. This can be either a `https://` or a `git` URL. (If your machine is currently using SSH to authenticate with Github, you'll want to use a `git` URL, otherwise you may see an authentication error when you attempt to use match.) `fastlane match init` won't read or modify your certificates or profiles.
122
+
123
+ This will create a `Matchfile` in your current directory (or in your `./fastlane/` folder).
124
+
125
+ Example content (for more advanced setups check out the [fastlane section](#fastlane)):
126
+
127
+ ```ruby
128
+ git_url "https://github.com/fastlane/fastlane/tree/master/certificates"
129
+
130
+ app_identifier "tools.fastlane.app"
131
+ username "user@fastlane.tools"
132
+ ```
133
+
134
+ #### Important: Use one git branch per team
135
+
136
+ `match` also supports storing certificates of multiple teams in one repo, by using separate git branches. If you work in multiple teams, make sure to set the `git_branch` parameter to a unique value per team. From there, `match` will automatically create and use the specified branch for you.
137
+
138
+ ```ruby
139
+ match(git_branch: "team1", username: "user@team1.com")
140
+ match(git_branch: "team2", username: "user@team2.com")
141
+ ```
142
+
143
+ ### Run
144
+
145
+ > Before running `match` for the first time, you should consider clearing your existing profiles and certificates using the [match nuke command](#nuke).
146
+
147
+ After running `fastlane match init` you can run the following to generate new certificates and profiles:
148
+
149
+ ```
150
+ fastlane match appstore
151
+ ```
152
+
153
+ ```
154
+ fastlane match development
155
+ ```
156
+
157
+ <img src="assets/match_appstore_small.gif" width="550" />
158
+
159
+ This will create a new certificate and provisioning profile (if required) and store them in your Git repo. If you previously ran `match` it will automatically install the existing profiles from the Git repo.
160
+
161
+ The provisioning profiles are installed in `~/Library/MobileDevice/Provisioning Profiles` while the certificates and private keys are installed in your Keychain.
162
+
163
+ To get a more detailed output of what `match` is doing use
164
+
165
+ ```
166
+ fastlane match --verbose
167
+ ```
168
+
169
+ For a list of all available options run
170
+
171
+ ```
172
+ fastlane match --help
173
+ ```
174
+
175
+ #### Handle multiple targets
176
+
177
+ If you have several targets with different bundle identifiers, supply them as a comma-separated list to :
178
+
179
+ ```
180
+ fastlane match appstore -a tools.fastlane.app,tools.fastlane.app.watchkitapp
181
+ ```
182
+
183
+ You can make this even easier using [fastlane](https://github.com/fastlane/fastlane/tree/master/fastlane) by creating a `certificates` lane like this:
184
+
185
+ ```
186
+ lane :certificates do
187
+ match(app_identifier: ["com.krausefx.app1", "com.krausefx.app2", "com.krausefx.app3"], readonly: true)
188
+ end
189
+ ```
190
+
191
+ Then all your team has to do is `fastlane certificates` and keys, certs and profiles for all targets will be synced.
192
+
193
+ #### Passphrase
194
+
195
+ When running `match` for the first time on a new machine, it will ask you for the passphrase for the Git repository. This is an additional layer of security: each of the files will be encrypted using `openssl`. Make sure to remember the password, as you'll need it when you run match on a different machine.
196
+
197
+ To set the passphrase to decrypt your profiles using an environment variable, use `MATCH_PASSWORD`.
198
+
199
+ #### New machine
200
+
201
+ To set up the certificates and provisioning profiles on a new machine, you just run the same command using:
202
+
203
+ ```
204
+ fastlane match development
205
+ ```
206
+
207
+ You can also run `match` in a `readonly` mode to be sure it won't create any new certificates or profiles.
208
+
209
+ ```
210
+ fastlane match development --readonly
211
+ ```
212
+
213
+ #### Access Control
214
+
215
+ A benefit of using `match` is that it enables you to give the developers of your team access to the code signing certificates without having to give everyone access to the Developer Portal:
216
+
217
+ 1. Run `match` to store the certificates in a Git repo
218
+ 2. Grant access to the Git repo to your developers and give them the passphrase
219
+ 3. The developers can now run `match` which will install the latest code signing profiles so they can build and sign the application without having to have access to the developer portal
220
+ 4. Every time you run `match` to update the profiles (e.g. add a new device), all your developers will automatically get the latest profiles when running `match`
221
+
222
+ If you decide to run `match` without access to the developer portal, make sure to use the `--readonly` option so that the commands don't ask you for the password to the developer portal.
223
+
224
+ The advantage of this approach is that no one in your team will revoke a certificate by mistake. Additionally it is recommended to install the [FixCode Xcode Plugin](https://github.com/neonichu/FixCode) to disable the `Fix Issue` button.
225
+
226
+ #### Git Repo
227
+
228
+ After running `match` for the first time, your Git repo will contain 2 directories:
229
+
230
+ - The `certs` folder contains all certificates with their private keys
231
+ - The `profiles` folder contains all provisioning profiles
232
+
233
+ Additionally, `match` creates a nice repo `README.md` for you, making it easy to onboard new team members:
234
+
235
+ <p align="center">
236
+ <img src="assets/github_repo.png" width="700" />
237
+ </p>
238
+
239
+ #### fastlane
240
+
241
+ Add `match` to your `Fastfile` to automatically fetch the latest code signing certificates with [fastlane](https://fastlane.tools).
242
+
243
+ ```ruby
244
+ match(type: "appstore")
245
+
246
+ match(git_url: "https://github.com/fastlane/fastlane/tree/master/certificates",
247
+ type: "development")
248
+
249
+ match(git_url: "https://github.com/fastlane/fastlane/tree/master/certificates",
250
+ type: "adhoc",
251
+ app_identifier: "tools.fastlane.app")
252
+
253
+ # `match` should be called before building the app with `gym`
254
+ gym
255
+ ...
256
+ ```
257
+
258
+ ##### Registering new devices
259
+
260
+ By using `match`, you'll save a lot of time every time you add new device to your Ad Hoc or Development profiles. Use `match` in combination with the [`register_devices`](https://docs.fastlane.tools/actions#register_devices) action.
261
+
262
+ ```ruby
263
+ lane :beta do
264
+ register_devices(devices_file: "./devices.txt")
265
+ match(type: "adhoc", force_for_new_devices: true)
266
+ end
267
+ ```
268
+
269
+ By using the `force_for_new_devices` parameter, `match` will check if the device count has changed since the last time you ran `match`, and automatically re-generate the provisioning profile if necessary. You can also use `force: true` to re-generate the provisioning profile on each run.
270
+
271
+ If you're not using `fastlane`, you can also use the `force_for_new_devices` option from the command line:
272
+
273
+ ```
274
+ fastlane match adhoc --force_for_new_devices
275
+ ```
276
+
277
+ ##### Multiple Targets
278
+
279
+ If your app has multiple targets (e.g. Today Widget or WatchOS Extension)
280
+
281
+ ```ruby
282
+ match(app_identifier: ["tools.fastlane.app", "tools.fastlane.app.today_widget"], type: "appstore")
283
+ ```
284
+
285
+ `match` can even use the same one Git repository for all bundle identifiers.
286
+
287
+ ### Setup Xcode project
288
+
289
+ [Docs on how to set up your Xcode project](https://docs.fastlane.tools/codesigning/XcodeProject/)
290
+
291
+ #### To build from the command line using [fastlane](https://fastlane.tools)
292
+
293
+ `match` automatically pre-fills environment variables with the UUIDs of the correct provisioning profiles, ready to be used in your Xcode project.
294
+
295
+ More information about how to setup your Xcode project can be found [here](https://docs.fastlane.tools/codesigning/XcodeProject/)
296
+
297
+ #### To build from Xcode manually
298
+
299
+ This is useful when installing your application on your device using the Development profile.
300
+
301
+ You can statically select the right provisioning profile in your Xcode project (the name will be `match Development tools.fastlane.app`).
302
+
303
+ [Docs on how to set up your Xcode project](/fastlane/docs/Codesigning/XcodeProject.md)
304
+
305
+ ### Continuous Integration
306
+
307
+ #### Repo access
308
+ There is one tricky part of setting up a CI system to work with `match`, which is enabling the CI to access the repo. Usually you'd just add your CI's public ssh key as a deploy key to your `match` repo, but since your CI will already likely be using its public ssh key to access the codebase repo, [you won't be able to do that](https://help.github.com/articles/error-key-already-in-use/).
309
+
310
+ Some repo hosts might allow you to use the same deploy key for different repos, but GitHub will not. If your host does, you don't need to worry about this, just add your CI's public ssh key as a deploy key for your `match` repo and scroll down to "_Encryption password_".
311
+
312
+ There are a few ways around this:
313
+
314
+ 1. Create a new account on your repo host with read-only access to your `match` repo. Bitrise have a good description of this [here](http://devcenter.bitrise.io/docs/adding-projects-with-submodules).
315
+ 2. Some CIs allow you to upload your signing credentials manually, but obviously this means that you'll have to re-upload the profiles/keys/certs each time they change.
316
+
317
+ Neither solution is pretty. It's one of those _trade-off_ things. Do you care more about **not** having an extra account sitting around, or do you care more about having the :sparkles: of auto-syncing of credentials.
318
+
319
+ #### Encryption password
320
+ Once you've decided which approach to take, all that's left to do is to set your encryption password as secret environment variable named `MATCH_PASSWORD`. `match` will pick this up when it's run.
321
+
322
+ ### Nuke
323
+
324
+ If you never really cared about code signing and have a messy Apple Developer account with a lot of invalid, expired or Xcode managed profiles/certificates, you can use the `match nuke` command to revoke your certificates and provisioning profiles. Don't worry, apps that are already available in the App Store will still work. Builds distributed via TestFlight might be disabled after nuking your account, so you'll have to re-upload a new build. After clearing your account you'll start from a clean state, and you can run `match` to generate your certificates and profiles again.
325
+
326
+ To revoke all certificates and provisioning profiles for a specific environment:
327
+
328
+ ```sh
329
+ fastlane match nuke development
330
+ fastlane match nuke distribution
331
+ ```
332
+
333
+ <img src="assets/match_nuke.gif" width="550" />
334
+
335
+ You'll have to confirm a list of profiles / certificates that will be deleted.
336
+
337
+ ### Change Password
338
+
339
+ To change the password of your repo and therefore decrypting and encrypting all files run
340
+
341
+ ```
342
+ fastlane match change_password
343
+ ```
344
+
345
+ You'll be asked for the new password on all your machines on the next run.
346
+
347
+ ### Manual Decrypt
348
+
349
+ If you want to manually decrypt a file you can.
350
+
351
+ ```
352
+ openssl aes-256-cbc -k "<password>" -in "<fileYouWantToDecryptPath>" -out "<decryptedFilePath>" -a -d
353
+ ```
354
+
355
+
356
+ ## Is this secure?
357
+
358
+ Both your keys and provisioning profiles are encrypted using OpenSSL using a passphrase.
359
+
360
+ Storing your private keys in a Git repo may sound off-putting at first. We did an in-depth analysis of potential security issues and came to the following conclusions:
361
+
362
+ #### What could happen if someone stole a private key?
363
+
364
+ If attackers would have your certificate and provisioning profile, they could codesign an application with the same bundle identifier.
365
+
366
+ What's the worst that could happen for each of the profile types?
367
+
368
+ ##### App Store Profiles
369
+
370
+ An App Store profile can't be used for anything as long as it's not re-signed by Apple. The only way to get an app resigned is to submit an app for review which could take anywhere from 24 hours to a few days (checkout [appreviewtimes.com](http://appreviewtimes.com) for up-to-date expectations). Attackers could only submit an app for review, if they also got access to your iTunes Connect credentials (which are not stored in git, but in your local keychain). Additionally you get an email notification every time a build gets uploaded to cancel the submission even before your app gets into the review stage.
371
+
372
+ ##### Development and Ad Hoc Profiles
373
+
374
+ In general those profiles are harmless as they can only be used to install a signed application on a small subset of devices. To add new devices, the attacker would also need your Apple Developer Portal credentials (which are not stored in git, but in your local keychain).
375
+
376
+ ##### Enterprise Profiles
377
+
378
+ Attackers could use an In-House profile to distribute signed application to a potentially unlimited number of devices. All this would run under your company name and it could eventually lead to Apple revoking your In-House account. However it is very easy to revoke a certificate to remotely break the app on all devices.
379
+
380
+ Because of the potentially dangerous nature of In-House profiles we decided to not allow the use of `match` with enterprise accounts.
381
+
382
+ ##### To sum up
383
+
384
+ - You have full control over the access list of your Git repo, no third party service involved
385
+ - Even if your certificates are leaked, they can't be used to cause any harm without your iTunes Connect login credentials
386
+ - `match` does not currently support In-House Enterprise profiles as they are harder to control
387
+ - If you use GitHub or Bitbucket we encourage enabling 2 factor authentication for all accounts that have access to the certificates repo
388
+ - The complete source code of `match` is fully open source on [GitHub](https://github.com/fastlane/fastlane/tree/master/match)
389
+
390
+ ## [`fastlane`](https://fastlane.tools) Toolchain
391
+
392
+ - [`fastlane`](https://fastlane.tools): The easiest way to automate beta deployments and releases for your iOS and Android apps
393
+ - [`deliver`](https://github.com/fastlane/fastlane/tree/master/deliver): Upload screenshots, metadata and your app to the App Store
394
+ - [`snapshot`](https://github.com/fastlane/fastlane/tree/master/snapshot): Automate taking localized screenshots of your iOS app on every device
395
+ - [`frameit`](https://github.com/fastlane/fastlane/tree/master/frameit): Quickly put your screenshots into the right device frames
396
+ - [`pem`](https://github.com/fastlane/fastlane/tree/master/pem): Automatically generate and renew your push notification profiles
397
+ - [`produce`](https://github.com/fastlane/fastlane/tree/master/produce): Create new iOS apps on iTunes Connect and Dev Portal using the command line
398
+ - [`cert`](https://github.com/fastlane/fastlane/tree/master/cert): Automatically create and maintain iOS code signing certificates
399
+ - [`spaceship`](https://github.com/fastlane/fastlane/tree/master/spaceship): Ruby library to access the Apple Dev Center and iTunes Connect
400
+ - [`pilot`](https://github.com/fastlane/fastlane/tree/master/pilot): The best way to manage your TestFlight testers and builds from your terminal
401
+ - [`boarding`](https://github.com/fastlane/boarding): The easiest way to invite your TestFlight beta testers
402
+ - [`gym`](https://github.com/fastlane/fastlane/tree/master/gym): Building your iOS apps has never been easier
403
+ - [`scan`](https://github.com/fastlane/fastlane/tree/master/scan): The easiest way to run tests of your iOS and Mac app
404
+
405
+ # Need help?
406
+ Please submit an issue on GitHub and provide information about your setup
407
+
408
+ # Code of Conduct
409
+ Help us keep `match` open and inclusive. Please read and follow our [Code of Conduct](https://github.com/fastlane/fastlane/blob/master/CODE_OF_CONDUCT.md).
410
+
411
+ # License
412
+ This project is licensed under the terms of the MIT license. See the LICENSE file.
413
+
414
+ > This project and all fastlane tools are in no way affiliated with Apple Inc. This project is open source under the MIT license, which means you have full access to the source code and can modify it to fit your own needs. All fastlane tools run on your own computer or server, so your credentials or other sensitive information will never leave your own computer. You are responsible for how you use fastlane tools.