找不到目标'x86_64-apple-ios-simulator'的模块

时间:2019-07-09 17:15:33

标签: ios swift xcode xcode11

我有我的自定义框架,并且可以在XCode 10中正常工作。我在XCode 11 beta 3中对其进行了重建,然后将其集成到应用程序中,并出现以下错误:

找不到目标“ x86_64-apple-ios-simulator”的模块“ MyCustomFramework”;找到:arm64,arm64-apple-ios

框架项目中的“有效架构”是否需要做一些更改?

11 个答案:

答案 0 :(得分:13)

我添加了两个体系结构i386和x86_64。 并将“是”设置为“仅构建活动体系结构”。 我可以在所有模拟器设备上构建它。

enter image description here

对于XCode-12,有效架构已在最底部的用户定义选项下移动为VALID_ARCHS

答案 1 :(得分:8)

要解决此问题,我不得不再次使用xcode 11工具创建一个自定义框架的胖库。

为此,我执行了以下操作:

1)为iOS模拟器构建YourCustomFramework目标,并从桌面上的products文件夹中提取框架。

Xcode⁩▸⁨DerivedData⁩▸⁨您的项目▸⁨Build⁩▸⁨Products⁩▸⁨Release-iphonesimulator

2)为通用iOS设备构建YourCustomFramework目标,并从桌面上的products文件夹中提取框架。

Xcode⁩▸⁨DerivedData⁩▸⁨您的项目▸⁨Build⁩▸⁨Products⁩▸⁨Release-iphoneos⁩

3),将模拟器生成的框架重命名为YourCustomFramework-sim.framework,以便以后可以区分。

4)使用lipo命令将两个二进制文件合并为一个胖二进制文件。 (安装到桌面或自定义框架文件所在的任何位置)

$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/

这应该可以解决您的问题。

答案 2 :(得分:8)

我在 M1 MacBook 上遇到了这个问题。

为了解决这个问题,我在我的主机应用程序 Podfile 中添加了以下几行:

post_install do |installer_representation|
    installer_representation.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
            config.build_settings['ONLY_ACTIVE_ARCH'] = 'NO'
            config.build_settings['BUILD_LIBRARY_FOR_DISTRIBUTION'] = 'YES'
        end
    end
end

编辑:添加此行也有助于解决运行时问题:

config.build_settings['BUILD_LIBRARY_FOR_DISTRIBUTION'] = 'YES'

答案 3 :(得分:5)

Swift 5.0-5.1,Xcode 11
打开Xcode,<您的项目>,构建设置,仅构建Active Architecture,并更改为以进行调试和发布。设置/保留标准体系结构-$(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(第四代)

armv6:iPhone-iPhone3G

-如果用于真实设备,则为以上

i386:32位模拟器

x86_64:64位模拟器

答案 4 :(得分:3)

enter image description here

这是因为您的所有库都不能灵活使用 m1 芯片。所以右键单击 xcode,获取信息并勾选以 rosetta 身份打开。打开您的项目,清理并构建。最后,像以前一样运行你的项目 :D

答案 5 :(得分:0)

请检查您的Scheme,确保运行正确的方案。

然后,您应该打开XCode > -Your Main Target- >“仅构建活动架构”,并为所有架构上的构建设置“否”。

选项:

-如果设置为yes,则Xcode将检测连接的设备,确定体系结构,并仅在该体系结构上构建。

-如果设置为no,则它将建立在所有体系结构上。

我希望这是可行的。

享受。

答案 6 :(得分:0)

我遇到了同样的问题。 Xcode10.2开始报告此错误。与框架合并的最新版本的xcode有哪些更改?相同的框架项目与xcode10.1一起运行,并且脚本将框架合并是没有问题的。

答案 7 :(得分:0)

如果要自动执行项目流程,可以尝试以下我在框架项目中使用的脚本。

它同时适用于 Objective-C Swift 项目。

有关更新,请关注我的repo page

脚本

#!/bin/sh

echo "\n ⏱ Starting the Universal Framework work \n\n\n"

exec > /tmp/${PROJECT_NAME}_archive.log 2>&1

FRAMEWORK_NAME="${PROJECT_NAME}"
DEVICE_LIBRARY_PATH=${BUILD_DIR}/${CONFIGURATION}-iphoneos/${FRAMEWORK_NAME}.framework
SIMULATOR_LIBRARY_PATH=${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${FRAMEWORK_NAME}.framework
UNIVERSAL_LIBRARY_DIR=${BUILD_DIR}/${CONFIGURATION}-Universal
ROW_STRING="\n##################################################################\n"

# Make sure the output directory exists
mkdir -p "${UNIVERSAL_LIBRARY_DIR}"

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

echo "${ROW_STRING}"
echo "\n\n\n ? Step 1: Building for iphonesimulator"
echo "${ROW_STRING}"
xcodebuild -workspace "${WORKSPACE_PATH}" -scheme "${TARGET_NAME}" -configuration ${CONFIGURATION} -sdk iphonesimulator ONLY_ACTIVE_ARCH=NO BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" -UseModernBuildSystem=NO clean build

echo "${ROW_STRING}"
echo "\n\n\n ? Step 1: Building for iphoneos \n\n\n"
xcodebuild -workspace "${WORKSPACE_PATH}" -scheme "${TARGET_NAME}" ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos  BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" -UseModernBuildSystem=NO clean build



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

echo "${ROW_STRING}"
echo "\n\n\n ? Step 2: Copy the framework structure for iphoneos"
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}/${PROJECT_NAME}" "${DEVICE_LIBRARY_PATH}/${PROJECT_NAME}" -output "${UNIVERSAL_LIBRARY_DIR}/${FRAMEWORK_NAME}.framework/${PROJECT_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/${PROJECT_NAME}.swiftmodule/" ]; then

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

fi


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

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

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
######################

echo "${ROW_STRING}"
open /tmp/${PROJECT_NAME}_archive.log
echo "${ROW_STRING}"

echo "\n\n\n ? For more details please check the /tmp/${PROJECT_NAME}_archive.log file. \n\n\n"
echo "\n\n\n ? Completed!"

最好。

答案 8 :(得分:0)

对我来说,这是一个缺少的设置。 在Xcode中,转到:文件->工作区设置。在“构建系统”中,将其更改为“旧版构建系统”。

再次运行并复制新的框架

答案 9 :(得分:0)

对于带有 Xcode 12 的新 M1 Mac,我遇到了同样的问题。我能够通过在构建设置中设置 Build Active Architecture Only = 'Yes' 并添加 VALID_ARCHS = arm64 armv7 arm64-ios-simulator(基本上不包括 x86_64x86_64-ios-simulator 架构)来解决它。

答案 10 :(得分:0)

对于 mac M1 芯片上的所有 pod,您需要在构建设置的架构中添加“x86_64-apple-ios-simulator”支持。所以过程会像,

  1. 转到 pods,选择错误目标在其中添加 x86_64-apple-ios-simulator。 enter image description here

  2. 设置“构建主动架构”。在 pod 特定目标中

enter image description here

它会解决这个问题。更多项目设置。您可以根据需要设置“构建主动架构”。