Ошибки при сборке xcframeworkIOS

Программируем под IOS
Ответить
Anonymous
 Ошибки при сборке xcframework

Сообщение Anonymous »

Я пытаюсь собрать xcframework из простого пакета SPM. Консультировался с ИИ, чтобы получить помощь в создании рабочего процесса, который я мог бы запустить вручную, чтобы создать xcframework и, наконец, загрузить его в общедоступный репозиторий для использования. В этом отношении я столкнулся с парой ошибок:
  • Рабочий процесс иногда случайно завершается с ошибкой, например

Код: Выделить всё

Ineligible destinations for the "FancyFramework" scheme:
{ platform:iOS, id:dvtdevice-DVTiPhonePlaceholder-iphoneos:placeholder, name:Any iOS Device, error:iOS 18.0 is not installed. To use with Xcode, first download and install the platform }
  • Когда рабочий процесс удается запустить, он в конечном итоге завершается с ошибкой:

Код: Выделить всё

error: the path does not point to a valid debug symbols file: archives/FancyFramework-iOS.xcarchive/dSYMs/FancyFramework.framework.dSYM
Моя цель — создать xcframework, который поддерживает минимальную целевую версию развертывания iOS 16.0, а также добавить dSYM в окончательную структуру, поскольку, насколько я понимаю, они помогут в отладке журналов сбоев. Вот содержимое файла Package.swift:

Код: Выделить всё

// swift-tools-version: 5.7
// The swift-tools-version declares the minimum version of Swift required to build this package.

import PackageDescription

let package = Package(
name: "FancyFramework",
platforms: [
.iOS(.v16),
],
products: [
.library(
name: "FancyFramework",
type: .dynamic,
targets: ["FancyFramework"]),
],
targets: [
.target(
name: "FancyFramework"),

]
)
Вот файл моего рабочего процесса (данный вторым пилотом):

Код: Выделить всё

# .github/workflows/release.yml

name: Create XCFramework Release

on:
workflow_dispatch:
inputs:
version:
description: 'The version to release (e.g., 1.0.0)'
required: true
type: string

env:
FRAMEWORK_NAME: FancyFramework
GITHUB_USERNAME: fancy
XCODE_VERSION: '16.0'
IOS_DEPLOYMENT_TARGET: '16.0'

jobs:
build_and_release:
name: Build, Release, and Update Distribution Repo
runs-on: macos-latest

permissions:
contents: write

steps:
- name: Checkout Source Code
uses: actions/checkout@v3

- name: Select Xcode ${{ env.XCODE_VERSION }}
uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: ${{ env.XCODE_VERSION }}

- name: List Available Destinations
run: |
xcodebuild -scheme ${{ env.FRAMEWORK_NAME }} -showdestinations

- name: Build and Assemble XCFramework
run: |
# Define predictable paths
ARCHIVE_PATH_IOS="archives/${{ env.FRAMEWORK_NAME }}-iOS.xcarchive"
ARCHIVE_PATH_SIM="archives/${{ env.FRAMEWORK_NAME }}-iOS-Simulator.xcarchive"
DERIVED_DATA_IOS="derived_data_ios"
DERIVED_DATA_SIM="derived_data_sim"

# --- Step 1: Build and Assemble for iOS ---
echo "Archiving for iOS..."
xcodebuild archive \
-scheme ${{ env.FRAMEWORK_NAME }} \
-destination "generic/platform=iOS" \
-archivePath "$ARCHIVE_PATH_IOS" \
-derivedDataPath "$DERIVED_DATA_IOS" \
-sdk iphoneos \
SKIP_INSTALL=NO \
BUILD_LIBRARY_FOR_DISTRIBUTION=YES \
DEBUG_INFORMATION_FORMAT=dwarf-with-dsym \
ONLY_ACTIVE_ARCH=NO \
IPHONEOS_DEPLOYMENT_TARGET=${{ env.IOS_DEPLOYMENT_TARGET }}

echo "Copying Swift module for iOS..."
mkdir -p "$ARCHIVE_PATH_IOS/Products/usr/local/lib/${{ env.FRAMEWORK_NAME }}.framework/Modules"
cp -r "$DERIVED_DATA_IOS/Build/Intermediates.noindex/ArchiveIntermediates/${{ env.FRAMEWORK_NAME }}/BuildProductsPath/Release-iphoneos/${{ env.FRAMEWORK_NAME }}.swiftmodule" \
"$ARCHIVE_PATH_IOS/Products/usr/local/lib/${{ env.FRAMEWORK_NAME }}.framework/Modules/"

echo "Checking for dSYM files for iOS..."
DSYM_SOURCE_IOS="$DERIVED_DATA_IOS/Build/Intermediates.noindex/ArchiveIntermediates/${{ env.FRAMEWORK_NAME }}/BuildProductsPath/Release-iphoneos/${{ env.FRAMEWORK_NAME }}.framework.dSYM"
if [ -d "$DSYM_SOURCE_IOS" ]; then
echo "dSYM found, copying for iOS..."
mkdir -p "$ARCHIVE_PATH_IOS/dSYMs"
cp -r "$DSYM_SOURCE_IOS" "$ARCHIVE_PATH_IOS/dSYMs/"
else
echo "Warning: dSYM not found at expected location for iOS"
find "$DERIVED_DATA_IOS" -name "*.dSYM" -type d
fi

