前提・実現したいこと
iPhoneOS(実機)、iPhoneSimulator(シミュレーター)両方に対応したフレームワーク(.framework)を作成しております。
現在、実機のみまたはシミュレーターのみのフレームワークの作成と動作確認はできております。
しかし、両方に対応したユニバーサルフレームワークを作成したのですが、片方でしか動作しません。
実機、シミュレーターともに対応したアーキテクチャは入っているのに、「iOS(またはiOSシミュレーター)用に構築されております。」とエラーが出てしまい、他の対処法がわかりません。
知っている方いましたら、どなたかご教示のほど宜しくお願い致します。
エラーメッセージ
/Users/…/UseFrameworkFourth.xcodeproj Building for iOS Simulator, but the linked and embedded framework 'MakeFrameworkFourth.framework' was built for iOS.
上記は実行プロジェクトにてフレームワークを追加し、試しにシミュレーターで実行したところエラーが発生しました。実機では成功しました。
Target「Aggregate」を追加しRunScriptにユニバーサル対応のソースコードを貼り付け、「Any iOS Device」※で作成したフレームワークで使用したところでたものです。
※シミュレーターを指定して作成して実機で実行しても「iOSシミュレーター用に構築されています」とエラーが出ます。
該当箇所
作成したフレームワークをユニバーサルフレームワークにしようと、参考URL(https://gist.github.com/cromandini/1a9c4aeab27ca84f5d79)からユニバーサル対応のソースコードを、フレームワークを作成しているXcodeプロジェクトのRunScriptに記述しました。
#!/bin/sh UNIVERSAL_OUTPUTFOLDER=${BUILD_DIR}/${CONFIGURATION}-universal # make sure the output directory exists mkdir -p "${UNIVERSAL_OUTPUTFOLDER}" # Step 1. Build Device and Simulator versions xcodebuild -target "${PROJECT_NAME}" ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build xcodebuild -target "${PROJECT_NAME}" -configuration ${CONFIGURATION} -sdk iphonesimulator ONLY_ACTIVE_ARCH=NO BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build # Step 2. Copy the framework structure (from iphoneos build) to the universal folder cp -R "${BUILD_DIR}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework" "${UNIVERSAL_OUTPUTFOLDER}/" # Step 3. Copy Swift modules from iphonesimulator build (if it exists) to the copied framework directory SIMULATOR_SWIFT_MODULES_DIR="${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework/Modules/${PROJECT_NAME}.swiftmodule/." if [ -d "${SIMULATOR_SWIFT_MODULES_DIR}" ]; then cp -R "${SIMULATOR_SWIFT_MODULES_DIR}" "${UNIVERSAL_OUTPUTFOLDER}/${PROJECT_NAME}.framework/Modules/${PROJECT_NAME}.swiftmodule" fi # Step 4. Create universal binary file using lipo and place the combined executable in the copied framework directory lipo -create -output "${UNIVERSAL_OUTPUTFOLDER}/${PROJECT_NAME}.framework/${PROJECT_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework/${PROJECT_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework/${PROJECT_NAME}" # Step 5. Convenience step to copy the framework to the project's directory cp -R "${UNIVERSAL_OUTPUTFOLDER}/${PROJECT_NAME}.framework" "${PROJECT_DIR}" # Step 6. Convenience step to open the project's directory in Finder open "${PROJECT_DIR}"
記述後それぞれビルドしました。下記画像はアーキテクチャが生成されたかの確認になります。
*シミュレーター:iPhone 12 Pro Max(以外の機器でもいい)
*実機:Any iOS Device
※追記
上記2つの画像に「Module」>「MakeFrameworkFourth」>「arm64-apple-ios-simulator.,,,」とあり、arm64はシミュレーターのアーキテクチャではないため、削除してみても結果は変わらずエラーでした。
環境
Xcode:12.4
Swift:5.3.2
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。