Detox build command working locally but failing in Github Action - ios

I have a .detoxrc.json with the following config:
"apps": {
"ios": {
"type": "ios.app",
"binaryPath": "./ios/build/Build/Products/Debug-iphonesimulator/<my-app-demo>.app",
"build": "xcodebuild -workspace ios/<my-app>.xcworkspace -configuration Debug -scheme '<my-app-demo>' -sdk iphonesimulator -derivedDataPath ios/build"
}
},
This works fine locally, and I'm able to build and test successfully.
However, in github actions it fails every time. I've tried running the step as yarn detox build -c ios and as the actual command from the "build" instruction, but no luck.
Here's what I'm currently trying to do in the action's yml file:
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
jobs:
build:
name: iOS Simulator Tests
runs-on: macos-12
steps:
- name: Checkout
uses: actions/checkout#v3
- name: Node
uses: actions/setup-node#v3
with:
node-version: 16
cache: "yarn"
- name: Cache node_modules
id: cache
uses: actions/cache#v2
with:
path: ./node_modules
key: ${{ runner.os }}-modules-${{ hashFiles('yarn.lock') }}
- name: Install node_modules
if: steps.cache.outputs.cache-hit != 'true'
run: yarn install --frozen-lockfile
- name: Pod Install
run: cd ios && pod install && cd ..
- name: Install Applesimutils
run: |
brew tap wix/brew
brew install applesimutils
- name: Detox build
run: yarn detox build -c ios
- name: Detox test
run: yarn detox test -c ios --cleanup
Why would this not work on a github runner? As far as I know there's no special config I should need for this to run.
EDIT: Here are the logs that are outputting on failure:
2022-10-17T13:20:19.5286140Z error: /Users/runner/work/buyer-app/buyer-app/ios/my-app/main.jsbundle: No such file or directory (in target 'my-app Feat' from project 'my-app')
2022-10-17T13:20:19.5286460Z
2022-10-17T13:20:19.5290650Z CpResource /Users/runner/work/buyer-app/buyer-app/ios/my-app/assets /Users/runner/work/buyer-app/buyer-app/ios/build/Build/Products/Debug-iphonesimulator/my-app\ Feat.app/assets (in target 'my-app Feat' from project 'my-app')
2022-10-17T13:20:19.5292650Z cd /Users/runner/work/buyer-app/buyer-app/ios
2022-10-17T13:20:19.5293830Z builtin-copy -exclude .DS_Store -exclude CVS -exclude .svn -exclude .git -exclude .hg -resolve-src-symlinks /Users/runner/work/buyer-app/buyer-app/ios/my-app/assets /Users/runner/work/buyer-app/buyer-app/ios/build/Build/Products/Debug-iphonesimulator/my-app\ Feat.app
2022-10-17T13:20:19.5294950Z error: /Users/runner/work/buyer-app/buyer-app/ios/my-app/assets: No such file or directory (in target 'my-app Feat' from project 'my-app')
2022-10-17T13:20:19.5295230Z
2022-10-17T13:20:19.5296230Z CpResource /Users/runner/work/buyer-app/buyer-app/ios/my-app-Omega.ttf /Users/runner/work/buyer-app/buyer-app/ios/build/Build/Products/Debug-iphonesimulator/my-app\ Feat.app/my-app-Omega.ttf (in target 'my-app Feat' from project 'my-app')
2022-10-17T13:20:19.5296910Z cd /Users/runner/work/buyer-app/buyer-app/ios
2022-10-17T13:20:19.5297970Z builtin-copy -exclude .DS_Store -exclude CVS -exclude .svn -exclude .git -exclude .hg -resolve-src-symlinks /Users/runner/work/buyer-app/buyer-app/ios/my-app-Omega.ttf /Users/runner/work/buyer-app/buyer-app/ios/build/Build/Products/Debug-iphonesimulator/my-app\ Feat.app
2022-10-17T13:20:19.5298790Z
2022-10-17T13:20:19.6324520Z ** BUILD FAILED **
2022-10-17T13:20:19.6324780Z
2022-10-17T13:20:19.6324790Z
2022-10-17T13:20:19.6325000Z The following build commands failed:
2022-10-17T13:20:19.6326500Z CpResource /Users/runner/work/buyer-app/buyer-app/ios/my-app/main.jsbundle /Users/runner/work/buyer-app/buyer-app/ios/build/Build/Products/Debug-iphonesimulator/my-app\ Feat.app/main.jsbundle (in target 'my-app Feat' from project 'my-app')
2022-10-17T13:20:19.6327810Z CpResource /Users/runner/work/buyer-app/buyer-app/ios/my-app/assets /Users/runner/work/buyer-app/buyer-app/ios/build/Build/Products/Debug-iphonesimulator/my-app\ Feat.app/assets (in target 'my-app Feat' from project 'my-app')
2022-10-17T13:20:19.6328290Z (2 failures)
2022-10-17T13:20:19.6446800Z 13:20:19.644 detox[12824] WARN: [build.js]
2022-10-17T13:20:19.6448980Z
2022-10-17T13:20:19.6450160Z Important: 'detox build' is a convenience shortcut for calling your own build command, as provided in the config file.
2022-10-17T13:20:19.6451260Z Failures in this build command are not the responsibility of Detox. You are responsible for maintaining this command.
2022-10-17T13:20:19.6451830Z
2022-10-17T13:20:19.6453150Z 13:20:19.644 detox[12824] ERROR: [cli.js] Command failed: xcodebuild -workspace ios/my-app.xcworkspace -configuration Debug -scheme 'my-app Feat' -sdk iphonesimulator -derivedDataPath ios/build
2022-10-17T13:20:19.6455530Z
2022-10-17T13:20:19.6647490Z error Command failed with exit code 1.
2022-10-17T13:20:19.6648170Z info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
2022-10-17T13:20:19.6746380Z ##[error]Process completed with exit code 1.