xcodebuild archive \
-scheme ${{ env.FRAMEWORK_NAME }} \
-destination "generic/platform=iOS Simulator" \
-archivePath "$ARCHIVE_PATH_SIM" \
-derivedDataPath "$DERIVED_DATA_SIM"  \
-sdk iphonesimulator \
SKIP_INSTALL=NO \
BUILD_LIBRARY_FOR_DISTRIBUTION=YES \
DEBUG_INFORMATION_FORMAT=dwarf-with-dsym \
ONLY_ACTIVE_ARCH=NO \
IPHONEOS_DEPLOYMENT_TARGET=${{ env.IOS_DEPLOYMENT_TARGET }}

echo "Copying Swift module for iOS Simulator..."
mkdir -p "$ARCHIVE_PATH_SIM/Products/usr/local/lib/${{ env.FRAMEWORK_NAME }}.framework/Modules"
cp -r "$DERIVED_DATA_SIM/Build/Intermediates.noindex/ArchiveIntermediates/${{ env.FRAMEWORK_NAME }}/BuildProductsPath/Release-iphonesimulator/${{ env.FRAMEWORK_NAME }}.swiftmodule" \
"$ARCHIVE_PATH_SIM/Products/usr/local/lib/${{ env.FRAMEWORK_NAME }}.framework/Modules/"

echo "Checking for dSYM files for iOS Simulator..."
DSYM_SOURCE_SIM="$DERIVED_DATA_SIM/Build/Intermediates.noindex/ArchiveIntermediates/${{ env.FRAMEWORK_NAME }}/BuildProductsPath/Release-iphonesimulator/${{ env.FRAMEWORK_NAME }}.framework.dSYM"
if [ -d "$DSYM_SOURCE_SIM" ]; then
echo "dSYM found, copying for iOS Simulator..."
mkdir -p "$ARCHIVE_PATH_SIM/dSYMs"
cp -r "$DSYM_SOURCE_SIM" "$ARCHIVE_PATH_SIM/dSYMs/"
else
echo "Warning: dSYM not found at expected location for iOS Simulator"
find "$DERIVED_DATA_SIM" -name "*.dSYM" -type d
fi

echo "Creating XCFramework..."

# Check if dSYM files exist before including them
XCFRAMEWORK_ARGS="-framework $ARCHIVE_PATH_IOS/Products/usr/local/lib/${{ env.FRAMEWORK_NAME }}.framework"

if [ -d "$ARCHIVE_PATH_IOS/dSYMs/${{ env.FRAMEWORK_NAME }}.framework.dSYM" ]; then
echo "Creating XCFramework with debug symbols..."
XCFRAMEWORK_ARGS="$XCFRAMEWORK_ARGS -debug-symbols $ARCHIVE_PATH_IOS/dSYMs/${{ env.FRAMEWORK_NAME }}.framework.dSYM"
fi

XCFRAMEWORK_ARGS="$XCFRAMEWORK_ARGS -framework $ARCHIVE_PATH_SIM/Products/usr/local/lib/${{ env.FRAMEWORK_NAME }}.framework"

if [ -d "$ARCHIVE_PATH_SIM/dSYMs/${{ env.FRAMEWORK_NAME }}.framework.dSYM" ]; then
XCFRAMEWORK_ARGS="$XCFRAMEWORK_ARGS -debug-symbols $ARCHIVE_PATH_SIM/dSYMs/${{ env.FRAMEWORK_NAME }}.framework.dSYM"
fi

xcodebuild -create-xcframework \
$XCFRAMEWORK_ARGS \
-output "${{ env.FRAMEWORK_NAME }}.xcframework"

# 5. Zip and Checksum the XCFramework
- name: Zip and Checksum XCFramework
run: |
zip -r ${{ env.FRAMEWORK_NAME }}.xcframework.zip ${{ env.FRAMEWORK_NAME }}.xcframework
echo "CHECKSUM=$(swift package compute-checksum ${{ env.FRAMEWORK_NAME }}.xcframework.zip)" >> $GITHUB_ENV

# 6. Commit and Push the updated Package.swift FIRST
- name: Commit and Push to Distribution Repo
run: |
git clone https://x-access-token:${{ secrets.DISTRIBUTION_REPO_TOKEN }}@github.com/${{ env.GITHUB_USERNAME }}/${{ env.FRAMEWORK_NAME }}.git dist-repo
cd dist-repo
NEW_URL="https://github.com/${{ env.GITHUB_USERNAME }}/${{ env.FRAMEWORK_NAME }}/releases/download/${{ inputs.version }}/${{ env.FRAMEWORK_NAME }}.xcframework.zip"
sed -i '' "s|URL_PLACEHOLDER|${NEW_URL}|" Package.swift
sed -i '' "s|CHECKSUM_PLACEHOLDER|${{ env.CHECKSUM }}|" Package.swift
git config --global user.name 'github-actions[bot]'
git config --global user.email 'github-actions[bot]@users.noreply.github.com'
git add Package.swift
git commit -m "Update to version ${{ inputs.version }}"
git push

# 7. Create the Git tag in THIS source repository for history
- name: Create Git Tag in Source Repo
run: |
git tag ${{ inputs.version }}
git push origin ${{ inputs.version }}

# 8.  Create the final Release on the PUBLIC repository
- name: Create Release on Public Repo
env:
GH_TOKEN: ${{ secrets.DISTRIBUTION_REPO_TOKEN }}
run: |
gh release create ${{ inputs.version }} \
--repo "${{ env.GITHUB_USERNAME }}/${{ env.FRAMEWORK_NAME }}" \
--title "Release ${{ inputs.version }}" \
--notes "Binary release for version ${{ inputs.version }}." \
${{ env.FRAMEWORK_NAME }}.xcframework.zip
Любая помощь приветствуется.

Подробнее здесь: https://stackoverflow.com/questions/797 ... cframework
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»