web-dev-qa-db-ja.com

ターゲット 'x86_64-Apple-ios-simulator'のモジュールが見つかりませんでした

私は自分のカスタムフレームワークを持っていて、XCode 10で正常に動作します。XCode11ベータ3で再構築してから、アプリに統合すると、次のエラーが発生します。

ターゲット 'x86_64-Apple-ios-simulator'のモジュール 'MyCustomFramework'が見つかりませんでした。見つかりました:arm64、arm64-Apple-ios

フレームワークプロジェクトの「有効なアーキテクチャ」に加えなければならない変更はありますか?

更新:私の場合のフレームワークは本当に小さく(1つのクラス、いくつかのメソッド)、ほとんど使用されていなかったため、正しい答えとして選択することはできません。それをいくつかのメソッドをメインプロジェクトに移動します。

19
Oleshko

この問題を解決するには、xcode 11ツールを使用して、カスタムフレームワークのファットライブラリを再度作成する必要がありました。

そのために、私は次のことを行いました。

1) iOSシミュレータ用のYourCustomFrameworkターゲットをビルドし、デスクトップの製品フォルダからフレームワークを抽出します。

Xcode⁩▸⁨DerivedData⁩▸⁨YourProject▸⁨Build⁩▸⁨Products⁩▸⁨Release-iphonesimulator

2) Generic iOS DeviceのYourCustomFrameworkターゲットをビルドし、デスクトップの製品フォルダーからフレームワークを抽出します。

Xcode⁩▸⁨DerivedData⁩▸⁨YourProject▸⁨Build⁩▸⁨Products⁩▸⁨Release-iphoneos⁩

シミュレータで生成されたフレームワークの名前をYourCustomFramework-sim.frameworkに変更して、後で区別できるようにします。

4) lipoコマンドを使用して、両方のバイナリを1つのファットバイナリファイルに結合します。 (デスクトップまたはカスタムフレームワークファイルがある場所にcdします)

$lipo -create ./YourCustomFramework-sim.framework/YourCustomFramework ./YourCustomFramework.framework/YourCustomFramework -output ./YourCustomFramework

5)上記の手順で作成したYourCustomFrameworkバイナリファイルをコピーし、YourCustomFramework.frameworkフォルダ内のバイナリに置き換えます。

6)フォルダから

YourCustomFramework-sim.framework/Modules/YourCustomFramework.swiftmodule/

すべてのモジュールをコピーして貼り付けます

YourCustomFramework.framework/Modules/YourCustomFramework.swiftmodule/

これで問題が解決するはずです。

17
willhess

Swift 5.0-5.1、Xcode 11
Xcode、<プロジェクト>、ビルド設定、アクティブアーキテクチャのみのビルドを開き、デバッグとリリースを<NO>に変更します。標準アーキテクチャで設定/脱退するアーキテクチャ-$(ARCHS_STANDART)、重要な次のステップ:
有効なアーキテクチャ:armv7、armv7s、amr64、amr64e、ここに追加x86_64。必要に応じて、デバッグとリリース用にi386を追加します。 (文字列:armv7、armv7s、amr64、amr64e、x86_64)

シミュレーターリストから任意のシミュレーターを選択し、ITを構築します。できました。

私はそれがあなたのために働くことを望みます。


アーキテクチャの説明:

armv64:iPhoneX、iPhone 5s-8、iPad Air — iPad Pro

armv7:iPhone3Gs-5c、iPad WIFI(第4世代)

armv6:iPhone — iPhone3G

-上記は実際のデバイスの場合

i386:32ビットシミュレータ

x86_64:64ビットシミュレータ

13
Serg Fugol

Schemeをチェックして、必ず正しいスキームを実行してください。

そして、XCode > -Your Main Target- > Build Active Architecture Onlyを開き、すべてのアーキテクチャでビルドするために「NO」を設定する必要があります。

オプション:

