私は自分のカスタムフレームワークを持っていて、XCode 10で正常に動作します。XCode11ベータ3で再構築してから、アプリに統合すると、次のエラーが発生します。
ターゲット 'x86_64-Apple-ios-simulator'のモジュール 'MyCustomFramework'が見つかりませんでした。見つかりました:arm64、arm64-Apple-ios
フレームワークプロジェクトの「有効なアーキテクチャ」に加えなければならない変更はありますか?
更新:私の場合のフレームワークは本当に小さく(1つのクラス、いくつかのメソッド)、ほとんど使用されていなかったため、正しい答えとして選択することはできません。それをいくつかのメソッドをメインプロジェクトに移動します。
この問題を解決するには、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/
これで問題が解決するはずです。
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ビットシミュレータ
Scheme
をチェックして、必ず正しいスキームを実行してください。
そして、XCode > -Your Main Target- > Build Active Architecture Only
を開き、すべてのアーキテクチャでビルドするために「NO」を設定する必要があります。
オプション:
[〜#〜] yes [〜#〜]-yesに設定すると、Xcodeは接続されているデバイスを検出し、アーキテクチャを決定して、そのアーキテクチャのみで構築します。
[〜#〜] no [〜#〜]-noに設定すると、すべてのアーキテクチャ上に構築されます。
私にとっては、設定が欠けていました。 Xcodeで、[ファイル]-> [ワークスペース設定]に移動します。ビルドシステムで、「レガシービルドシステム」に変更します。
もう一度実行して、新しいフレームワークをコピーします
XCodeで解決>-主なターゲット->アクティブアーキテクチャのみをビルド
はいを設定
プロジェクトのプロセスを自動化する場合は、フレームワークプロジェクトで使用する以下のスクリプトを試すことができます。
Objective-CとSwiftプロジェクトの両方で機能します。私は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
ベスト。