01 · Data
Sync the project, then import signing assets
Use rsync to sync your working directory from your local machine, excluding build outputs. Export certificates with their private keys to a password-protected file, and migrate provisioning profiles separately. After importing and verifying them, delete temporary transfer copies.
rsync -av \
--exclude DerivedData \
--exclude build \
-e "ssh -i ~/.ssh/minivps_workstation" \
./App/ dev@203.0.113.24:~/work/App/
Check: Project files are in place, and the certificate and private key needed for signing are both available.
02 · Toolchain
Use a manifest to align dependencies
Export a Brewfile locally, review it on the remote machine, then install its packages. Set up the Xcode version your project requires and use xcodes to select an installed version. Then check Ruby, Bundler, and the project's lockfile.
brew bundle dump --file=Brewfile
brew bundle --file=Brewfile
xcodes installed
xcodes select
xcodebuild -version
Check: Developer tools match the project requirements, and dependencies can be installed again reliably.
03 · CI setup
Switch the runner label last
Keep your existing pipeline and add a manually triggered validation job. Confirm it can check out the project, sign the build, and upload the artefact before pointing the production job's runs-on or node label to the new workstation.
cd ~/work/App
bundle install
xcodebuild -list
bundle exec fastlane beta
Check: A full job completes, its artefact can be retrieved, and failures are traceable in the logs.
This is a migration sequence, not a promise about how long it will take. Installing dependencies, downloading SDKs, and working with a large project usually take longer than signing in over SSH. Start by validating a build without a release step.