[〜#〜] yes [〜#〜]-yesに設定すると、Xcodeは接続されているデバイスを検出し、アーキテクチャを決定して、そのアーキテクチャのみで構築します。

[〜#〜] no [〜#〜]-noに設定すると、すべてのアーキテクチャ上に構築されます。

2
emrcftci

私にとっては、設定が欠けていました。 Xcodeで、[ファイル]-> [ワークスペース設定]に移動します。ビルドシステムで、「レガシービルドシステム」に変更します。

もう一度実行して、新しいフレームワークをコピーします

0
Miguel Perera

XCodeで解決>-主なターゲット->アクティブアーキテクチャのみをビルド

はいを設定

0
Sanjay Mishra

プロジェクトのプロセスを自動化する場合は、フレームワークプロジェクトで使用する以下のスクリプトを試すことができます。

Objective-CSwiftプロジェクトの両方で機能します。私はiOSとtvOSでもテストしました。

詳細と更新については、私の repoページ を参照してください。

脚本

#!/bin/sh

######################
# Globals
######################

# Avilable Platforms/Architectures 
# macosx | iphoneos | iphonesimulator | appletvos | appletvsimulator | watchos | watchsimulator
DEVICE_Arch="iphoneos"
DEVICE_SIM_Arch="iphonesimulator"

FRAMEWORK_NAME="${PROJECT_NAME}"
DEVICE_LIBRARY_PATH=${BUILD_DIR}/${CONFIGURATION}-${DEVICE_Arch}/${FRAMEWORK_NAME}.framework
SIMULATOR_LIBRARY_PATH=${BUILD_DIR}/${CONFIGURATION}-${DEVICE_SIM_Arch}/${FRAMEWORK_NAME}.framework
UNIVERSAL_LIBRARY_DIR=${BUILD_DIR}/${CONFIGURATION}-Universal
SUCCESS=true
EXIT_MESSAGE=$?
ROW_STRING="\n##################################################################\n"

echoPaths() 
{
    echo "${ROW_STRING}"
    echo "DEVICE_LIBRARY_PATH: ${DEVICE_LIBRARY_PATH}"
    echo "SIMULATOR_LIBRARY_PATH: ${SIMULATOR_LIBRARY_PATH}"
    echo "UNIVERSAL_LIBRARY_DIR: ${UNIVERSAL_LIBRARY_DIR}"
    echo "${ROW_STRING}"
}

checkSuccess()
{
    if [[ -z $EXIT_MESSAGE ]]; then
        SUCCESS=false
        exitWithMessage
        exit 1
    fi
}

exitWithMessage() 
{
    echo "${ROW_STRING}"

    if [ "$SUCCESS" = true ] ; then
        echo "\n\n\n ???? Completed with Success! ????"
    else
        echo "\n\n\n ???? Completed with Errors! Please check line above for details:"
        echo "${EXIT_MESSAGE}"
    fi

    open /tmp/${FRAMEWORK_NAME}_archive.log
    echo "\n ???? For more details you can always check the /tmp/${FRAMEWORK_NAME}_archive.log file. ???? \n\n\n"
    echo "${ROW_STRING}"
}

######################
######################
######################



######################
# Starting the logging
######################

exec > /tmp/${FRAMEWORK_NAME}_archive.log 2>&1
echo "\n ⏱ Starting the Universal Framework work... \n\n\n"

######################
# Echo the PATHS
######################

echoPaths

######################
# Make sure the output directory exists
######################

mkdir -p "${UNIVERSAL_LIBRARY_DIR}"

######################
# Step 1: Build Frameworks
######################

echo "${ROW_STRING}"
echo "\n\n\n ???? Step 1-1: Building for ${DEVICE_SIM_Arch}"
echo "${ROW_STRING}"

EXIT_MESSAGE="$(xcodebuild BITCODE_GENERATION_MODE=bitcode OTHER_CFLAGS="-fembed-bitcode" -workspace "${WORKSPACE_PATH}" -scheme "${TARGET_NAME}" -configuration ${CONFIGURATION} -sdk ${DEVICE_SIM_Arch} ONLY_DEVICE_Arch=NO BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" -UseModernBuildSystem=NO clean build)"

checkSuccess

echo "${ROW_STRING}"
echo "\n\n\n ???? Step 1-2: Building for ${DEVICE_Arch} \n\n\n"

EXIT_MESSAGE="$(xcodebuild BITCODE_GENERATION_MODE=bitcode OTHER_CFLAGS="-fembed-bitcode" -workspace "${WORKSPACE_PATH}" -scheme "${TARGET_NAME}" ONLY_DEVICE_Arch=NO -configuration ${CONFIGURATION} -sdk ${DEVICE_Arch}  BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" -UseModernBuildSystem=NO clean build)"

