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

Could not find module for target 'x86_64-apple-ios-simulator'

我有我的自定义框架,它在 XCode 10 中正常工作。我在 XCode 11 beta 3 中重建它,然后集成到应用程序中,并得到以下错误:

找不到目标 'x86_64-apple-ios-simulator' 的模块 'MyCustomFramework';发现:arm64、arm64-apple-ios

框架项目中的 "valid architectures" 是否需要进行一些更改?

更新: 我无法选择任何正确的答案,因为我的框架非常小(一个 class,一些方法)和几乎不用,所以我决定去掉它,把这几个方法移到主项目中。

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

然后你应该打开 XCode > -Your Main Target- > Build Active Architecture Only 并设置 'NO' 以在所有架构上构建。

选项:

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

NO - 如果设置为 no,那么它将构建在所有架构上。

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

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

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

Xcode ▸ DerivedData ▸ 你的项目 ▸ 构建 ▸ 产品 ▸ Release-iphonesimulator

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

Xcode ▸ DerivedData ▸ 你的项目 ▸ 构建 ▸ 产品 ▸ Release-iphoneos

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

4) 使用 lipo 命令将两个二进制文件组合成一个 fat 二进制文件。 (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, , Build Settings, Build Active Architecture Only 并更改为 用于调试和发布。标准架构中的架构 set/leave -$(ARCHS_STANDARD),重要的是下一步:
有效架构:armv7、armv7s、arm64、arm64e,在此处添加 x86_64 如果您需要为 Debug 和 Release 添加 i386。 (字符串:armv7、armv7s、arm64、arm64e,x86_64)

在您的模拟器列表中选择任何模拟器并构建它。完毕。

希望对你有用。


架构描述:

armv64: iPhoneX, iPhone 5s-8, iPad 空气 — iPad Pro

armv7:iPhone3Gs-5c,iPadWIFI(第 4 代)

armv6 : iPhone — iPhone3G

-以上如果是真实设备

i386:32 位模拟器

x86_64 : 64 位模拟器

备选方案

这个问题实际上是关于创建自定义框架的。即使在发布多年后,人们仍然访问该页面以解决类似问题。我认为我们还需要寻求其他解决方案。

After Xcode 11 现在 Xcode 完全支持在 [=31= 中使用和创建二进制框架].使用新的 XCFramework 捆绑包类型同时支持设备和模拟器。 XCFrameworks 支持 Swift 和基于 C 的代码(C、C++、Objective-C)的二进制分发。单个 XCFramework 可以包含模拟器和设备的变体。这意味着您可以为任何架构发布切片,包括模拟器、任何 Apple OS,甚至可以为 UIKit 和 AppKit 应用程序提供单独的切片。

如果您对使用库创建自定义框架感兴趣,可以查看 repo

对我来说,这是缺少的设置。 在 Xcode 中转到:文件 -> 工作区设置。在构建系统中将其更改为 "Legacy Build system".

运行 再复制一遍新的Framework

我添加了两个架构 i386 和 x86_64。 并将“是”设置为“仅构建活动架构”。 它适用于我在每个模拟器设备上构建。

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

我在我的 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'

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

这是因为您的所有库都不适用于 m1 芯片。所以右键单击 xcode,获取信息并勾选以 Rosetta 方式打开。打开你的项目,清理并构建。最后,运行 你的项目和以前一样 :D

对于 mac M1 芯片上的所有 pods,您需要在构建设置中的体系结构中添加 'x86_64-apple-ios-simulator' 支持。所以过程就像,

  1. 转到pods,select错误目标在其中添加x86_64-apple-ios-simulator。

  2. 设置“构建活动架构”。 pods 特定目标。

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

此时我用的是xcode12.5

为此,我在最底部使用 VALID_ARCHS

编辑了用户定义的选项

Select the target and go to Build Setting

Click the plus icon and you will see

Add VALID_ARCHS and $(ARCHS_STANDARD) value

or you can use -> armv7, armv7s, arm64, arm64e, x86_64, i386

如果您认为@willhess 的回答很难,您可以使用此脚本

打开构建阶段 -> 单击加号 按钮 -> 新建运行 脚本阶段 并添加以下代码

UNIVERSAL_OUTPUTFOLDER=${BUILD_DIR}/${CONFIGURATION}-universal

mkdir -p "${UNIVERSAL_OUTPUTFOLDER}"

cp -a "${BUILD_DIR}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework" 
"${UNIVERSAL_OUTPUTFOLDER}/"


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


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}"


cp -R "${UNIVERSAL_OUTPUTFOLDER}/${PROJECT_NAME}.framework" 
"${PROJECT_DIR}"

open "${PROJECT_DIR}"

然后构建模拟器和任何ios设备,您的项目文件夹将打开并且您的胖框架将在那里

在我的例子中显示此警报是因为 Pod 'MessageKit'、'~> 3.3.0' 有这个问题,但只需将部署信息更改为 iOS 13 For MessageKit All Done

由于 Valid Archs 不适用于 Xcode 12,您将通过点击 + 并键入 VALID_ARCHS 以及 x86_64 和其他架构来创建用户定义的设置。

这就是我在 Podfile 中需要的全部内容:

post_install do |pi|
  pi.pods_project.targets.each do |t|
    t.build_configurations.each do |config|
      config.build_settings['ONLY_ACTIVE_ARCH'] = 'NO'
    end
  end
end

对于显示错误的任何 Pod 目标,我必须将 'Build Active Architecture Only'Debug:Yes/Release:No 设置为 Debug:No/Release:No

'Could not find module 'PODNAME' for target 'x86_64-apple-ios-simulator';'

其中 PODNAME 是编译时抛出错误的 pod。

删除你的 pods 和 使用此命令安装 pods “arch -x86_64” pod 安装

该错误意味着您的自定义框架是为 任何 ios 设备(实际设备)构建的,并且您正试图在 模拟器 正在测试您的应用程序的位置。
解决方法很简单。只需为您想要测试的模拟器(例如 Iphone 13 模拟器)而不是 'Any iOS Device' 重建您的自定义框架。并用新编译的框架替换旧框架