Related

How to use RCT_METRO_PORT correctly to change metro bundle port?

I would like to run tests on two different builds of iOS, therefore I need the metro bundler to run on two different ports.
But it's about the same repo, so I can't change all the occurrences of 8081.
Also, I can't change manually the port using devtools in iOS Simulator, because it's for e2e tests with Detox, automatics.
I saw here and there that the use of RCT_METRO_PORT could work, but until now I don't success...
So here is the simple question: how do we make use of RCT_METRO_PORT so that the metro bundler runs on another port than 8081, using either a .env file or an env variable in package.json scripts?
[EDIT]: my question is not only for react native run ios but also for building release, like this script set -o pipefail && xcodebuild -workspace ios/myapp.xcworkspace -configuration Debug -scheme myapp -destination name="iPhone 12 Pro" -derivedDataPath ios/build > /dev/null
Based on this answer you must change the default port from environment variable, there are three way
First: (local env): Install react-native-dotenv, and configure it on your babel config file. Then add a .env file in the root folder of your project and write RCT_METRO_PORT=8590. (8590 is sample for alternative port number)
Second: (global env): Go to your bash/zsh rc file and export the environment variable with number 8590 for example:
export RCT_METRO_PORT=8590
hint: if your OS is windows, for second option follow this answer
Third: (inline env): For each of actions you should use --port 8590:
Metro: yarn start --port 8590
Android: yarn android --port 8590
iOS: yarn ios --port 8590
TEST: run echo $RCT_METRO_PORT in your terminal to test 1st and 2nd way to be ensure your env var is set.
iOS Hint: For the ios folder of your project find the Pods folder and inside the Pods folder seek RCTDefines.h files, there are two of them, inside both of them change the 8081 to 8590.
For connecting to the React Native Debugger press ⌘+t and change the 8081 port to 8590.
this is how you can manage different ports for dev and stage env in package.json
DOCS
"scripts": {
"android:dev": "RCT_METRO_PORT=8081 react-native run-android",
"android:stage": "RCT_METRO_PORT=9091 react-native run-android",
"ios:dev": "RCT_METRO_PORT=8081 react-native run-ios",
"ios:stage": "RCT_METRO_PORT=9091 react-native run-ios",
"start:dev": "react-native start --port 8081",
"start:stage": "react-native start --port 9091",
"build:dev": "export RCT_METRO_PORT=8081 && set -o pipefail && xcodebuild -workspace ios/myapp.xcworkspace -configuration Debug -scheme myapp -destination name=\"iPhone 12 Pro\" -derivedDataPath ios/build > /dev/null",
"build:stage": "export RCT_METRO_PORT=9091 && set -o pipefail && xcodebuild -workspace ios/myapp.xcworkspace -configuration Debug -scheme myapp -destination name=\"iPhone 12 Pro\" -derivedDataPath ios/build > /dev/null",
}
OR
"scripts": {
"android:dev": "react-native run-android --port 8081",
"android:stage": "react-native run-android --port 9091",
"ios:dev": "react-native run-ios --port 8081",
"ios:stage": "react-native run-ios --port 9091",
"start:dev": "react-native start --port 8081",
"start:stage": "react-native start --port 9091",
"build:dev": "export RCT_METRO_PORT=8081 && set -o pipefail && xcodebuild -workspace ios/myapp.xcworkspace -configuration Debug -scheme myapp -destination name=\"iPhone 12 Pro\" -derivedDataPath ios/build > /dev/null",
"build:stage": "export RCT_METRO_PORT=9091 && set -o pipefail && xcodebuild -workspace ios/myapp.xcworkspace -configuration Debug -scheme myapp -destination name=\"iPhone 12 Pro\" -derivedDataPath ios/build > /dev/null",
}

