diff --git a/Darwin/fastlane/Fastfile b/Darwin/fastlane/Fastfile index 6fc2306..cfc6f8f 100644 --- a/Darwin/fastlane/Fastfile +++ b/Darwin/fastlane/Fastfile @@ -20,26 +20,35 @@ lane :assemble do |options| ) end -# ─── Upload IPA to TestFlight (Bitrise's xcode-archive step already built it) ── lane :beta do |options| + desc "Build and upload to TestFlight" + + get_provisioning_profile(api_key_path: "fastlane/apikey.json") + + assemble + upload_to_testflight( - ipa: ENV["BITRISE_IPA_PATH"], + api_key_path: "fastlane/apikey.json", skip_waiting_for_build_processing: true ) end -# ─── Push metadata + upload IPA to App Store (Bitrise already built it) ─────── lane :release do |options| - deliver( - ipa: ENV["BITRISE_IPA_PATH"], + desc "Build and release app" + + # see https://docs.fastlane.tools/uploading-app-privacy-details/ + #upload_app_privacy_details_to_app_store(json_path: "fastlane/app_privacy_details.json") + + # if you have an apikey.json file (https://developer.apple.com/documentation/appstoreconnectapi/creating-api-keys-for-app-store-connect-api), fastlane can automatically fetch certificates and the ASC authentication information + #get_certificates(api_key_path: "fastlane/apikey.json") + get_provisioning_profile(api_key_path: "fastlane/apikey.json") + + assemble + + upload_to_app_store( + api_key_path: "fastlane/apikey.json", app_rating_config_path: "fastlane/metadata/rating.json", - release_notes: { default: "Fixes and improvements." }, - skip_screenshots: false, - skip_metadata: false, - force: true, - submit_for_review: false, - automatic_release: false, - run_precheck_before_submit: false + release_notes: { default: "Fixes and improvements." } ) end diff --git a/bitrise.yml b/bitrise.yml index 1f066ef..0a2b9d9 100644 --- a/bitrise.yml +++ b/bitrise.yml @@ -9,7 +9,8 @@ meta: app: envs: - - BITRISE_PROJECT_PATH: Darwin/PediFoods.xcodeproj + - TEST_SHARD_COUNT: 2 + - BITRISE_PROJECT_PATH: PediFoods.xcodeproj opts: is_expand: false - BITRISE_SCHEME: PediFoods App @@ -24,16 +25,75 @@ app: # ASC_ISSUER_ID → App Store Connect Issuer ID # ASC_KEY_CONTENT → .p8 file content base64-encoded # ITC_TEAM_ID → iTunes Connect Team ID (numeric) - # DEVELOPMENT_TEAM → Apple Developer Team ID, written into - # Darwin/fastlane/AppStore.xcconfig at build time - # (Darwin/PediFoods.xcconfig leaves it blank on - # purpose — this project has no VERSIONING_SYSTEM / - # hardcoded team like LC Wallet, so it's injected - # here instead) + +# ─── PIPELINES ──────────────────────────────────────────────────────────────── +pipelines: + run_tests: + workflows: + build_for_testing: {} + test_without_building: + depends_on: + - build_for_testing + parallel: "$TEST_SHARD_COUNT" # ─── WORKFLOWS ──────────────────────────────────────────────────────────────── workflows: + # ── Parallel test pipeline: step 1 — build only ─────────────────────────── + build_for_testing: + description: Build app for testing (no run) — used by run_tests pipeline + steps: + - git-clone@8: {} + - xcode-build-for-test@3: + inputs: + - project_path: $BITRISE_PROJECT_PATH + - scheme: $BITRISE_SCHEME + - simulator_device: iPhone 16 + - simulator_os_version: latest + - output_tool: xcpretty + - deploy-to-bitrise-io@2: + inputs: + - pipeline_intermediate_files: "$BITRISE_TEST_BUNDLE_ZIP_PATH:BITRISE_TEST_BUNDLE_ZIP_PATH" + + # ── Parallel test pipeline: step 2 — run shards ─────────────────────────── + test_without_building: + description: Run test shards in parallel — depends on build_for_testing + steps: + - pull-intermediate-files@1: + inputs: + - artifact_sources: build_for_testing + - xcode-test-without-building@0: + inputs: + - xctestrun: $BITRISE_TEST_BUNDLE_ZIP_PATH + - destination: platform=iOS Simulator,name=iPhone 16,OS=latest + - test_shard_index: $BITRISE_IO_PARALLEL_INDEX + - total_number_of_shards: $TEST_SHARD_COUNT + - generate_code_coverage_files: "yes" + + # ── Metadata push (no build) ─────────────────────────────────────────────── + metadata: + description: Push App Store metadata and screenshots for all languages + steps: + - git-clone@8: {} + - fastlane@3: + inputs: + - lane: metadata + - work_dir: $BITRISE_SOURCE_DIR + + # ── Simple single-machine test (non-parallel) ────────────────────────────── + test: + description: Run unit tests (single machine, for PR checks) + steps: + - git-clone@8: {} + - xcode-test@5: + inputs: + - project_path: $BITRISE_PROJECT_PATH + - scheme: $BITRISE_SCHEME + - simulator_device: iPhone 16 + - simulator_os_version: latest + - should_build_before_test: "yes" + - generate_code_coverage_files: "yes" + # ── Beta → TestFlight ────────────────────────────────────────────────────── beta: description: Build, sign, and upload to TestFlight @@ -44,16 +104,14 @@ workflows: inputs: - content: | cd $BITRISE_SOURCE_DIR - # CURRENT_PROJECT_VERSION lives in Skip.env — shared by both - # Darwin/PediFoods.xcconfig and Android/settings.gradle.kts. - # No VERSIONING_SYSTEM is set on the target, so agvtool - # (which LC Wallet uses) does not apply to this project. - sed -i '' "s/CURRENT_PROJECT_VERSION = .*/CURRENT_PROJECT_VERSION = $BITRISE_BUILD_NUMBER/" Skip.env - - script@1: - title: Write code signing team + agvtool new-version -all $BITRISE_BUILD_NUMBER + - manage-ios-code-signing@2: inputs: - - content: | - echo "DEVELOPMENT_TEAM = $DEVELOPMENT_TEAM" >> "$BITRISE_SOURCE_DIR/Darwin/fastlane/AppStore.xcconfig" + - distribution_method: app-store + - project_path: $BITRISE_PROJECT_PATH + - scheme: $BITRISE_SCHEME + # MANUAL: Upload .p12 cert + .mobileprovision in + # Bitrise → Code Signing tab BEFORE running this workflow - xcode-archive@5: inputs: - project_path: $BITRISE_PROJECT_PATH @@ -72,7 +130,7 @@ workflows: # ── Full release → App Store ─────────────────────────────────────────────── release: - description: Build, sign, push metadata, upload binary to App Store + description: Build, sign, push metadata+screenshots, upload binary to App Store envs: - ASC_KEY_ID: $ASC_KEY_ID - ASC_ISSUER_ID: $ASC_ISSUER_ID @@ -91,18 +149,17 @@ workflows: echo "ASC_KEY_ID is set (length: ${#ASC_KEY_ID})" echo "ASC_ISSUER_ID is set (length: ${#ASC_ISSUER_ID})" echo "ASC_KEY_CONTENT is set (length: ${#ASC_KEY_CONTENT})" - echo "DEVELOPMENT_TEAM is set (length: ${#DEVELOPMENT_TEAM})" - script@1: title: Set build number inputs: - content: | cd $BITRISE_SOURCE_DIR - sed -i '' "s/CURRENT_PROJECT_VERSION = .*/CURRENT_PROJECT_VERSION = $BITRISE_BUILD_NUMBER/" Skip.env - - script@1: - title: Write code signing team + agvtool new-version -all $BITRISE_BUILD_NUMBER + - manage-ios-code-signing@2: inputs: - - content: | - echo "DEVELOPMENT_TEAM = $DEVELOPMENT_TEAM" >> "$BITRISE_SOURCE_DIR/Darwin/fastlane/AppStore.xcconfig" + - distribution_method: app-store + - project_path: $BITRISE_PROJECT_PATH + - scheme: $BITRISE_SCHEME - xcode-archive@5: inputs: - project_path: $BITRISE_PROJECT_PATH @@ -112,7 +169,7 @@ workflows: - fastlane@3: inputs: - lane: release - - work_dir: $BITRISE_SOURCE_DIR/Darwin + - work_dir: $BITRISE_SOURCE_DIR - deploy-to-bitrise-io@2: {} # ─── TRIGGER MAP ────────────────────────────────────────────────────────────── @@ -121,3 +178,5 @@ trigger_map: workflow: beta - push_branch: main workflow: release + - pull_request_source_branch: feature/* + workflow: test