'Azure pipeline fails on building Kotlin Multiplatform shared framework usinig embedAndSignAppleFrameworkForXcode and fastlane

I'm working on a Kotlin Multiplatform project which is building fine locally but I can't get it to work on an Azure DevOps pipeline.

Some good things to know:

  • not using Cocoapods
  • using the embedAndSignAppleFrameworkForXcode gradlew command in Build Phases
  • all commands using fastlane work for multiple developers locally
  • we use custom configurations like: ProjectADebug/ProjectARelease but we defined KOTLIN_FRAMEWORK_BUILD_TYPE for all of them

I'm trying to get an Azure DevOps pipeline to build and upload to App Store Connect using fastlane. We are using match for signing, that works great. Archiving fails and it looks like it's failing on building the shared KMM framework.

Anybody with the same problems that could help me out? Or some tips how I can view those gym logs on the Azure VM because I assume there it says what actually went wrong instead of this general error.

▸ Running script 'Build Kotlin Common'
▸ Copying /Users/runner/Library/Developer/Xcode/DerivedData/Project-ffubndppzitzbxhibjgeavrhnzpw/Build/Intermediates.noindex/ArchiveIntermediates/Project/BuildProductsPath/ProjectRelease-iphoneos/Airship_AirshipCore.bundle
▸ Copying /Users/runner/Library/Developer/Xcode/DerivedData/Project-ffubndppzitzbxhibjgeavrhnzpw/Build/Intermediates.noindex/ArchiveIntermediates/Project/BuildProductsPath/Project Release-iphoneos/Airship_AirshipAutomation.bundle
** ARCHIVE FAILED **


The following build commands failed:
    PhaseScriptExecution Build\ Kotlin\ Common /Users/runner/Library/Developer/Xcode/DerivedData/Project-ffubndppzitzbxhibjgeavrhnzpw/Build/Intermediates.noindex/ArchiveIntermediates/Project/IntermediateBuildFilesPath/Project.build/ProjectRelease-iphoneos/Project.build/Script-2F4970EC27CD16A000E32F91.sh (in target 'Project' from project 'Project')
(1 failure)
ERROR [2022-05-10 13:04:32.36]: Exit status: 65

ERROR [2022-05-10 13:04:32.53]: ⬆️  Check out the few lines of raw `xcodebuild` output above for potential hints on how to solve this error
WARN [2022-05-10 13:04:32.53]: 📋  For the complete and more detailed error log, check the full log at:
WARN [2022-05-10 13:04:32.53]: 📋  /Users/runner/Library/Logs/gym/Project-Project.log

This is the the lane in Fastfile:

    lane :azure_beta do |options|

        label = options[:label].capitalize

        git_url = "someURL"

        match(
            type: "appstore",
            readonly: true,
            git_url: git_url,
            keychain_name: ENV["MATCH_KEYCHAIN_NAME"],
            keychain_password: ENV["MATCH_KEYCHAIN_PASSWORD"],
            verbose: true
        )
        
        build_app(
            project: "../Project/Project.xcodeproj",
            configuration: "#{label}Release",
            scheme: label
        )
        # fails on the build_app step...
        
        changelog = changelog_from_git_commits(
            pretty: "- (%ae) %s",
            date_format: "short",
            merge_commit_filtering: "exclude_merges"
        )

        upload_to_testflight(
            changelog: changelog,
            app_identifier: label == "Project" ? idsProjectA : idsProjectB,
            skip_waiting_for_build_processing: true
        )

        version_number = get_version_number(
            xcodeproj: "../Project/Project.xcodeproj",
            target: "Project", #Hardcoded because we have multiple targets, label is specificed in build_app configuration
            configuration: "#{label}Release"
        )

        add_git_tag(
            includes_lane: false,
            prefix: "ios-#{label.downcase}-#{version_number}-",
            build_number: number_of_commits
        )

        delete_keychain(name: ENV["MATCH_KEYCHAIN_NAME"])
    end

And this is my pipeline YAML:

pool:
  vmImage: 'macos-latest'

variables:
- group: fastlane

jobs: 
- job: testflight
  steps:
  - task: Bash@3
    displayName: fastlane update
    inputs:
      targetType: 'inline'
      script: |
        gem update fastlane
        fastlane --version
  - task: JavaToolInstaller@0
    inputs:
      versionSpec: '11'
      jdkArchitectureOption: 'x64'
      jdkSourceOption: 'PreInstalled'
  - task: Bash@3
    displayName: 'Update Dependencies'
    inputs:
      targetType: 'inline'
      script: HOMEBREW_NO_AUTO_UPDATE=1 brew bundle
  - task: Bash@3
    displayName: "Set build properties"
    inputs:
      targetType: 'inline'
      script: |
        echo "sdk.dir=/Users/runner/Library/Android/sdk"
        echo "INCLUDE_MOCKER=false" >> local.properties
        echo "INCLUDE_ANDROID=false" >> local.properties
        echo "INCLUDE_TESTER=false" >> local.properties
        echo "APP_LABEL=$(APP_LABEL)" >> local.properties
    env:
      APP_LABEL: $(APP_LABEL)
  - task: Gradle@2
    displayName: 'Clean label common'
    inputs:
      workingDirectory: ''
      tasks: "common:cleanLabel"
    env:
      APP_LABEL: $(APP_LABEL)
  - task: Bash@3
    displayName: fastlane ios
    env:
      MATCH_PASSWORD: $(MATCH_PASSWORD)
      FASTLANE_PASSWORD: $(FASTLANE_PASSWORD)
      FASTLANE_SESSION: $(FASTLANE_SESSION)
      FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD: $(FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD)
    inputs:
      targetType: 'inline'
      script: |
        sudo xcode-select -s /Applications/Xcode_13.2.app
        cd ios/Project
        fastlane azure_beta label:Project app_identifier:project.bundle.id itc_team_id:itc.team.id team_id:team.id git_match_branch:master username:[email protected]


Solution 1:[1]

As it turned out there was an error in building the common KMM layer, I would have found it when doing a clean checkout probably but I found out by using a self-hosted agent on Azure Devops so I could navigate to the /Users/runner/Library/Logs/gym/Project-Project.log as Pylyp Dukhov suggested.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Tom Spee