Github Actions: xcpretty is not found despite being installed

I'm trying to replace our iOS project's horrible Jenkins setup with Github Actions. I think I have all the pieces in place, but I'm getting a failure I don't understand. In the step where I run xcodebuild to build and test the app, I'm getting an error that xcpretty is an unknown command, despite being installed via bundler in a previous step. Here are the relevant files:
build-and-run.yml
---
name: Build & Test
on:
# Run tests when a PR merges.
push:
branches:
- develop
# Run tests when PRs are created or updated.
pull_request:
types: [opened, synchronize, reopened]
# Allow the workflow to be run manually.
workflow_dispatch:
env:
DEVELOPER_DIR: /Applications/Xcode_12.app/Contents/Developer
jobs:
test:
name: Build & Test
runs-on: 'macos-latest'
steps:
- name: Checkout Project
uses: actions/checkout#v2
with:
ref: develop
- name: Setup Ruby
uses: ruby/setup-ruby#v1.46.0
with:
ruby-version: 2.7.1
- name: Restore Ruby Cache
uses: actions/cache#v1
with:
path: vendor/bundle
key: ${{ runner.os }}-gem-${{ hashFiles('**/Gemfile.lock') }}
restore-keys: |
${{ runner.os }}-gem-
- name: Restore Pod Cache
uses: actions/cache#v1
with:
path: Pods
key: ${{ runner.os }}-pods-${{ hashFiles('**/Podfile.lock') }}
restore-keys: |
${{ runner.os }}-pods-
- name: Bundle Install
run: |
bundle config path vendor/bundle
bundle install --without=documentation --jobs 4 --retry 3
- name: Install Cocoapods
run: pod install --repo-update
- name: Show Xcode Version
run: xcode-select -p
- name: Show Build Settings
run: xcodebuild -workspace ./MyApp.xcworkspace -scheme 'MyApp-Test' -destination 'platform=iOS Simulator,name=iPhone 11' -showBuildSettings
- name: Test MyApp
run: set -o pipefail && env NSUnbufferedIO=YES xcodebuild -workspace MyApp.xcworkspace -scheme MyApp-Test -destination 'platform=iOS Simulator,name=iPhone 11' -enableCodeCoverage YES -derivedDataPath build/derived-data clean test | xcpretty -s
- name: Run Danger
env:
DANGER_GITHUB_API_TOKEN: ${{ secrets.DANGER_GITHUB_API_TOKEN }}
run: bundle exec danger
Gemfile (we don't use fastlane in the action, but I have to keep it in the Gemfile for now so the builds don't break on our Jenkins box):
source 'https://rubygems.org'
ruby '2.7.1'
gem 'cocoapods'
gem 'danger'
gem 'fastlane'
gem 'xcpretty'
gem 'danger-slather'
gem 'danger-swiftlint'
gem 'danger-xcode_summary'
gem 'xcpretty-json-formatter'
plugins_path = File.join(File.dirname(__FILE__), 'fastlane', 'Pluginfile')
eval_gemfile(plugins_path) if File.exist?(plugins_path)
In the Bundle Install step, the xcpretty gem is being installed:
Fetching xcpretty 0.3.0
Installing xcpretty 0.3.0
The Install Cocoapods step also works fine (probably because Cocoapods is pre-installed). When it gets to the Test MyApp step, the invocation creates an error:
Run set -o pipefail && env NSUnbufferedIO=YES xcodebuild -workspace MyApp.xcworkspace -scheme MyApp-Test -destination 'platform=iOS Simulator,name=iPhone 11' -enableCodeCoverage YES -derivedDataPath build/derived-data clean test | xcpretty -s
/Users/runner/work/_temp/9d3633bf-6dae-45d7-a303-1c68abb63d53.sh: line 1: xcpretty: command not found
And then the workflow hangs for a very long time, so I usually cancel it. Any idea why xcpretty is not being found? My thought is, the directory where the gem is installed isn't in the search path, but I'm not sure about how I would do that. I'm sure there's a reasonable solution to this, but I'm having trouble finding it and am tired of banging my head against a wall.
I was facing the same issue while setting up fastlane to run my Xcode tests.
Finally, solved the issue by adding PATH in Jenkinsfile as below.
Note that SampleProject-TestCase-Executions is Sample app on my Desktop.
Please find GitHub Demo App for more info.
node {
stage "Run Fast file"
sh '''
cd /Users/bhooshanpatil/Desktop/SampleProject-TestCase-Executions
export PATH="$PATH:/usr/local/bin:/usr/local/bin:/usr/local/sbin$:"
fastlane scan
'''
}
Unfortunately, my solution was not at all tidy. I had to path into the gem installation directory and directly reference the gem executable. Thankfully, the relative path doesn't change, so I could just hardcode it into the test script. Maybe there's a more elegant solution, but once I got it working, I just dropped it.
And sorry if you're trying to reproduce this, but it was over a year ago and I left the company, so I don't have access to what the path was.
Jenkins -> Manage Jenkins -> Configure System -> Global properties -> Environment variables -> Name: LC_ALL, Value: en_US.UTF-8

