Skip to content

Commit 362c7a3

Browse files
Build React Native iOS E2E IPA artifact
Assisted-By: devx/396ca0c4-44ad-415d-8d80-7200df4e42a4
1 parent 2093783 commit 362c7a3

3 files changed

Lines changed: 72 additions & 4 deletions

File tree

bitrise.yml

Lines changed: 44 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,19 +46,60 @@ workflows:
4646
e2e-build-react-native-ios:
4747
steps:
4848
- git-clone@8: {}
49+
- certificate-and-profile-installer@1: {}
4950
- restore-cache@1:
5051
inputs:
5152
- key: |-
5253
rn-ios-{{ checksum "platforms/react-native/pnpm-lock.yaml" }}-{{ checksum "platforms/react-native/sample/ios/Podfile.lock" }}
5354
- activate-build-cache-for-xcode: {}
5455
- script@1:
55-
title: Create React Native iOS artifact placeholder
56+
title: Build React Native iOS IPA artifact
5657
inputs:
5758
- content: |-
5859
set -euo pipefail
60+
corepack enable
61+
pnpm install --frozen-lockfile
62+
./scripts/setup_storefront_env --skip-optional-prompts
63+
cd platforms/react-native/sample
64+
bundle install
65+
cd ios
66+
bundle exec pod install --deployment --repo-update
5967
mkdir -p "$BITRISE_DEPLOY_DIR/e2e"
60-
echo "Phase 2 placeholder for React Native iOS IPA" > "$BITRISE_DEPLOY_DIR/e2e/react-native-ios.ipa"
61-
envman add --key E2E_REACT_NATIVE_IOS_APP_PATH --value "$BITRISE_DEPLOY_DIR/e2e/react-native-ios.ipa"
68+
archive_path="$BITRISE_DEPLOY_DIR/e2e/CheckoutKitReactNativeDemo.xcarchive"
69+
export_path="$BITRISE_DEPLOY_DIR/e2e/react-native-ios-export"
70+
export_options="$BITRISE_DEPLOY_DIR/e2e/ExportOptions.plist"
71+
export_method="${E2E_IOS_EXPORT_METHOD:-development}"
72+
cat > "$export_options" <<PLIST
73+
<?xml version="1.0" encoding="UTF-8"?>
74+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
75+
<plist version="1.0">
76+
<dict>
77+
<key>method</key>
78+
<string>$export_method</string>
79+
<key>signingStyle</key>
80+
<string>automatic</string>
81+
<key>stripSwiftSymbols</key>
82+
<true/>
83+
<key>compileBitcode</key>
84+
<false/>
85+
</dict>
86+
</plist>
87+
PLIST
88+
xcodebuild archive \
89+
-workspace CheckoutKitReactNativeDemo.xcworkspace \
90+
-scheme CheckoutKitReactNativeDemo \
91+
-configuration Release \
92+
-sdk iphoneos \
93+
-destination generic/platform=iOS \
94+
-archivePath "$archive_path" \
95+
-skipPackagePluginValidation
96+
xcodebuild -exportArchive \
97+
-archivePath "$archive_path" \
98+
-exportPath "$export_path" \
99+
-exportOptionsPlist "$export_options"
100+
ios_ipa="$(find "$export_path" -name "*.ipa" -print -quit)"
101+
test -f "$ios_ipa"
102+
envman add --key E2E_REACT_NATIVE_IOS_APP_PATH --value "$ios_ipa"
62103
- deploy-to-bitrise-io@2:
63104
inputs:
64105
- pipeline_intermediate_files: |-

e2e/BITRISE.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ Phase 2 only validates the graph shape and intermediate artifact wiring. Browser
2727
| `E2E_RUN_COUNT` | `2` | Number of expanded matrix rows to run in parallel. Keep this aligned with `ruby e2e/scripts/e2e_matrix count`. |
2828
| `STOREFRONT_DOMAIN` | Bitrise secret or app env | Required by `scripts/setup_storefront_env` for sample app builds. |
2929
| `STOREFRONT_ACCESS_TOKEN` | Bitrise secret | Required by `scripts/setup_storefront_env` for sample app builds. |
30+
| `E2E_IOS_EXPORT_METHOD` | `development` initially | Export method for the React Native iOS IPA. |
3031

3132
## Future secrets
3233

@@ -45,7 +46,9 @@ Configure the Bitrise app to run the `e2e` pipeline for pull requests once the s
4546

4647
## Code signing
4748

48-
React Native iOS IPA generation is added in a later phase and will require Bitrise iOS code signing setup for the sample app.
49+
React Native iOS IPA generation uses Bitrise's certificate and profile installer before running `xcodebuild archive` and `xcodebuild -exportArchive`.
50+
51+
Upload the required signing certificate and provisioning profile for the React Native sample app to the Bitrise app before running the iOS artifact workflow.
4952

5053
## Caching
5154

e2e/test/bitrise_pipeline_test.rb

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,30 @@ def test_react_native_android_workflow_does_not_use_local_native_sdk_overrides
6868
refute_includes script, "--local"
6969
end
7070

71+
def test_react_native_ios_workflow_builds_real_ipa_artifact
72+
config = load_bitrise_config
73+
script = workflow_script("e2e-build-react-native-ios")
74+
75+
assert_workflow_has_step(config, "e2e-build-react-native-ios", "certificate-and-profile-installer")
76+
assert_includes script, "corepack enable"
77+
assert_includes script, "pnpm install --frozen-lockfile"
78+
assert_includes script, "./scripts/setup_storefront_env --skip-optional-prompts"
79+
assert_includes script, "bundle exec pod install --deployment --repo-update"
80+
assert_includes script, "xcodebuild archive"
81+
assert_includes script, "-sdk iphoneos"
82+
assert_includes script, "generic/platform=iOS"
83+
assert_includes script, "xcodebuild -exportArchive"
84+
assert_includes script, "E2E_REACT_NATIVE_IOS_APP_PATH"
85+
refute_includes script, "Phase 2 placeholder for React Native iOS IPA"
86+
end
87+
88+
def test_react_native_ios_workflow_does_not_use_local_native_sdk_overrides
89+
script = workflow_script("e2e-build-react-native-ios")
90+
91+
refute_includes script, "USE_LOCAL_SDK"
92+
refute_includes script, "--local"
93+
end
94+
7195
def test_bitrise_setup_docs_exist
7296
assert File.exist?("e2e/BITRISE.md")
7397
end

0 commit comments

Comments
 (0)