checkSuccess


######################
# Step 2. Copy the frameworks
######################

echo "${ROW_STRING}"
echo "\n\n\n ???? Step 2: Copy the framework structure for ${DEVICE_Arch}"
echo "${ROW_STRING}"

cp -R "${DEVICE_LIBRARY_PATH}" "${UNIVERSAL_LIBRARY_DIR}/"



######################
# Step 3. Create the universal binary
######################

echo "${ROW_STRING}"
echo "\n\n\n ???? Step 3: The LIPO Step"
echo "${ROW_STRING}"

lipo -create "${SIMULATOR_LIBRARY_PATH}/${FRAMEWORK_NAME}" "${DEVICE_LIBRARY_PATH}/${FRAMEWORK_NAME}" -output "${UNIVERSAL_LIBRARY_DIR}/${FRAMEWORK_NAME}.framework/${FRAMEWORK_NAME}"



######################
# Step 4. Copy the Swiftmodules. 
# This step is necessary only if your project is Swift. For the Swift framework, Swiftmodule needs to be copied in the universal framework. 
######################
echo "${ROW_STRING}"
echo "\n\n\n ???? Step 4: Copy the Swiftmodules"
echo "${ROW_STRING}"


if [ -d "${SIMULATOR_LIBRARY_PATH}/Modules/${FRAMEWORK_NAME}.swiftmodule/" ]; then

cp -f ${SIMULATOR_LIBRARY_PATH}/Modules/${FRAMEWORK_NAME}.swiftmodule/* "${UNIVERSAL_LIBRARY_DIR}/${FRAMEWORK_NAME}.framework/Modules/${FRAMEWORK_NAME}.swiftmodule/" | echo

else 
    echo "ℹ️ Couldn't any Swift module file for SIMULATOR!"
fi


if [ -d "${DEVICE_LIBRARY_PATH}/Modules/${FRAMEWORK_NAME}.swiftmodule/" ]; then

cp -f ${DEVICE_LIBRARY_PATH}/Modules/${FRAMEWORK_NAME}.swiftmodule/* "${UNIVERSAL_LIBRARY_DIR}/${FRAMEWORK_NAME}.framework/Modules/${FRAMEWORK_NAME}.swiftmodule/" | echo

else 
    echo "ℹ️ Couldn't any Swift module file for DEVICE!"
fi



######################
# Step 5. Remove the existing copy of the Universal framework and copy the framework to the project's directory
######################

echo "${ROW_STRING}"
echo "\n\n\n ???? Step 5 Copying in the project directory"
echo "${ROW_STRING}"

rm -rf "${PROJECT_DIR}/${FRAMEWORK_NAME}.framework"

yes | cp -Rf "${UNIVERSAL_LIBRARY_DIR}/${FRAMEWORK_NAME}.framework" "${PROJECT_DIR}"


######################
# Step 6. Open the project's directory
######################

echo "${ROW_STRING}"
open "${PROJECT_DIR}"
echo "${ROW_STRING}"



######################
# Step 7. Open the log file on Console application
######################

exitWithMessage

ベスト。

0
mgyky

2つのアーキテクチャi386とx86_64を追加しました。 「はい」を「アクティブアーキテクチャのみのビルド」に設定します。それは私がすべてのシミュレータデバイス上で構築するのに役立ちます。

enter image description here

0
AshWinee Dhakad