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,24 @@
1
+ require_relative 'module'
2
+
3
+ module Screengrab
4
+ class Setup
5
+ # This method will take care of creating a screengrabfile and other necessary files
6
+ def self.create(path, is_swift_fastfile: false)
7
+ if is_swift_fastfile
8
+ template_location = "#{Screengrab::ROOT}/lib/assets/ScreengrabfileTemplate.swift"
9
+ screengrabfile_path = File.join(path, 'Screengrabfile.swift')
10
+ else
11
+ template_location = "#{Screengrab::ROOT}/lib/assets/ScreengrabfileTemplate"
12
+ screengrabfile_path = File.join(path, 'Screengrabfile')
13
+ end
14
+
15
+ if File.exist?(screengrabfile_path)
16
+ UI.user_error!("Screengrabfile already exists at path '#{screengrabfile_path}'. Run 'screengrab' to use screengrab.")
17
+ end
18
+
19
+ File.write(screengrabfile_path, File.read(template_location))
20
+
21
+ UI.success("Successfully created new Screengrabfile at '#{screengrabfile_path}'")
22
+ end
23
+ end
24
+ end
data/sigh/README.md ADDED
@@ -0,0 +1,17 @@
1
+ <h3 align="center">
2
+ <a href="https://docs.fastlane.tools/actions/sigh/">
3
+ <img src="https://raw.githubusercontent.com/fastlane/fastlane/master/fastlane/assets/fastlane.png" width="100" />
4
+ <br />
5
+ fastlane
6
+ </a>
7
+ </h3>
8
+
9
+ ------
10
+
11
+ <p align="center">
12
+ <a href="https://docs.fastlane.tools/actions/sigh/">
13
+ <img src="https://raw.githubusercontent.com/fastlane/fastlane/master/sigh/assets/sigh.png" height="110">
14
+ </a>
15
+ </p>
16
+
17
+ <h3 align="center">The <i>sigh</i> docs were moved to <a href='https://docs.fastlane.tools/actions/sigh/'>docs.fastlane.tools</a></h3>
@@ -0,0 +1,909 @@
1
+ #!/bin/bash
2
+ # shellcheck disable=SC2155
3
+
4
+ # Copyright (c) 2011 Float Mobile Learning
5
+ # http://www.floatlearning.com/
6
+ # Extension Copyright (c) 2013 Weptun Gmbh
7
+ # http://www.weptun.de
8
+ #
9
+ # Extended by Ronan O Ciosoig January 2012
10
+ #
11
+ # Extended by Patrick Blitz, April 2013
12
+ #
13
+ # Extended by John Turnipseed and Matthew Nespor, November 2014
14
+ # http://nanonation.net/
15
+ #
16
+ # Extended by Nicolas Bachschmidt, October 2015
17
+ #
18
+ # Permission is hereby granted, free of charge, to any person obtaining
19
+ # a copy of this software and associated documentation files (the "Software"),
20
+ # to deal in the Software without restriction, including without limitation
21
+ # the rights to use, copy, modify, merge, publish, distribute, sublicense,
22
+ # and/or sell copies of the Software, and to permit persons to whom the
23
+ # Software is furnished to do so, subject to the following conditions:
24
+ #
25
+ # The above copyright notice and this permission notice shall be included
26
+ # in all copies or substantial portions of the Software.
27
+ #
28
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
29
+ # OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
30
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
31
+ # IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
32
+ # CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
33
+ # TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
34
+ # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
35
+ #
36
+ # Please let us know about any improvements you make to this script!
37
+ # ./floatsign source "iPhone Distribution: Name" -p "path/to/profile" [-d "display name"] [-e entitlements] [-k keychain] [-b "BundleIdentifier"] outputIpa
38
+ #
39
+ #
40
+ # Modifed 26th January 2012
41
+ #
42
+ # new features January 2012:
43
+ # 1. change the app display name
44
+ #
45
+ # new features April 2013
46
+ # 1. specify the target bundleId on the command line
47
+ # 2. correctly handles entitlements for keychain-enabled resigning
48
+ #
49
+ # new features November 2014
50
+ # 1. now re-signs embedded iOS frameworks, if present, prior to re-signing the application itself
51
+ # 2. extracts the team-identifier from provisioning profile and uses it to update previous entitlements
52
+ # 3. fixed bug in packaging if -e flag is used
53
+ # 4. renamed 'temp' directory and made it a variable so it can be easily modified
54
+ # 5. various code formatting and logging adjustments
55
+ #
56
+ # new features October 2015
57
+ # 1. now re-signs nested applications and app extensions, if present, prior to re-signing the application itself
58
+ # 2. enables the -p option to be used more than once
59
+ # 3. ensures the provisioning profile's bundle-identifier matches the app's bundle identifier
60
+ # 4. extracts the entitlements from the provisioning profile
61
+ # 5. copy the entitlements as archived-expanded-entitlements.xcent inside the app bundle (because Xcode does too)
62
+ #
63
+ # new features November 2018
64
+ # 1. only create the archived-expanded-entitlements.xcent file if the version of Xcode < 9.3 as Xcode 10 does not create it.
65
+ #
66
+ # new features January 2019
67
+ # 1. fixed bug where the com.apple.icloud-container-environment entitlement was being assigned an incorrect value
68
+ #
69
+ # new features March 2019
70
+ # 1. two more fixes for only creating the archived-expanded-entitlements.xcent file if the version of Xcode < 9.3 as Xcode 10 does not create it.
71
+ #
72
+ # new features June 2020
73
+ # 1. enable (re)signing of OnDemandResources when ipa has been built for the appstore
74
+ #
75
+ # new features August 2020
76
+ # 1. fixes usage for users with GNU-sed in their $PATH
77
+ #
78
+
79
+ # Logging functions
80
+
81
+ log() {
82
+ # Make sure it returns 0 code even when verose mode is off (test 1)
83
+ # To use like [[ condition ]] && log "x" && something
84
+ if [[ -n "$VERBOSE" ]]; then echo -e "$@"; else test 1; fi
85
+ }
86
+
87
+ error() {
88
+ echo "$@" >&2
89
+ exit 1
90
+ }
91
+
92
+ warning() {
93
+ echo "$@" >&2
94
+ }
95
+
96
+ function checkStatus {
97
+
98
+ # shellcheck disable=SC2181
99
+ if [ $? -ne 0 ]; then
100
+ error "Encountered an error, aborting!"
101
+ fi
102
+ }
103
+
104
+ usage() {
105
+ echo -e "Usage: $(basename "$0") source identity -p|--provisioning provisioning" >&2
106
+ echo -e "\t\t[-e|--entitlements entitlements]" >&2
107
+ echo -e "\t\t[-k|--keychain keychain]" >&2
108
+ echo -e "\t\t[-d|--display-name displayName]" >&2
109
+ echo -e "\t\t[-n|--version-number version]" >&2
110
+ echo -e "\t\t[--short-version shortVersion]" >&2
111
+ echo -e "\t\t[--bundle-version bundleVersion]" >&2
112
+ echo -e "\t\t[-b|--bundle-id bundleId]" >&2
113
+ echo -e "\t\t[--use-app-entitlements]" >&2
114
+ echo -e "\t\toutputIpa" >&2
115
+ echo "Usage: $(basename "$0") -h|--help" >&2
116
+ echo "Options:" >&2
117
+ echo -e "\t-p, --provisioning provisioning\t\tProvisioning profile option, may be provided multiple times." >&2
118
+ echo -e "\t\t\t\t\t\tYou can specify provisioning profile file name." >&2
119
+ echo -e "\t\t\t\t\t\t\t-p xxx.mobileprovision" >&2
120
+ echo "" >&2
121
+ echo -e "\t\t\t\t\t\tAlternatively you may provide multiple provisioning profiles if the application contains" >&2
122
+ echo -e "\t\t\t\t\t\tnested applications or app extensions, which need their own provisioning" >&2
123
+ echo -e "\t\t\t\t\t\tprofile. You can do so by providing -p option multiple times specifying" >&2
124
+ echo -e "\t\t\t\t\t\told bundle identifier and new provisioning profile for that bundle id joined with '='." >&2
125
+ echo -e "\t\t\t\t\t\t\t-p com.main-app=main-app.mobileprovision" >&2
126
+ echo -e "\t\t\t\t\t\t\t-p com.nested-app=nested-app.mobileprovision" >&2
127
+ echo -e "\t\t\t\t\t\t\t-p com.nested-extension=nested-extension.mobileprovision" >&2
128
+ echo "" >&2
129
+ echo -e "\t-e, --entitlements entitlements\t\tSpecify entitlements file path for code signing." >&2
130
+ echo -e "\t-k, --keychain keychain\t\t\tSpecify keychain for code signing." >&2
131
+ echo -e "\t-d, --display-name displayName\t\tSpecify new display name." >&2
132
+ echo -e "\t\t\t\t\t\t\tWarning: will apply for all nested apps and extensions." >&2
133
+ echo -e "\t-n, --version-number version\t\tSpecify new version number." >&2
134
+ echo -e "\t\t\t\t\t\t\tWill set CFBundleShortVersionString and CFBundleVersion values in Info.plist." >&2
135
+ echo -e "\t\t\t\t\t\t\tWill apply for all nested apps and extensions." >&2
136
+ echo -e "\t --short-version shortVersion\tSpecify new short version string (CFBundleShortVersionString)." >&2
137
+ echo -e "\t\t\t\t\t\t\tWill apply for all nested apps and extensions." >&2
138
+ echo -e "\t\t\t\t\t\t\tCan't use together with '-n, --version-number' option." >&2
139
+ echo -e "\t --bundle-version bundleVersion\tSpecify new bundle version (CFBundleVersion) number." >&2
140
+ echo -e "\t\t\t\t\t\t\tWill apply for all nested apps and extensions." >&2
141
+ echo -e "\t\t\t\t\t\t\tCan't use together with '-n, --version-number' option." >&2
142
+ echo -e "\t-b, --bundle-id bundleId\t\tSpecify new bundle identifier (CFBundleIdentifier)." >&2
143
+ echo -e "\t\t\t\t\t\t\tWarning: will NOT apply for nested apps and extensions." >&2
144
+ echo -e "\t --use-app-entitlements\t\tExtract app bundle codesigning entitlements and combine with entitlements from new provisionin profile." >&2
145
+ echo -e "\t\t\t\t\t\t\tCan't use together with '-e, --entitlements' option." >&2
146
+ echo -e "\t--keychain-path path\t\t\tSpecify the path to a keychain that /usr/bin/codesign should use." >&2
147
+ echo -e "\t-v, --verbose\t\t\t\tVerbose output." >&2
148
+ echo -e "\t-h, --help\t\t\t\tDisplay help message." >&2
149
+ exit 2
150
+ }
151
+
152
+ if [ $# -lt 3 ]; then
153
+ usage
154
+ fi
155
+
156
+ ORIGINAL_FILE="$1"
157
+ CERTIFICATE="$2"
158
+ ENTITLEMENTS=
159
+ BUNDLE_IDENTIFIER=""
160
+ DISPLAY_NAME=""
161
+ KEYCHAIN=""
162
+ VERSION_NUMBER=""
163
+ SHORT_VERSION=
164
+ BUNDLE_VERSION=
165
+ KEYCHAIN_PATH=
166
+ RAW_PROVISIONS=()
167
+ PROVISIONS_BY_ID=()
168
+ DEFAULT_PROVISION=""
169
+ TEMP_DIR="_floatsignTemp"
170
+ USE_APP_ENTITLEMENTS=""
171
+ XCODE_VERSION="$(xcodebuild -version | grep "Xcode" | /usr/bin/cut -f 2 -d ' ')"
172
+
173
+ # List of plist keys used for reference to and from nested apps and extensions
174
+ NESTED_APP_REFERENCE_KEYS=(":WKCompanionAppBundleIdentifier" ":NSExtension:NSExtensionAttributes:WKAppBundleIdentifier")
175
+
176
+ # options start index
177
+ shift 2
178
+
179
+ # Parse args
180
+ while [ "$1" != "" ]; do
181
+ case $1 in
182
+ -p | --provisioning )
183
+ shift
184
+ RAW_PROVISIONS+=("$1")
185
+ ;;
186
+ -e | --entitlements )
187
+ shift
188
+ ENTITLEMENTS="$1"
189
+ ;;
190
+ -d | --display-name )
191
+ shift
192
+ DISPLAY_NAME="$1"
193
+ ;;
194
+ -b | --bundle-id )
195
+ shift
196
+ BUNDLE_IDENTIFIER="$1"
197
+ ;;
198
+ -k | --keychain )
199
+ shift
200
+ KEYCHAIN="$1"
201
+ ;;
202
+ -n | --version-number )
203
+ shift
204
+ VERSION_NUMBER="$1"
205
+ ;;
206
+ --short-version )
207
+ shift
208
+ SHORT_VERSION="$1"
209
+ ;;
210
+ --bundle-version )
211
+ shift
212
+ BUNDLE_VERSION="$1"
213
+ ;;
214
+ --use-app-entitlements )
215
+ USE_APP_ENTITLEMENTS="YES"
216
+ ;;
217
+ --keychain-path )
218
+ shift
219
+ KEYCHAIN_PATH="$1"
220
+ ;;
221
+ -v | --verbose )
222
+ VERBOSE="--verbose"
223
+ ;;
224
+ -h | --help )
225
+ usage
226
+ ;;
227
+ * )
228
+ [[ -n "$NEW_FILE" ]] && error "Multiple output file names specified!"
229
+ [[ -z "$NEW_FILE" ]] && NEW_FILE="$1"
230
+ ;;
231
+ esac
232
+
233
+ # Next arg
234
+ shift
235
+ done
236
+
237
+ KEYCHAIN_FLAG=
238
+ if [ -n "$KEYCHAIN_PATH" ]; then
239
+ KEYCHAIN_FLAG="--keychain $KEYCHAIN_PATH"
240
+ fi
241
+
242
+ # Log the options
243
+ for provision in "${RAW_PROVISIONS[@]}"; do
244
+ if [[ "$provision" =~ .+=.+ ]]; then
245
+ log "Specified provisioning profile: '${provision#*=}' for bundle identifier: '${provision%%=*}'"
246
+ else
247
+ log "Specified provisioning profile: '$provision'"
248
+ fi
249
+ done
250
+
251
+ log "Original file: '$ORIGINAL_FILE'"
252
+ log "Certificate: '$CERTIFICATE'"
253
+ [[ -n "${DISPLAY_NAME}" ]] && log "Specified display name: '$DISPLAY_NAME'"
254
+ [[ -n "${ENTITLEMENTS}" ]] && log "Specified signing entitlements: '$ENTITLEMENTS'"
255
+ [[ -n "${BUNDLE_IDENTIFIER}" ]] && log "Specified bundle identifier: '$BUNDLE_IDENTIFIER'"
256
+ [[ -n "${KEYCHAIN}" ]] && log "Specified keychain to use: '$KEYCHAIN'"
257
+ [[ -n "${VERSION_NUMBER}" ]] && log "Specified version number to use: '$VERSION_NUMBER'"
258
+ [[ -n "${SHORT_VERSION}" ]] && log "Specified short version to use: '$SHORT_VERSION'"
259
+ [[ -n "${BUNDLE_VERSION}" ]] && log "Specified bundle version to use: '$BUNDLE_VERSION'"
260
+ [[ -n "${KEYCHAIN_FLAG}" ]] && log "Specified keychain to use: '$KEYCHAIN_PATH'"
261
+ [[ -n "${NEW_FILE}" ]] && log "Output file name: '$NEW_FILE'"
262
+ [[ -n "${USE_APP_ENTITLEMENTS}" ]] && log "Extract app entitlements: YES"
263
+
264
+ # Check that version number option is not clashing with short or bundle version options
265
+ [[ -n "$VERSION_NUMBER" && (-n "$SHORT_VERSION" || -n "$BUNDLE_VERSION") ]] && error "versionNumber option cannot be used in combination with shortVersion or bundleVersion options"
266
+
267
+ # Check that --use-app-entitlements and -e, --entitlements are not used at the same time
268
+ [[ -n "${USE_APP_ENTITLEMENTS}" && -n ${ENTITLEMENTS} ]] && error "--use-app-entitlements option cannot be used in combination with -e, --entitlements option."
269
+
270
+ # Check output file name
271
+ if [ -z "$NEW_FILE" ]; then
272
+ error "Output file name required"
273
+ fi
274
+
275
+ if [[ "${#RAW_PROVISIONS[*]}" == "0" ]]; then
276
+ error "-p 'xxxx.mobileprovision' argument is required"
277
+ fi
278
+
279
+ # Check for and remove the temporary directory if it already exists
280
+ if [ -d "$TEMP_DIR" ]; then
281
+ log "Removing previous temporary directory: '$TEMP_DIR'"
282
+ rm -Rf "$TEMP_DIR"
283
+ fi
284
+
285
+ filename=$(basename "$ORIGINAL_FILE")
286
+ extension="${filename##*.}"
287
+ filename="${filename%.*}"
288
+
289
+ # Check if the supplied file is an ipa or an app file
290
+ if [ "${extension}" = "ipa" ]; then
291
+ # Unzip the old ipa quietly
292
+ unzip -q "$ORIGINAL_FILE" -d $TEMP_DIR
293
+ checkStatus
294
+ elif [ "${extension}" = "app" ]; then
295
+ # Copy the app file into an ipa-like structure
296
+ mkdir -p "$TEMP_DIR/Payload"
297
+ cp -Rf "${ORIGINAL_FILE}" "$TEMP_DIR/Payload/${filename}.app"
298
+ checkStatus
299
+ else
300
+ error "Error: Only can resign .app files and .ipa files."
301
+ fi
302
+
303
+ # check the keychain
304
+ if [ "${KEYCHAIN}" != "" ]; then
305
+ security list-keychains -s "$KEYCHAIN"
306
+ security unlock "$KEYCHAIN"
307
+ security default-keychain -s "$KEYCHAIN"
308
+ fi
309
+
310
+ # Set the app name
311
+ # In Payload directory may be another file except .app file, such as StoreKit folder.
312
+ # Search the first .app file within the Payload directory
313
+ # shellcheck disable=SC2010
314
+ APP_NAME=$(ls "$TEMP_DIR/Payload/" | grep ".app$" | head -1)
315
+
316
+ # Make sure that PATH includes the location of the PlistBuddy helper tool as its location is not standard
317
+ export PATH=$PATH:/usr/libexec
318
+
319
+ # Test whether two bundle identifiers match
320
+ # The first one may contain the wildcard character '*', in which case pattern matching will be used unless the third parameter is "STRICT"
321
+ function does_bundle_id_match {
322
+
323
+ # shellcheck disable=SC2049
324
+ if [[ "$1" == "$2" ]]; then
325
+ return 0
326
+ elif [[ "$3" != STRICT && "$1" =~ \* ]]; then
327
+ local PATTERN0="${1//\./\\.}" # com.example.* -> com\.example\.*
328
+ local PATTERN1="${PATTERN0//\*/.*}" # com\.example\.* -> com\.example\..*
329
+ if [[ "$2" =~ ^$PATTERN1$ ]]; then
330
+ return 0
331
+ fi
332
+ fi
333
+
334
+ return 1
335
+ }
336
+
337
+ # Find the provisioning profile for a given bundle identifier
338
+ function provision_for_bundle_id {
339
+
340
+ for ARG in "${PROVISIONS_BY_ID[@]}"; do
341
+ if does_bundle_id_match "${ARG%%=*}" "$1" "$2"; then
342
+ echo "${ARG#*=}"
343
+ break
344
+ fi
345
+ done
346
+ }
347
+
348
+ # Find the bundle identifier contained inside a provisioning profile
349
+ function bundle_id_for_provison {
350
+
351
+ local FULL_BUNDLE_ID=$(PlistBuddy -c 'Print :Entitlements:application-identifier' /dev/stdin <<< "$(security cms -D -i "$1")")
352
+ checkStatus
353
+ echo "${FULL_BUNDLE_ID#*.}"
354
+ }
355
+
356
+ # Add given provisioning profile and bundle identifier to the search list
357
+ function add_provision_for_bundle_id {
358
+
359
+ local PROVISION="$1"
360
+ local BUNDLE_ID="$2"
361
+
362
+ local CURRENT_PROVISION=$(provision_for_bundle_id "$BUNDLE_ID" STRICT)
363
+
364
+ if [[ "$CURRENT_PROVISION" != "" && "$CURRENT_PROVISION" != "$PROVISION" ]]; then
365
+ error "Conflicting provisioning profiles '$PROVISION' and '$CURRENT_PROVISION' for bundle identifier '$BUNDLE_ID'."
366
+ fi
367
+
368
+ PROVISIONS_BY_ID+=("$BUNDLE_ID=$PROVISION")
369
+ }
370
+
371
+ # Add given provisioning profile to the search list
372
+ function add_provision {
373
+
374
+ local PROVISION="$1"
375
+
376
+ if [[ "$1" =~ .+=.+ ]]; then
377
+ PROVISION="${1#*=}"
378
+ add_provision_for_bundle_id "$PROVISION" "${1%%=*}"
379
+ elif [[ "$DEFAULT_PROVISION" == "" ]]; then
380
+ DEFAULT_PROVISION="$PROVISION"
381
+ fi
382
+
383
+ if [[ ! -e "$PROVISION" ]]; then
384
+ error "Provisioning profile '$PROVISION' file does not exist"
385
+ fi
386
+
387
+ local BUNDLE_ID=$(bundle_id_for_provison "$PROVISION")
388
+ add_provision_for_bundle_id "$PROVISION" "$BUNDLE_ID"
389
+ }
390
+
391
+ # Load bundle identifiers from provisioning profiles
392
+ for ARG in "${RAW_PROVISIONS[@]}"; do
393
+ add_provision "$ARG"
394
+ done
395
+
396
+ # Resign the given application
397
+ function resign {
398
+
399
+ local APP_PATH="$1"
400
+ local NESTED="$2"
401
+ local BUNDLE_IDENTIFIER="$BUNDLE_IDENTIFIER"
402
+ local NEW_PROVISION="$NEW_PROVISION"
403
+ local APP_IDENTIFIER_PREFIX=""
404
+ local TEAM_IDENTIFIER=""
405
+
406
+ if [[ "$NESTED" == NESTED ]]; then
407
+ # Ignore bundle identifier for nested applications
408
+ BUNDLE_IDENTIFIER=""
409
+ fi
410
+
411
+ # Make sure that the Info.plist file is where we expect it
412
+ if [ ! -e "$APP_PATH/Info.plist" ]; then
413
+ error "Expected file does not exist: '$APP_PATH/Info.plist'"
414
+ fi
415
+
416
+ # Make a copy of old Info.plist, it will come handy later to extract some old values
417
+ cp -f "$APP_PATH/Info.plist" "$TEMP_DIR/oldInfo.plist"
418
+
419
+ # Read in current values from the app
420
+ local CURRENT_NAME=$(PlistBuddy -c "Print :CFBundleDisplayName" "$APP_PATH/Info.plist")
421
+ local CURRENT_BUNDLE_IDENTIFIER=$(PlistBuddy -c "Print :CFBundleIdentifier" "$APP_PATH/Info.plist")
422
+ local NEW_PROVISION=$(provision_for_bundle_id "${BUNDLE_IDENTIFIER:-$CURRENT_BUNDLE_IDENTIFIER}")
423
+
424
+ if [[ "$NEW_PROVISION" == "" && "$NESTED" != NESTED ]]; then
425
+ NEW_PROVISION="$DEFAULT_PROVISION"
426
+ fi
427
+
428
+ if [[ "$NEW_PROVISION" == "" ]]; then
429
+ if [[ "$NESTED" == NESTED ]]; then
430
+ warning "No provisioning profile for nested application: '$APP_PATH' with bundle identifier '${BUNDLE_IDENTIFIER:-$CURRENT_BUNDLE_IDENTIFIER}'"
431
+ else
432
+ warning "No provisioning profile for application: '$APP_PATH' with bundle identifier '${BUNDLE_IDENTIFIER:-$CURRENT_BUNDLE_IDENTIFIER}'"
433
+ fi
434
+ error "Use the -p option (example: -p com.example.app=xxxx.mobileprovision)"
435
+ fi
436
+
437
+ local PROVISION_BUNDLE_IDENTIFIER=$(bundle_id_for_provison "$NEW_PROVISION")
438
+
439
+ # Use provisioning profile's bundle identifier
440
+ if [ "$BUNDLE_IDENTIFIER" == "" ]; then
441
+ # shellcheck disable=SC2049
442
+ if [[ "$PROVISION_BUNDLE_IDENTIFIER" =~ \* ]]; then
443
+ log "Bundle Identifier contains a *, using the current bundle identifier"
444
+ BUNDLE_IDENTIFIER="$CURRENT_BUNDLE_IDENTIFIER"
445
+ else
446
+ BUNDLE_IDENTIFIER="$PROVISION_BUNDLE_IDENTIFIER"
447
+ fi
448
+ fi
449
+
450
+ if ! does_bundle_id_match "$PROVISION_BUNDLE_IDENTIFIER" "$BUNDLE_IDENTIFIER"; then
451
+ error "Bundle Identifier '$PROVISION_BUNDLE_IDENTIFIER' in provisioning profile '$NEW_PROVISION' does not match the Bundle Identifier '$BUNDLE_IDENTIFIER' for application '$APP_PATH'."
452
+ fi
453
+
454
+ log "Current bundle identifier is: '$CURRENT_BUNDLE_IDENTIFIER'"
455
+ log "New bundle identifier will be: '$BUNDLE_IDENTIFIER'"
456
+
457
+ # Update the CFBundleDisplayName property in the Info.plist if a new name has been provided
458
+ if [ "${DISPLAY_NAME}" != "" ]; then
459
+ if [ "${DISPLAY_NAME}" != "${CURRENT_NAME}" ]; then
460
+ log "Changing display name from '$CURRENT_NAME' to '$DISPLAY_NAME'"
461
+ PlistBuddy -c "Set :CFBundleDisplayName $DISPLAY_NAME" "$APP_PATH/Info.plist"
462
+ fi
463
+ fi
464
+
465
+ # Replace the embedded mobile provisioning profile
466
+ log "Validating the new provisioning profile: $NEW_PROVISION"
467
+ security cms -D -i "$NEW_PROVISION" > "$TEMP_DIR/profile.plist"
468
+ checkStatus
469
+
470
+ APP_IDENTIFIER_PREFIX=$(PlistBuddy -c "Print :Entitlements:application-identifier" "$TEMP_DIR/profile.plist" | grep -E '^[A-Z0-9]*' -o | tr -d '\n')
471
+ if [ "$APP_IDENTIFIER_PREFIX" == "" ];
472
+ then
473
+ APP_IDENTIFIER_PREFIX=$(PlistBuddy -c "Print :ApplicationIdentifierPrefix:0" "$TEMP_DIR/profile.plist")
474
+ if [ "$APP_IDENTIFIER_PREFIX" == "" ]; then
475
+ error "Failed to extract any app identifier prefix from '$NEW_PROVISION'"
476
+ else
477
+ warning "WARNING: extracted an app identifier prefix '$APP_IDENTIFIER_PREFIX' from '$NEW_PROVISION', but it was not found in the profile's entitlements"
478
+ fi
479
+ else
480
+ log "Profile app identifier prefix is '$APP_IDENTIFIER_PREFIX'"
481
+ fi
482
+
483
+ # Set new app identifier prefix if such entry exists in plist file
484
+ PlistBuddy -c "Set :AppIdentifierPrefix $APP_IDENTIFIER_PREFIX." "$APP_PATH/Info.plist" 2>/dev/null
485
+
486
+ TEAM_IDENTIFIER=$(PlistBuddy -c "Print :Entitlements:com.apple.developer.team-identifier" "$TEMP_DIR/profile.plist" | tr -d '\n')
487
+ if [ "$TEAM_IDENTIFIER" == "" ]; then
488
+ TEAM_IDENTIFIER=$(PlistBuddy -c "Print :TeamIdentifier:0" "$TEMP_DIR/profile.plist")
489
+ if [ "$TEAM_IDENTIFIER" == "" ]; then
490
+ warning "Failed to extract team identifier from '$NEW_PROVISION', resigned ipa may fail on iOS 8 and higher"
491
+ else
492
+ warning "WARNING: extracted a team identifier '$TEAM_IDENTIFIER' from '$NEW_PROVISION', but it was not found in the profile's entitlements, resigned ipa may fail on iOS 8 and higher"
493
+ fi
494
+ else
495
+ log "Profile team identifier is '$TEAM_IDENTIFIER'"
496
+ fi
497
+
498
+ # Make a copy of old embedded provisioning profile for further use
499
+ cp -f "$APP_PATH/embedded.mobileprovision" "$TEMP_DIR/old-embedded.mobileprovision"
500
+
501
+ # Replace embedded provisioning profile with new file
502
+ cp -f "$NEW_PROVISION" "$APP_PATH/embedded.mobileprovision"
503
+
504
+ #if the current bundle identifier is different from the new one in the provisioning profile, then change it.
505
+ if [ "$CURRENT_BUNDLE_IDENTIFIER" != "$BUNDLE_IDENTIFIER" ]; then
506
+ log "Updating the bundle identifier from '$CURRENT_BUNDLE_IDENTIFIER' to '$BUNDLE_IDENTIFIER'"
507
+ PlistBuddy -c "Set :CFBundleIdentifier $BUNDLE_IDENTIFIER" "$APP_PATH/Info.plist"
508
+ checkStatus
509
+ fi
510
+
511
+ # Update the version number properties in the Info.plist if a version number has been provided
512
+ if [ "$VERSION_NUMBER" != "" ]; then
513
+ CURRENT_VERSION_NUMBER=$(PlistBuddy -c "Print :CFBundleVersion" "$APP_PATH/Info.plist")
514
+ if [ "$VERSION_NUMBER" != "$CURRENT_VERSION_NUMBER" ]; then
515
+ log "Updating the version from '$CURRENT_VERSION_NUMBER' to '$VERSION_NUMBER'"
516
+ PlistBuddy -c "Set :CFBundleVersion $VERSION_NUMBER" "$APP_PATH/Info.plist"
517
+ PlistBuddy -c "Set :CFBundleShortVersionString $VERSION_NUMBER" "$APP_PATH/Info.plist"
518
+ fi
519
+ fi
520
+
521
+ # Update short version string in the Info.plist if provided
522
+ if [[ -n "$SHORT_VERSION" ]]; then
523
+ CURRENT_VALUE="$(PlistBuddy -c "Print :CFBundleShortVersionString" "$APP_PATH/Info.plist")"
524
+ # Even if the old value is same - just update, less code, less debugging
525
+ log "Updating the short version string (CFBundleShortVersionString) from '$CURRENT_VALUE' to '$SHORT_VERSION'"
526
+ PlistBuddy -c "Set :CFBundleShortVersionString $SHORT_VERSION" "$APP_PATH/Info.plist"
527
+ fi
528
+
529
+ # Update bundle version in the Info.plist if provided
530
+ if [[ -n "$BUNDLE_VERSION" ]]; then
531
+ CURRENT_VALUE="$(PlistBuddy -c "Print :CFBundleVersion" "$APP_PATH/Info.plist")"
532
+ # Even if the old value is same - just update, less code, less debugging
533
+ log "Updating the bundle version (CFBundleVersion) from '$CURRENT_VALUE' to '$BUNDLE_VERSION'"
534
+ PlistBuddy -c "Set :CFBundleVersion $BUNDLE_VERSION" "$APP_PATH/Info.plist"
535
+ fi
536
+
537
+ # Check for and resign OnDemandResource folders
538
+ ODR_DIR="$(dirname "$APP_PATH")/OnDemandResources"
539
+ if [ -d "$ODR_DIR" ]; then
540
+ for assetpack in "$ODR_DIR"/*
541
+ do
542
+ if [[ "$assetpack" == *.assetpack ]]; then
543
+ rm -rf $assetpack/_CodeSignature
544
+ /usr/bin/codesign ${VERBOSE} ${KEYCHAIN_FLAG} -f -s "$CERTIFICATE" "$assetpack"
545
+ checkStatus
546
+ else
547
+ log "Ignoring non-assetpack: $assetpack"
548
+ fi
549
+ done
550
+ fi
551
+
552
+ # Check for and resign any embedded frameworks (new feature for iOS 8 and above apps)
553
+ FRAMEWORKS_DIR="$APP_PATH/Frameworks"
554
+ if [ -d "$FRAMEWORKS_DIR" ]; then
555
+ if [ "$TEAM_IDENTIFIER" == "" ]; then
556
+ error "ERROR: embedded frameworks detected, re-signing iOS 8 (or higher) applications wihout a team identifier in the certificate/profile does not work"
557
+ fi
558
+
559
+ log "Resigning embedded frameworks using certificate: '$CERTIFICATE'"
560
+ for framework in "$FRAMEWORKS_DIR"/*
561
+ do
562
+ if [[ "$framework" == *.framework || "$framework" == *.dylib ]]; then
563
+ log "Resigning '$framework'"
564
+ # Must not qote KEYCHAIN_FLAG because it needs to be unwrapped and passed to codesign with spaces
565
+ # shellcheck disable=SC2086
566
+ /usr/bin/codesign ${VERBOSE} ${KEYCHAIN_FLAG} -f -s "$CERTIFICATE" "$framework"
567
+ checkStatus
568
+ else
569
+ log "Ignoring non-framework: $framework"
570
+ fi
571
+ done
572
+ fi
573
+
574
+ # Check for and update bundle identifiers for extensions and associated nested apps
575
+ log "Fixing nested app and extension references"
576
+ for key in "${NESTED_APP_REFERENCE_KEYS[@]}"; do
577
+ # Check if Info.plist has a reference to another app or extension
578
+ REF_BUNDLE_ID=$(PlistBuddy -c "Print ${key}" "$APP_PATH/Info.plist" 2>/dev/null)
579
+ if [ -n "$REF_BUNDLE_ID" ]; then
580
+ # Found a reference bundle id, now get the corresponding provisioning profile for this bundle id
581
+ REF_PROVISION=$(provision_for_bundle_id "$REF_BUNDLE_ID")
582
+ # Map to the new bundle id
583
+ NEW_REF_BUNDLE_ID=$(bundle_id_for_provison "$REF_PROVISION")
584
+ # Change if not the same and if doesn't contain wildcard
585
+ # shellcheck disable=SC2049
586
+ if [[ "$REF_BUNDLE_ID" != "$NEW_REF_BUNDLE_ID" ]] && ! [[ "$NEW_REF_BUNDLE_ID" =~ \* ]]; then
587
+ log "Updating nested app or extension reference for ${key} key from ${REF_BUNDLE_ID} to ${NEW_REF_BUNDLE_ID}"
588
+ PlistBuddy -c "Set ${key} $NEW_REF_BUNDLE_ID" "$APP_PATH/Info.plist"
589
+ fi
590
+ fi
591
+ done
592
+
593
+ if [ "$ENTITLEMENTS" != "" ]; then
594
+ if [ -n "$APP_IDENTIFIER_PREFIX" ]; then
595
+ # sanity check the 'application-identifier' is present in the provided entitlements and matches the provisioning profile value
596
+ ENTITLEMENTS_APP_ID_PREFIX=$(PlistBuddy -c "Print :application-identifier" "$ENTITLEMENTS" | grep -E '^[A-Z0-9]*' -o | tr -d '\n')
597
+ if [ "$ENTITLEMENTS_APP_ID_PREFIX" == "" ]; then
598
+ error "Provided entitlements file is missing a value for the required 'application-identifier' key"
599
+ elif [ "$ENTITLEMENTS_APP_ID_PREFIX" != "$APP_IDENTIFIER_PREFIX" ]; then
600
+ error "Provided entitlements file's app identifier prefix value '$ENTITLEMENTS_APP_ID_PREFIX' does not match the provided provisioning profile's value '$APP_IDENTIFIER_PREFIX'"
601
+ fi
602
+ fi
603
+
604
+ if [ -n "$TEAM_IDENTIFIER" ]; then
605
+ # sanity check the 'com.apple.developer.team-identifier' is present in the provided entitlements and matches the provisioning profile value
606
+ ENTITLEMENTS_TEAM_IDENTIFIER=$(PlistBuddy -c "Print :com.apple.developer.team-identifier" "$ENTITLEMENTS" | tr -d '\n')
607
+ if [ "$ENTITLEMENTS_TEAM_IDENTIFIER" == "" ]; then
608
+ error "Provided entitlements file is missing a value for the required 'com.apple.developer.team-identifier' key"
609
+ elif [ "$ENTITLEMENTS_TEAM_IDENTIFIER" != "$TEAM_IDENTIFIER" ]; then
610
+ error "Provided entitlements file's 'com.apple.developer.team-identifier' '$ENTITLEMENTS_TEAM_IDENTIFIER' does not match the provided provisioning profile's value '$TEAM_IDENTIFIER'"
611
+ fi
612
+ fi
613
+
614
+ log "Resigning application using certificate: '$CERTIFICATE'"
615
+ log "and entitlements: $ENTITLEMENTS"
616
+ if [[ "${XCODE_VERSION/.*/}" -lt 10 ]]; then
617
+ log "Creating an archived-expanded-entitlements.xcent file for Xcode 9 builds or earlier"
618
+ cp -f "$ENTITLEMENTS" "$APP_PATH/archived-expanded-entitlements.xcent"
619
+ fi
620
+ /usr/bin/codesign ${VERBOSE} -f -s "$CERTIFICATE" --entitlements "$ENTITLEMENTS" "$APP_PATH"
621
+ checkStatus
622
+ elif [[ -n "${USE_APP_ENTITLEMENTS}" ]]; then
623
+ # Extract entitlements from provisioning profile and from the app binary
624
+ # then combine them together
625
+
626
+ log "Extracting entitlements from provisioning profile"
627
+ PROFILE_ENTITLEMENTS="$TEMP_DIR/profileEntitlements"
628
+ PlistBuddy -x -c "Print Entitlements" "$TEMP_DIR/profile.plist" > "$PROFILE_ENTITLEMENTS"
629
+ checkStatus
630
+
631
+ log "Extracting entitlements from the app"
632
+ APP_ENTITLEMENTS="$TEMP_DIR/appEntitlements"
633
+ /usr/bin/codesign -d --entitlements :"$APP_ENTITLEMENTS" "$APP_PATH"
634
+ checkStatus
635
+
636
+ log "\nApp entitlements for ${APP_PATH}:"
637
+ log "$(cat "$APP_ENTITLEMENTS")"
638
+
639
+ log "Patching profile entitlements with values from app entitlements"
640
+ PATCHED_ENTITLEMENTS="$TEMP_DIR/patchedEntitlements"
641
+ # Start with using what comes in provisioning profile entitlements before patching
642
+ cp -f "$PROFILE_ENTITLEMENTS" "$PATCHED_ENTITLEMENTS"
643
+
644
+ log "Removing denylisted keys from patched profile"
645
+ # See https://github.com/facebook/buck/issues/798 and https://github.com/facebook/buck/pull/802/files
646
+
647
+ # Update in https://github.com/facebook/buck/commit/99c0fbc3ab5ecf04d186913374f660683deccdef
648
+ # Update in https://github.com/facebook/buck/commit/36db188da9f6acbb9df419dc1904315ab00c4e19
649
+
650
+ # Buck changes referenced above are not self-explanatory and do not seem exhaustive or up-to-date
651
+ # Comments below explain the rules applied to each key in order to make realignment with future Xcode export logic easier
652
+ DENYLISTED_KEYS=(\
653
+ # PP list identifiers inconsistent with app-defined ones and this key does not seem to appear in IPA entitlements, so ignore it
654
+ "com.apple.developer.icloud-container-development-container-identifiers" \
655
+ # This key has an invalid generic value in PP (actual value is set by Xcode during export), see dedicated processing a few blocks below
656
+ "com.apple.developer.icloud-container-environment" \
657
+ # PP list identifiers inconsistent with app-defined ones, must use App entitlements value
658
+ "com.apple.developer.icloud-container-identifiers" \
659
+ # PP enable all available services and not app-defined ones, must use App entitlements value
660
+ "com.apple.developer.icloud-services" \
661
+ # Was already denylisted in previous version, but has someone ever seen this key in a PP?
662
+ "com.apple.developer.restricted-resource-mode" \
663
+ # If actually used by the App, this value will be set in its entitlements
664
+ "com.apple.developer.nfc.readersession.formats" \
665
+ # PP list a single TeamID.* identifier and not app-defined ones, must use App entitlements value
666
+ "com.apple.developer.pass-type-identifiers" \
667
+ # If actually used by the App, this value will be set in its entitlements
668
+ "com.apple.developer.siri" \
669
+ # PP list identifiers inconsistent with app-defined ones, must use App entitlements value
670
+ "com.apple.developer.ubiquity-container-identifiers" \
671
+ # PP define a generic TeamID.* identifier and not the app-defined one, must use App entitlements value
672
+ "com.apple.developer.ubiquity-kvstore-identifier" \
673
+ # If actually used by the App, this value will be set in its entitlements
674
+ "inter-app-audio" \
675
+ # PP define a generic TeamID.* identifier and not the app-defined one, must use App entitlements value
676
+ "keychain-access-groups" \
677
+ # If actually used by the App, this value will be set in its entitlements
678
+ "com.apple.developer.homekit" \
679
+ # If actually used by the App, this value will be set in its entitlements
680
+ "com.apple.developer.healthkit" \
681
+ # If actually used by the App, this value will be set in its entitlements
682
+ "com.apple.developer.healthkit.access" \
683
+ # PP list identifiers inconsistent with app-defined ones, must use App entitlements value
684
+ "com.apple.developer.in-app-payments" \
685
+ # If actually used by the App, this value will be set in its entitlements
686
+ "com.apple.developer.networking.vpn.api" \
687
+ # If actually used by the App, this value will be set in its entitlements
688
+ "com.apple.developer.networking.HotspotConfiguration" \
689
+ # PP list all available extensions and not app-defined ones, must use App entitlements value
690
+ "com.apple.developer.networking.networkextension" \
691
+ # If actually used by the App, this value will be set in its entitlements
692
+ "com.apple.developer.networking.multipath" \
693
+ # PP enable all domains via a non-AppStore-compliant '*' value, must use App entitlements value
694
+ "com.apple.developer.associated-domains" \
695
+ # If actually used by the App, this value will be set in its entitlements
696
+ "com.apple.developer.default-data-protection" \
697
+ # PP seem to list the same groups as the App, but use App entitlements value to be sure
698
+ "com.apple.security.application-groups" \
699
+ # Was already denylisted in previous version, seems to be an artifact from an old Xcode release
700
+ "com.apple.developer.maps" \
701
+ # If actually used by the App, this value will be set in its entitlements
702
+ "com.apple.external-accessory.wireless-configuration"
703
+ )
704
+
705
+ # Denylisted keys must not be included into new profile, so remove them from patched profile
706
+ for KEY in "${DENYLISTED_KEYS[@]}"; do
707
+ log "Removing denylisted key: $KEY"
708
+ PlistBuddy -c "Delete $KEY" "$PATCHED_ENTITLEMENTS" 2>/dev/null
709
+ done
710
+
711
+ # Get the old and new app identifier (prefix)
712
+ APP_ID_KEY="application-identifier"
713
+ # Extract just the identifier from the value
714
+ # Use the fact that we are after some identifier, which is always at the start of the string
715
+ OLD_APP_ID=$(PlistBuddy -c "Print $APP_ID_KEY" "$APP_ENTITLEMENTS" | grep -E '^[A-Z0-9]*' -o | tr -d '\n')
716
+ NEW_APP_ID=$(PlistBuddy -c "Print $APP_ID_KEY" "$PROFILE_ENTITLEMENTS" | grep -E '^[A-Z0-9]*' -o | tr -d '\n')
717
+
718
+ # Get the old and the new team ID
719
+ # Old team ID is not part of app entitlements, have to get it from old embedded provisioning profile
720
+ security cms -D -i "$TEMP_DIR/old-embedded.mobileprovision" > "$TEMP_DIR/old-embedded-profile.plist"
721
+ OLD_TEAM_ID=$(PlistBuddy -c "Print :TeamIdentifier:0" "$TEMP_DIR/old-embedded-profile.plist")
722
+ # New team ID is part of profile entitlements
723
+ NEW_TEAM_ID=$(PlistBuddy -c "Print com.apple.developer.team-identifier" "$PROFILE_ENTITLEMENTS" | grep -E '^[A-Z0-9]*' -o | tr -d '\n')
724
+
725
+ # List of rules for transferring entitlements from app to profile plist
726
+ # The format for each enty is "KEY[|ID_TYPE]"
727
+ # Where KEY is the plist key, e.g. "keychain-access-groups"
728
+ # and ID_TYPE is optional part separated by '|' that specifies what value to patch:
729
+ # TEAM_ID - patch the TeamIdentifierPrefix
730
+ # APP_ID - patch the AppIdentifierPrefix
731
+ # Patching means replacing old value from app entitlements with new value from provisioning profile
732
+ # For example, for KEY=keychain-access-groups the ID_TYPE=APP_ID
733
+ # Which means that old app ID prefix in keychain-access-groups will be replaced with new app ID prefix
734
+ # There can be only one ID_TYPE specified
735
+ # If entitlements use more than one ID type for single entitlement, then this way of resigning will not work
736
+ # instead an entitlements file must be provided explicitly
737
+ ENTITLEMENTS_TRANSFER_RULES=(\
738
+ "com.apple.developer.associated-domains" \
739
+ "com.apple.developer.default-data-protection" \
740
+ "com.apple.developer.healthkit" \
741
+ "com.apple.developer.healthkit.access" \
742
+ "com.apple.developer.homekit" \
743
+ "com.apple.developer.icloud-container-environment" \
744
+ "com.apple.developer.icloud-container-identifiers" \
745
+ "com.apple.developer.icloud-services" \
746
+ "com.apple.developer.in-app-payments" \
747
+ "com.apple.developer.networking.HotspotConfiguration" \
748
+ "com.apple.developer.networking.multipath" \
749
+ "com.apple.developer.networking.networkextension" \
750
+ "com.apple.developer.networking.vpn.api" \
751
+ "com.apple.developer.nfc.readersession.formats" \
752
+ "com.apple.developer.pass-type-identifiers|TEAM_ID" \
753
+ "com.apple.developer.siri" \
754
+ "com.apple.developer.ubiquity-container-identifiers" \
755
+ "com.apple.developer.ubiquity-kvstore-identifier|TEAM_ID" \
756
+ "com.apple.external-accessory.wireless-configuration" \
757
+ "com.apple.security.application-groups" \
758
+ "inter-app-audio" \
759
+ "keychain-access-groups|APP_ID")
760
+
761
+ # Loop over all the entitlement keys that need to be transferred from app entitlements
762
+ for RULE in "${ENTITLEMENTS_TRANSFER_RULES[@]}"; do
763
+ KEY=$(echo "$RULE" | cut -d'|' -f1)
764
+ ID_TYPE=$(echo "$RULE" | cut -d'|' -f2)
765
+
766
+ # Get the entry from app's entitlements
767
+ # Read it with PlistBuddy as XML, then strip the header and <plist></plist> part
768
+ ENTITLEMENTS_VALUE="$(PlistBuddy -x -c "Print $KEY" "$APP_ENTITLEMENTS" 2>/dev/null | /usr/bin/sed -e 's,.*<plist[^>]*>\(.*\)</plist>,\1,g')"
769
+ if [[ -z "$ENTITLEMENTS_VALUE" ]]; then
770
+ log "No value for '$KEY'"
771
+ continue
772
+ fi
773
+
774
+ if [[ "$KEY" == "com.apple.developer.icloud-container-environment" ]]; then
775
+ # Add specific iCloud Environment key to patched entitlements
776
+ # This value is set by Xcode during export (manually selected for Development and AdHoc, automatically set to Production for Store)
777
+ # Would need an additional dedicated option to specify the iCloud environment to be used (Development or Production)
778
+ # For now, we assume Production is to be used when signing with a Distribution certificate, Development if not
779
+ local certificate_name=$CERTIFICATE
780
+ local sha1_pattern='[0-9A-F]{40}'
781
+
782
+ if [[ "$CERTIFICATE" =~ $sha1_pattern ]]; then
783
+ log "Certificate $CERTIFICATE matches a SHA1 pattern"
784
+ local certificate_matches="$( security find-identity -v -p codesigning | grep -m 1 "$CERTIFICATE" )"
785
+ if [ -n "$certificate_matches" ]; then
786
+ certificate_name="$(/usr/bin/sed -E s/[^\"]+\"\([^\"]+\)\".*/\\1/ <<< $certificate_matches )"
787
+ log "Certificate name: $certificate_name"
788
+ fi
789
+ fi
790
+
791
+ if [[ "$certificate_name" =~ "Distribution:" ]]; then
792
+ ICLOUD_ENV="Production"
793
+ else
794
+ ICLOUD_ENV="Development"
795
+ fi
796
+ log "Overriding value for $KEY"
797
+ log "Old value: $ENTITLEMENTS_VALUE"
798
+ log "New value: $ICLOUD_ENV"
799
+ ENTITLEMENTS_VALUE="$ICLOUD_ENV"
800
+ fi
801
+
802
+ log "App entitlements value for key '$KEY':"
803
+ log "$ENTITLEMENTS_VALUE"
804
+
805
+ # Remove the entry for current key from profisioning profile entitlements (if exists)
806
+ PlistBuddy -c "Delete $KEY" "$PATCHED_ENTITLEMENTS" 2>/dev/null
807
+
808
+ # Add new entry to patched entitlements
809
+ # plutil needs dots in the key path to be escaped (e.g. com\.apple\.security\.application-groups)
810
+ # otherwise it interprets they key path as nested keys
811
+ # TODO: Should be able to replace with echo ${KEY//\./\\\\.} and remove shellcheck disable directive
812
+ # shellcheck disable=SC2001
813
+ PLUTIL_KEY=$(echo "$KEY" | /usr/bin/sed 's/\./\\\./g')
814
+ plutil -insert "$PLUTIL_KEY" -xml "$ENTITLEMENTS_VALUE" "$PATCHED_ENTITLEMENTS"
815
+
816
+ # Patch the ID value if specified
817
+ if [[ "$ID_TYPE" == "APP_ID" ]]; then
818
+ # Replace old value with new value in patched entitlements
819
+ log "Replacing old app identifier prefix '$OLD_APP_ID' with new value '$NEW_APP_ID'"
820
+ /usr/bin/sed -i .bak "s/$OLD_APP_ID/$NEW_APP_ID/g" "$PATCHED_ENTITLEMENTS"
821
+ elif [[ "$ID_TYPE" == "TEAM_ID" ]]; then
822
+ # Replace old team identifier with new value
823
+ log "Replacing old team ID '$OLD_TEAM_ID' with new team ID: '$NEW_TEAM_ID'"
824
+ /usr/bin/sed -i .bak "s/$OLD_TEAM_ID/$NEW_TEAM_ID/g" "$PATCHED_ENTITLEMENTS"
825
+ else
826
+ continue
827
+ fi
828
+ done
829
+
830
+ # Replace old bundle ID with new bundle ID in patched entitlements
831
+ # Read old bundle ID from the old Info.plist which was saved for this purpose
832
+ OLD_BUNDLE_ID="$(PlistBuddy -c "Print :CFBundleIdentifier" "$TEMP_DIR/oldInfo.plist")"
833
+ NEW_BUNDLE_ID="$(bundle_id_for_provison "$NEW_PROVISION")"
834
+ log "Replacing old bundle ID '$OLD_BUNDLE_ID' with new bundle ID '$NEW_BUNDLE_ID' in patched entitlements"
835
+ # Note: ideally we'd match against the opening <string> tag too, but this isn't possible
836
+ # because $OLD_BUNDLE_ID and $NEW_BUNDLE_ID do not include the team ID prefix which is
837
+ # present in the entitlements file.
838
+ # e.g. <string>AB1GP98Q19.com.example.foo</string>
839
+ # vs
840
+ # com.example.foo
841
+ /usr/bin/sed -i .bak "s!${OLD_BUNDLE_ID}</string>!${NEW_BUNDLE_ID}</string>!g" "$PATCHED_ENTITLEMENTS"
842
+
843
+ log "Resigning application using certificate: '$CERTIFICATE'"
844
+ log "and patched entitlements:"
845
+ log "$(cat "$PATCHED_ENTITLEMENTS")"
846
+ if [[ "${XCODE_VERSION/.*/}" -lt 10 ]]; then
847
+ log "Creating an archived-expanded-entitlements.xcent file for Xcode 9 builds or earlier"
848
+ cp -f "$PATCHED_ENTITLEMENTS" "$APP_PATH/archived-expanded-entitlements.xcent"
849
+ fi
850
+ /usr/bin/codesign ${VERBOSE} -f -s "$CERTIFICATE" --entitlements "$PATCHED_ENTITLEMENTS" "$APP_PATH"
851
+ checkStatus
852
+ else
853
+ log "Extracting entitlements from provisioning profile"
854
+ PlistBuddy -x -c "Print Entitlements" "$TEMP_DIR/profile.plist" > "$TEMP_DIR/newEntitlements"
855
+ checkStatus
856
+ log "Resigning application using certificate: '$CERTIFICATE'"
857
+ log "and entitlements from provisioning profile: $NEW_PROVISION"
858
+ if [[ "${XCODE_VERSION/.*/}" -lt 10 ]]; then
859
+ log "Creating an archived-expanded-entitlements.xcent file for Xcode 9 builds or earlier"
860
+ cp -- "$TEMP_DIR/newEntitlements" "$APP_PATH/archived-expanded-entitlements.xcent"
861
+ fi
862
+ # Must not qote KEYCHAIN_FLAG because it needs to be unwrapped and passed to codesign with spaces
863
+ # shellcheck disable=SC2086
864
+ /usr/bin/codesign ${VERBOSE} ${KEYCHAIN_FLAG} -f -s "$CERTIFICATE" --entitlements "$TEMP_DIR/newEntitlements" "$APP_PATH"
865
+ checkStatus
866
+ fi
867
+
868
+ # Remove the temporary files if they were created before generating ipa
869
+ rm -f "$TEMP_DIR/newEntitlements"
870
+ rm -f "$PROFILE_ENTITLEMENTS"
871
+ rm -f "$APP_ENTITLEMENTS"
872
+ rm -f "$PATCHED_ENTITLEMENTS"
873
+ rm -f "$PATCHED_ENTITLEMENTS.bak"
874
+ rm -f "$TEMP_DIR/old-embedded-profile.plist"
875
+ rm -f "$TEMP_DIR/profile.plist"
876
+ rm -f "$TEMP_DIR/old-embedded.mobileprovision"
877
+ rm -f "$TEMP_DIR/oldInfo.plist"
878
+ }
879
+
880
+ # Sign nested applications and app extensions
881
+ while IFS= read -d '' -r app;
882
+ do
883
+ log "Resigning nested application: '$app'"
884
+ resign "$app" NESTED
885
+ done < <(find "$TEMP_DIR/Payload/$APP_NAME" -d -mindepth 1 \( -name "*.app" -or -name "*.appex" \) -print0)
886
+
887
+ # Resign the application
888
+ resign "$TEMP_DIR/Payload/$APP_NAME"
889
+
890
+ # Repackage quietly
891
+ log "Repackaging as $NEW_FILE"
892
+
893
+ # Zip up the contents of the "$TEMP_DIR" folder
894
+ # Navigate to the temporary directory (sending the output to null)
895
+ # Zip all the contents, saving the zip file in the above directory
896
+ # Navigate back to the orignating directory (sending the output to null)
897
+ pushd "$TEMP_DIR" > /dev/null
898
+ # TODO: Fix shellcheck warning and remove directive
899
+ # shellcheck disable=SC2035
900
+ zip -qry "../$TEMP_DIR.ipa" *
901
+ popd > /dev/null
902
+
903
+ # Move the resulting ipa to the target destination
904
+ mv "$TEMP_DIR.ipa" "$NEW_FILE"
905
+
906
+ # Remove the temp directory
907
+ rm -rf "$TEMP_DIR"
908
+
909
+ log "Process complete"