找不到适用于 'x86_64-apple-ios-simulator' 目标的模块。

123

我的自定义框架在XCode 10中能够正常工作。但是我在XCode 11 beta 3中重新构建它,然后将其集成到应用程序中,出现了以下错误:

无法在目标“x86_64-apple-ios-simulator”中找到模块“MyCustomFramework”;已找到:arm64、arm64-apple-ios。

在框架项目中,我需要在“有效架构”中进行哪些更改吗?

更新: 在我的情况下,这个框架非常小(一个类,几个方法),几乎没有使用,因此我决定摆脱它,将这些几个方法移入主项目中。


https://dev59.com/vVIG5IYBdhLWcg3wkyCl#67194725 - Tatarasanu Victor
24个回答

7
对于搭载M1芯片的Macbook,使用XCode 14.3,在我将目标架构更改为“显示Rosetta目标”后,它可以正常工作。
产品 -> 目标 -> 目标架构 -> 显示Rosetta架构

enter image description here

也许这是黑客攻击。希望这能帮助快速解决这个问题。

1
当我在我的项目中将CocoaPods设置为在模拟器目标和SPM源库中排除arm64时,这对我很有帮助。 - Eugene Biryukov

4

这个错误意味着你的自定义框架已经为任何iOS设备(实际设备)构建,并且你正在尝试在模拟器上使用这个自定义框架来测试你的应用程序。
解决方案非常简单。只需重新为你要测试的模拟器(例如iPhone 13模拟器)构建你的自定义框架,而不是为“任何iOS设备”构建。然后用新编译的框架替换旧框架即可。


将“任何iOS设备”更改为iPhone 13模拟器并构建一次后,我的错误问题得到了解决。 - Enes F.
非常准确,将目标更改为“任何iOS设备”,使其成功编译而没有错误。 - William T.

2

在运行单元测试时,我遇到了 RxSwift 的问题。将 Pods 项目的构建设置更改为 Build Active Architecture OnlyNo,解决了我的问题。 enter image description here


2

我必须将'Build Active Architecture Only'Debug:Yes/Release:No设置为Debug:No/Release:No,以解决任何Pod目标显示错误的问题。

'在目标'x86_64-apple-ios-simulator'中找不到模块'PODNAME';'

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


1
如果你认为@willhess的答案很难,你可以使用这个脚本。
打开Build Phases -> 点击加号按钮 -> 新建运行脚本阶段并添加以下代码。
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设备上构建模拟器,你的项目文件夹将会打开并且你的fat框架也会在那里。

我按照你的步骤操作了,但是没有成功。如何解决Xcode 12.2中的错误?我想在iPad模拟器上运行。 - Naresh
我也尝试在Xcode 12.2上操作,你的框架文件应该是“Modules”文件夹,里面包含“frameworkname.swiftmodule”,在“frameworkname.swiftmodule”中应该有x86_64和arm64文件。 - Tolga İskender
Tolga İskender,你能否为我提供任何教程链接...无论是视频或其他类型。 - Naresh
您可以观看这位讲师的视频: https://www.youtube.com/watch?v=90Tp3WtQp40&ab_channel=iOSCoderAbhimanyuDaspan - Tolga İskender

1

替代方案

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

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

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


不起作用,而且你的描述和脚本不同。 - Md Imran Choudhury
请从仓库页面重新检查,我正在更新仓库但不是答案。 - mgyky
1
这是正确且最新的解决方案。 - undefined

1
将“仅构建活动架构”设置为“否”。 请查看下面的图片。

enter image description here


11
无法在 Mac M1 上运行 - Mehmet Baykar
我特别在我的Mac M1 Pro上进行了测试。 - Shubham Goel
6
是的,不起作用。你的配置文件还有更多内容,不仅仅是那些。 - Houman

1

使用以下命令删除您的Pod并安装Pod:
"arch -x86_64" pod install


0
在我的情况下,我在 pod init、install 等操作之后添加了测试目标。然后我发现,在 podfile 中添加测试目标块解决了我的问题。
例如:
target 'SampleProject' do
  # Comment the next line if you don't want to use dynamic frameworks
  use_frameworks!

  # Pods for SampleProject

  target 'SampleProjectTests' do
    inherit! :search_paths
    # Pods for testing
  end
end

0
在我的情况下,显示此警报是因为Pod 'MessageKit','〜> 3.3.0'存在此问题,但只需将Deployment info更改为iOS 13 For MessageKit即可完成所有操作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接