{"id":5803698,"name":"vfrascello/XCode-Deploy","ecosystem":"actions","description":"Archive, Export, and Upload a build to App Store Connect (TestFlight)","homepage":"","licenses":"mit","normalized_licenses":["MIT"],"repository_url":"https://github.com/vfrascello/XCode-Deploy","keywords_array":["apple","appstoreconnect","archive","cd","cicd","continuous-deployment","testflight","xcode"],"namespace":"vfrascello","versions_count":17,"first_release_published_at":"2022-09-18T20:39:30.000Z","latest_release_published_at":"2022-10-10T18:10:46.000Z","latest_release_number":"v1.5","last_synced_at":"2026-09-03T22:37:26.665Z","created_at":"2023-01-04T14:40:00.826Z","updated_at":"2026-09-11T15:28:29.681Z","registry_url":"https://github.com/vfrascello/XCode-Deploy","install_command":null,"documentation_url":null,"metadata":{"name":"XCode-Deploy","description":"Archive, Export, and Upload a build to App Store Connect (TestFlight)","author":"Vincent Frascello","branding":{"icon":"upload-cloud","color":"yellow"},"inputs":{"xcode-version":{"description":"The version of XCode to use. Defaults to the latest stable version.","requred":false,"default":"latest-stable"},"configuration":{"description":"Configuration (default: Release)","required":true,"default":"Release"},"scheme":{"description":"Leave blank and Action will search for default scheme.","required":false,"default":""},"path-to-export-options":{"description":"Relative path and filename to ExportOptions.plist","required":true,"default":"ExportOptions.plist"},"update-build":{"description":"Sets Build Number to # of commits.","required":true,"default":true,"type":"choice","options":[true,false]},"install-pods":{"description":"Run Pod Install","required":true,"default":false,"type":"choice","options":[true,false]},"resolve-package-dependencies":{"description":"Resolve Package Dependencies","required":true,"default":false,"type":"choice","options":[true,false]},"distribution-certificate-p12":{"description":"base64 representation of the distribution certificate.","required":true},"distribution-certificate-password":{"description":"password to unlock the distribution certificate.","required":true},"app-store-provisioning-profile":{"description":"base64 representation of the provisioning profile.","required":true},"auth-key-id":{"description":"App Store Connect API Auth Key ID.","required":true},"auth-key-issuer-id":{"description":"App Store Connect API Issuer ID.","required":true},"auth-key-p8":{"description":"base64 representation of the App Store Connect AuthKey.","required":true}},"runs":{"using":"composite","steps":[{"name":"Sanitize input","shell":"bash","env":{"SCHEME":"${{ inputs.scheme }}","CONFIGURATION":"${{ inputs.configuration }}","PATH_TO_EXPORT_OPTIONS":"${{ inputs.path-to-export-options }}"},"run":"echo \"[XCode-Deploy]: Checking Input for invalid characters...\"\nif [[ \"$SCHEME\" == ${SCHEME//[^a-zA-Z0-9_\\.- ]/} ]] \u0026\u0026 \\\n[[ \"$CONFIGURATION\" == ${CONFIGURATION//[^a-zA-Z0-9_\\.- ]/} ]] \u0026\u0026 \\\n[[ \"$PATH_TO_EXPORT_OPTIONS\" == ${PATH_TO_EXPORT_OPTIONS//^[a-zA-Z0-9](?:[a-zA-Z0-9 ._-]*[a-zA-Z0-9])?\\.[a-zA-Z0-9_-]+$/} ]]; then\necho \"Inputs OK\"\n  exit 0\n  else\n  echo \"Bad Inputs\"\nexit 1\nfi\n"},{"name":"Checkout","uses":"actions/checkout@v3","with":{"fetch-depth":0}},{"name":"Determine File To Build","shell":"bash","run":"echo \"[XCode-Deploy]: Determining file to build...\"\nif [ \"`ls -A | grep -i \\\\.xcworkspace\\$`\" ]; then filetype_parameter=\"workspace\" \\\n\u0026\u0026 file_to_build=\"`ls -A | grep -i \\\\.xcworkspace\\$`\"; \\\nelse filetype_parameter=\"project\" \u0026\u0026 file_to_build=\"`ls -A | grep -i \\\\.xcodeproj\\$`\"; fi\nfile_to_build=`echo $file_to_build | awk '{$1=$1;print}'`\necho \"TYPE=$filetype_parameter\" \u003e\u003e $GITHUB_ENV\necho \"FILE_TO_BUILD=$file_to_build\" \u003e\u003e $GITHUB_ENV\necho \"PROJECT_NAME=$(echo \"$file_to_build\" | cut -f 1 -d '.')\" \u003e\u003e $GITHUB_ENV\n"},{"name":"Setup Pods","if":"inputs.install-pods == 'true'","shell":"bash","run":"echo \"[XCode-Deploy]: Installing Pods...\"\npod install\n"},{"name":"Resolve Package Dependencies","if":"inputs.resolve-package-dependencies == 'true'","shell":"bash","run":"echo \"[XCode-Deploy]: Resolving Package Dependencies...\"\nxcodebuild -resolvePackageDependencies -clonedSourcePackagesDirPath .\n"},{"name":"Setup Scheme","shell":"bash","run":"echo \"[XCode-Deploy]: Searching for default Scheme...\"\nif [ \"${{ inputs.scheme }}\" == \"\" ]; then\n  scheme_list=$(xcodebuild -list -json | tr -d \"\\n\")\n  scheme=$(echo $scheme_list | ruby -e \"require 'json'; puts JSON.parse(STDIN.gets)['project']['targets'][0]\")\n  echo $scheme | cat \u003escheme\n  echo \"[XCode-Deploy]: Using default scheme: $scheme...\"\nelse \n  echo \"[XCode-Deploy]: Using provided Scheme: ${{ inputs.scheme }}\"\n  scheme=${{ inputs.scheme }}\nfi\necho \"SCHEME=$scheme\" \u003e\u003e $GITHUB_ENV\n"},{"name":"Import Certificates","uses":"apple-actions/import-codesign-certs@v1","id":"codesign","with":{"p12-file-base64":"${{ inputs.distribution-certificate-p12 }}","p12-password":"${{ inputs.distribution-certificate-password }}","keychain":"codesign"}},{"name":"Install App Store Profile","uses":"akiojin/install-provisioning-profile-github-action@v1.0","with":{"base64":"${{ inputs.app-store-provisioning-profile }}"}},{"name":"Select Xcode","uses":"maxim-lobanov/setup-xcode@v1.4.1","with":{"xcode-version":"${{ inputs.xcode-version }}"}},{"name":"Increment Build Number","shell":"bash","if":"inputs.update-build == 'true'","run":"echo \"[XCode-Deploy]: Updating Build Number to commit depth...\"\ncount=`git rev-list --count HEAD`\nxcrun agvtool new-version -all $count\n"},{"name":"Build and Archive","uses":"sersoft-gmbh/xcodebuild-action@v2","with":{"action":"archive","${{ env.TYPE }}":"${{ env.FILE_TO_BUILD }}","scheme":"${{ env.SCHEME }}","sdk":"iphoneos","build-settings":"-archivePath ${{ env.PROJECT_NAME }}.xcarchive\n","derived-data-path":"build/derivedData","destination":"generic/platform=iOS","configuration":"${{ inputs.configuration }}"}},{"name":"Get App Store Connect API Key","uses":"timheuer/base64-to-file@v1.1","with":{"fileName":"AuthKey_${{ inputs.auth-key-id }}.p8","fileDir":"${{ github.workspace }}/private_keys","encodedString":"${{ inputs.auth-key-p8 }}"}},{"name":"Export Xcode archive","shell":"bash","run":"echo \"[XCode-Deploy]: Exporting archive using xcodebuild...\"\nxcodebuild -exportArchive -verbose \\\n-sdk iphoneos \\\n-archivePath ${{ github.workspace }}/${{ env.PROJECT_NAME }}.xcarchive  \\\n-exportOptionsPlist ${{ github.workspace }}/${{ inputs.path-to-export-options }} \\\n-exportPath ${{ github.workspace }} \\          -authenticationKeyIssuerID ${{ inputs.auth-key-issuer-id }} \\\n-authenticationKeyID ${{ inputs.auth-key-id }} \\\n-authenticationKeyPath ${{ github.workspace }}/private_keys/AuthKey_${{ inputs.auth-key-id }}.p8 \\\n"},{"name":"Upload to App Store Connect","shell":"bash","run":"echo \"[XCode-Deploy]: Uploading archive using altool...\"\nxcrun altool --upload-app -f ${{ github.workspace }}/${{ env.PROJECT_NAME }}.ipa -t iOS \\\n--apiIssuer ${{ inputs.auth-key-issuer-id }} --apiKey ${{ inputs.auth-key-id }}\n"},{"name":"Cleanup","shell":"bash","run":"echo \"[XCode-Deploy]: Removing Keychain and private_keys folder...\"\nsecurity delete-keychain codesign.keychain\nrm  -rf ${{ github.workspace }}/private_keys || true"}]},"default_branch":"main","path":null},"repo_metadata":{"id":59637094,"uuid":"538234395","full_name":"observableobject/XCode-Deploy","owner":"observableobject","description":"A Github Action for Archiving, Exporting, and Uploading a build to App Store Connect (TestFlight)","archived":false,"fork":false,"pushed_at":"2023-05-31T00:58:14.000Z","size":19,"stargazers_count":20,"open_issues_count":3,"forks_count":8,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-09-03T22:37:26.738Z","etag":null,"topics":["apple","appstoreconnect","archive","cd","cicd","continuous-deployment","testflight","xcode"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/observableobject.png","metadata":{"files":{"readme":"Readme.MD","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2022-09-18T20:35:44.000Z","updated_at":"2026-04-19T01:00:10.000Z","dependencies_parsed_at":"2024-03-10T00:42:36.657Z","dependency_job_id":"6c875fc4-f4d7-4304-ad3c-4b93e6f14f33","html_url":"https://github.com/observableobject/XCode-Deploy","commit_stats":{"total_commits":6,"total_committers":2,"mean_commits":3.0,"dds":0.5,"last_synced_commit":"22c52153e7c96abc9cda0bfaf987acef85f70c58"},"previous_names":["vfrascello/xcode-deploy"],"tags_count":17,"template":false,"template_full_name":null,"purl":"pkg:github/observableobject/XCode-Deploy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/observableobject%2FXCode-Deploy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/observableobject%2FXCode-Deploy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/observableobject%2FXCode-Deploy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/observableobject%2FXCode-Deploy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/observableobject","download_url":"https://codeload.github.com/observableobject/XCode-Deploy/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/observableobject%2FXCode-Deploy/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":341189360,"owners_count":37219829,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-08-22T15:14:58.755Z","status":"online","status_checked_at":"2026-09-11T02:00:05.857Z","response_time":56,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"},"tags":[]},"repo_metadata_updated_at":"2026-09-11T15:28:29.681Z","dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":42.858974907023466,"dependent_packages_count":0.0,"stargazers_count":21.93818663702817,"forks_count":23.73787030308212,"average":22.133757961783438},"purl":"pkg:githubactions/vfrascello/XCode-Deploy","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/actions/vfrascello/XCode-Deploy","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/actions/vfrascello/XCode-Deploy","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/actions/vfrascello/XCode-Deploy/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":{"last_synced_at":"2025-08-31T15:26:41.294Z","issues_count":1,"pull_requests_count":0,"avg_time_to_close_issue":86.0,"avg_time_to_close_pull_request":null,"issues_closed_count":1,"pull_requests_closed_count":0,"pull_request_authors_count":0,"issue_authors_count":1,"avg_comments_per_issue":1.0,"avg_comments_per_pull_request":null,"merged_pull_requests_count":0,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":1,"past_year_pull_requests_count":0,"past_year_avg_time_to_close_issue":86.0,"past_year_avg_time_to_close_pull_request":null,"past_year_issues_closed_count":1,"past_year_pull_requests_closed_count":0,"past_year_pull_request_authors_count":0,"past_year_issue_authors_count":1,"past_year_avg_comments_per_issue":1.0,"past_year_avg_comments_per_pull_request":null,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":0,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/observableobject%2FXCode-Deploy/issues","maintainers":[],"active_maintainers":[]},"versions_url":"https://packages.ecosyste.ms/api/v1/registries/github%20actions/packages/vfrascello%2FXCode-Deploy/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/github%20actions/packages/vfrascello%2FXCode-Deploy/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/github%20actions/packages/vfrascello%2FXCode-Deploy/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/github%20actions/packages/vfrascello%2FXCode-Deploy/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/github%20actions/packages/vfrascello%2FXCode-Deploy/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/github%20actions/packages/vfrascello%2FXCode-Deploy/codemeta","maintainers":[]}