iOS Github Actions (build, test and deploy)

I'm trying to make a simple workflow using github actons, so when I push for example to my master branch, it builds the code in macOS-latest and test it on OS 12.4, iPhone 11 Pro Max.
Since it's very new, the tutorials are not complete, can someone lend me hand?
This is what I have for now:
name: StyleOn_Workflow
on: [push]
jobs:
build:
runs-on: macOS-latest
strategy:
matrix:
destination: ['platform=iOS Simulator,OS=12.4,name=iPhone 11 Pro Max']
steps:
- uses: actions/checkout#master
- name: Build
run: swift build -v
test:
name: Test
runs-on: macOS-latest
strategy:
matrix:
destination: ['platform=iOS Simulator,OS=12.4,name=iPhone 11 Pro Max']
steps:
- name: Checkout
uses: actions/checkout#master
- name: Run tests
run: swift test -v
Also since I'm not deploying the app to the app store, how can I do the deployment phase? Maybe merge it to the master branch? I need to have 3 phases, build, test and deploy
This is the error I'm getting:
Based on your question I think you should use xcodebuild command line tool instead of swift build and swift test.
As I see you should use a command like this for build:
set -o pipefail && xcodebuild clean -scheme $SCHEME -destination $DESTINATION -derivedDataPath $DERIVED_DATA_PATH build-for-testing
And use this for testing:
set -o pipefail && xcodebuild test-without-building -xctestrun $(find . -type f -name "*.xctestrun") -destination "platform=iOS Simulator,name=$DEVICE" -derivedDataPath $DERIVED_DATA_PATH -enableCodeCoverage YES
Please note that between jobs you should upload and download the .xctestrun file.
You can find a detailed example here.

Failing to execute tests in Bitrise for debug variant

Description
I'm using Bitrise to run Detox tests. The build command runs ok and is a success. But the test command always fails.
Running locally:
Command detox test -c ios.sim.debug without starting the packager: 'No bundle URL present' error
Command detox test -c ios.sim.debug with the packager: Opens the packager and everything runs OK.
Command detox test -c ios.sim.release without the packager: works fine.
Command detox test -c ios.sim.release with the packager: works fine.
Running in Bitrise:
Command detox test -c ios.sim.debug --cleanup without starting the packager: 'No bundle URL present' error
Command detox test -c ios.sim.debug --cleanup with the packager:
Verify tests are up
"before all" hook:
Error: Timeout of 120000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/Users/vagrant/git/e2e/tests.spec.js)
Command detox test -c ios.sim.release --cleanup without the packager: works fine.
Command detox test -c ios.sim.release --cleanup with the packager: works fine.
Disclaimer
With/Without the packager means the variable RCT_NO_LAUNCH_PACKAGER equals false/true, respectively.
The package.json file
"ios.sim.debug": {
"binaryPath": "ios/build/Build/Products/Debug-iphonesimulator/PROJECT_NAME.app",
"build": "export RCT_NO_LAUNCH_PACKAGER=true && xcodebuild -workspace ios/PROJECT_NAME.xcworkspace -scheme INTEGRATION_SCHEME -configuration Debug -sdk iphonesimulator -derivedDataPath ios/build",
"type": "ios.simulator",
"name": "iPhone 7"
},
"ios.sim.release": {
"binaryPath": "ios/build/Build/Products/Release-iphonesimulator/PROJECT_NAME.app",
"build": "export RCT_NO_LAUNCH_PACKAGER=true && xcodebuild -workspace ios/PROJECT_NAME.xcworkspace -scheme PRODUCTION_SCHEME -configuration Release -sdk iphonesimulator -derivedDataPath ios/build",
"type": "ios.simulator",
"name": "iPhone 7 Plus"
},
The bitrise.yml file
_init_install:
steps:
- activate-ssh-key#3.1.1:
run_if: '{{getenv "SSH_RSA_PRIVATE_KEY" | ne ""}}'
- git-clone#4.0.11: {}
- script#1.1.5:
inputs:
- content: |-
#!/usr/bin/env bash
# fail if any commands fails
set -e
# debug log
set -x
# write your script here
brew uninstall --ignore-dependencies node
brew install node#8
brew link --overwrite --force node#8
- yarn#0.0.7: {}
_detox_tests:
steps:
- npm#0.9.0:
title: Install Detox CLI
inputs:
- command: install -g detox-cli
- npm#0.9.0:
title: Install React-Native CLI
inputs:
- command: install -g react-native-cli
- script#1.1.5:
title: Install Detox Utils
inputs:
- content: |-
#!/bin/bash
brew tap facebook/fb
export CODE_SIGNING_REQUIRED=NO
brew install fbsimctl
brew tap wix/brew
brew install applesimutils --HEAD
- script#1.1.5:
title: Detox - Build Debug App
inputs:
- content: |-
#!/usr/bin/env bash
detox build -c ios.sim.debug
- script#1.1.5:
title: Detox - Run E2E Tests
inputs:
- content: |-
#!/usr/bin/env bash
detox test -c ios.sim.debug --cleanup
- deploy-to-bitrise-io#1.3.10: {}
test_ios:
before_run:
- _init_install
after_run:
- _detox_tests
steps:
- cocoapods-install#1.7.2:
inputs:
- podfile_path: ios/Podfile
- resource-archive#2.0.1:
inputs:
- extract_to_path: "$HOME/Documents/FacebookSDK/"
- archive_url:https://origincache.facebook.com/developers/resources/?id=facebook-ios-sdk-current.zip
- certificate-and-profile-installer#1.9.3: {}
```
Detox, Node, Device, Xcode and macOS Versions
Detox: v7.4.3
React Native: v0.51.0
Node: v9.4.0
Device: iPhone 7 (simulator)
Xcode: Version 9.3 (9E145)
macOS: 10.13.3 (17D102)
Device and verbose Detox logs
Error detox test -c ios.sim.debug --cleanup with the packager
pastebin
File detox.last_launch_app_log.err prints:
pastebin
TL;DR
I get an error when running Detox with Bitrise. The command detox test -c ios.sim.debug --cleanup should open a packager but looks like it's not doing it.
The version that is needed to test is the Debug one, no other options. Maybe I missed something about the installation, but all the files were checked with official docs and other examples and are the identical.
Related issues: 742, 749, 740

Jenkins + iOS + TestFlight API

I installed a Jenkins and startet a Project with the Git Plugin, Xcode Plugin and the Testflight Plugin.
I can create automatic builds with the setup, but it is failing at the point on creating the .ipa files for Testflight.
The problem are at Debug and Release settings in different ways though…
If i try to create a .ipa via the Debug settings it will fail at the point that there is no build/Debug-iphoneos folder (i tried to turn of the clean option but it didn't helped). But the Xcode Build is not failing on the command line
When i try to switch to Release the linker is failing (ld).
Whithout the .ipa files i can't submit to Testflight and get a automated Test distributing.
Here is the script I'm using. (Obviously I removed the personal information, but you should be fine to understand it).
TARGET_NAME="-" # Target name
TARGET_SDK="iphoneos" # Target SDK: iphoneos
CONFIGURATION="Release" # Build Configuration
BUILD_DIR="build" # Directory where the build is generated
ARCHS="armv7" # Valid Architectures
APP_NAME="-" # Application name
## Provisioning configurations
BUILD_ARCHIVED_DIR="BuildArchived" # Directory with the history of builds
DEVELOPER_NAME="-" # Developer name
PROVISIONING_PROFILE=Prototype.mobileprovision # Provisioning profile file
PROVISIONING_DIR=~/Library/MobileDevice/Provisioning\ Profiles/ # Provisioning dir
## TestFlight App
TESTFLIGHT_API_TOKEN="-"
TESTFLIGHT_TEAM_TOKEN="-"
#Release Notes
BUILDSCRIPTS_DIR="build"
TESTFLIGHT_RELEASE_NOTES_FILE="ios_testflight-releasenotes"
#Distribution Lists
TESTFLIGHT_DISTRIBUTION_LISTS="Jenkins"
# Returns to the root directory of the build
cd ../ios
PROJECT_BUILDDIR="${BUILD_DIR}/${CONFIGURATION}-${TARGET_SDK}"
CURRENT_DIR=`pwd`
# fix for the newest sdk
# Only export the environment variable if the location exists,
# otherwise it breaks the signing process!
if [ -f "/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/codesign_allocate" ]
then
echo Export environment variable for codesign_allocate location
export CODESIGN_ALLOCATE=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/codesign_allocate
fi
#changing the build version
INFO_PLIST_PATH="${CURRENT_DIR}/${TARGET_NAME}/${TARGET_NAME}-Info.plist"
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion ${SVN_REVISION}" $INFO_PLIST_PATH
# compile project
echo Building Project
xcodebuild -target "${TARGET_NAME}" -sdk "${TARGET_SDK}" ARCHS=${ARCHS} -configuration "${CONFIGURATION}" clean build
#Check if build succeeded
#if [ $? != 0 ]
#then
# exit 1
#fi
# Create output dir ($x) if doesn't exist
mkdir -p $BUILD_ARCHIVED_DIR
# .ipa file generation
echo Generating .ipa file
/usr/bin/xcrun -sdk "${TARGET_SDK}" PackageApplication -v "${PROJECT_BUILDDIR}/${APP_NAME}.app" -o "${CURRENT_DIR}/${BUILD_ARCHIVED_DIR}/${APP_NAME}.ipa" --sign "${DEVELOPER_NAME}"
#zipping the .dSYM to send to Testflight
echo Generating zip file
/usr/bin/zip -r "${CURRENT_DIR}/${BUILD_ARCHIVED_DIR}/${APP_NAME}.app.dSYM.zip" "${CURRENT_DIR}/${PROJECT_BUILDDIR}/${APP_NAME}.app.dSYM"
echo Sending to TestFlight
curl http://testflightapp.com/api/builds.json -F file="#${CURRENT_DIR}/${BUILD_ARCHIVED_DIR}/${APP_NAME}.ipa" -F dsym="#${CURRENT_DIR}/${BUILD_ARCHIVED_DIR}/${APP_NAME}.app.dSYM.zip" -F api_token="${TESTFLIGHT_API_TOKEN}" -F team_token="${TESTFLIGHT_TEAM_TOKEN}" -F notes="This build was uploaded via the upload API" -F notify=False -F distribution_lists="${TESTFLIGHT_DISTRIBUTION_LISTS}"
echo Submission ended
I imagine the Scheme your build is targeting is incorrect.
Additionally, TestFlight has a plugin for Jenkins so you can script your build process and execute the upload to TestFlight using the their Jenkins Plugin. I have provided a build script example that works for me via manual command line and under Jenkins CI.
If you would like to see the full setup, you can find a iOS/Git/TestFlight tutorial here: Jenkins iOS – Git, xcodebuild, TestFlight
xcodebuild -alltargets clean
rm -rf "./JenkinsBuild/*"
xcodebuild -target HelloJenkins PROVISIONING_PROFILE="00000000-0000-0000-0000-000000000000" CONFIGURATION_BUILD_DIR=JenkinsBuild
rm -rf "./JenkinsArchive/*"
xcodebuild -scheme HelloJenkins archive PROVISIONING_PROFILE="00000000-0000-0000-0000-000000000000" CODE_SIGN_IDENTITY="iPhone Developer: Jonny Appleseed (XXXXXXXXXX)" -archivePath ./JenkinsArchive/HelloJenkins.xcarchive
rm -rf "./JenkinsIPAExport/*"
xcodebuild -exportArchive -exportFormat IPA -exportProvisioningProfile iOS\ Team\ Provisioning\ Profile:\ com.yourAPP.HelloJenkins -archivePath ./JenkinsArchive/HelloJenkins.xcarchive -exportPath ./JenkinsIPAExport/HelloJenkins.ipa

Resources