找不到适用于 '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个回答

55
为了解决这个问题,我不得不再次使用xcode 11工具创建我的自定义框架的一个fat库。
为此,我进行了以下操作: 1) 构建iOS模拟器的YourCustomFramework目标,并从桌面上的产品文件夹中提取框架。

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

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/

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


我使用这种脚本已经很长时间了,但是发现在创建fat框架时缺少了#6项,这正是我的问题所在。 - Mando
对我来说,也缺少了 #6。谢谢! - Wukerplank
1
嗨@willhess,我已经完成了#6,但仍然无法构建。它仍然显示相同的错误。你能帮忙吗? - Jayant Jaiswal
最新的Xcode 11.7中缺少文件夹YourCustomFramework.swiftmodule。 - user-123
嗨@willhess,我喜欢你所做的!!!真的很棒,我也从中学到了很多。非常感谢你。 - Abhimanyu Rathore
@willhess 我增加了一件事情并进行了更新,以适应新的 Xcode 12.0。 - Abhimanyu Rathore

54

Swift 5.0-5.1,Xcode 11

打开Xcode,在“你的工程”中找到“Build Settings”,选择“Build Active Architecture Only”并将其更改为Debug和Release都选“NO”。架构设置/保留在标准架构 -$(ARCHS_STANDARD),下一步很重要:

有效架构:armv7、armv7s、arm64、arm64e,在这里添加x86_64,如果需要在Debug和Release中添加i386。 (字符串:armv7、armv7s、arm64、arm64e、x86_64)

在模拟器列表中选择任何一个模拟器并构建它即可完成。

希望对您有所帮助。

架构说明:

armv64:iPhoneX、iPhone 5s-8、iPad Air — iPad Pro

armv7:iPhone3Gs-5c、iPad WIFI(第4代)

armv6:iPhone — iPhone3G

-以上是真实设备的情况

i386:32位模拟器

x86_64:64位模拟器


4
抱歉,请问什么是“set/leave”,我是否需要删除“Standard Architecture -$(ARCHS_STANDART)”?谢谢。 - Álvaro Agüero
21
我加了 x86_64,但仍然收到相同的错误信息:“无法为目标 'x86_64-apple-ios-simulator' 找到模块”。 - Md Imran Choudhury
23
Swift 12已移除有效的架构。 - Michael Montalbano
6
@MichaelMontalbano,我已经成功将VALID_ARCHS添加为用户定义的设置,并将其设置为以下内容。在模拟器和设备上都能正常工作:$(ARCHS_STANDARD) x86_64 i386 - agrippa
5
我按照您的步骤进行操作,将 x86_64x86_64-ios-simulator 添加到我的 SDK 和项目中,但是遇到了这个错误:Could not find module 'BlazeSdk' for target 'x86_64-apple-ios-simulator'; found: arm64, arm64-apple-ios。请问如何在 Xcode 12.2 中解决这个问题?我希望在 iPad 模拟器上运行。 - Naresh
显示剩余4条评论

47

在此输入图片描述

这是因为您的所有库都不支持 M1 芯片的灵活性。所以右键点击 Xcode,获取信息并勾选“作为 Rosetta 打开”。打开您的项目,清理并编译。最后,像以前一样运行您的项目 :D


57
这只是一种懒人做法,而不是解决方案。 - Dani Pralea
5
如果你正在处理一个大型的项目,你的个人环境不应该影响项目配置。解决方案是将个人环境与项目配置分离开来,这样可以使项目配置更加灵活和敏捷。 - OlgaVogue
4
这是关于从第三方库获取信息的答案,针对M1芯片的MacBook。 - isaman kumara
4
我不知道这是一个黑客攻击还是正确的解决方案,但这个方法救了我。非常感谢你,伙计。 - Naval Hasan
4
无论是否“hacky”,在使用两个库都无法达成架构解决方案时,我很高兴能够通过这种方式完成我的工作。 - Logan
显示剩余6条评论

45

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

我移除了所有的SPM库,并添加了pods,同时将ONLY_ACTIVE_ARCH设置为NO。这些pods不是XCFramework,会出现问题。 - Brownsoo Han
根据所写的内容,似乎M1系统存在问题,但如果我们对英特尔系统进行更改,那么也会没问题。请告诉我... - Sudarshan Thorve

43

我已经添加了两个架构,i386和x86_64。 并将“仅构建活动架构”设置为是。 这对于在每个模拟器设备上构建都有效。

在此输入图片描述

XCode-12中,“Valid Architectures”已经移动到“用户定义”选项中,位于底部作为VALID_ARCHS。


3
我遇到了这个问题好几天,但是添加这些架构解决了问题。 - fdlr
12
在Xcode 12中,VALID_ARCHS可以在用户定义设置下找到。 - Mohan
9
“VALID_ARCHS”是我在Xcode 12中唯一有效的方法。您可以通过在项目目标构建设置选项卡的子标题栏中单击“+”图标来创建一个用户定义的设置。这个问题花费了太长时间,谢谢你们拯救了我的生命! - agrippa
2
尽管它让我可以像我想要的那样在模拟器上测试发布版本,但不幸的是,这个修复程序使我的ipa无法下载,在某些情况下也无法从Test Flight安装,尽管它的上传成功了。我需要一个非常快速的解决方案,所以我只是恢复了project.pbxproj中的更改,下一个ipa又像预期的那样工作了。 我没有时间进行深入测试,看看具体哪个部分导致了问题。 - Massimo Baldrighi
@iOS,您使用的是基于英特尔的Mac还是M1芯片的Mac? - AshWinee Dhakad
显示剩余6条评论

27

这是我在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

1
这适用于在 M1 上的 XCode 14。 - Vincent Gigandet
这个解决方案对我也适用。(XCode 14 - M1)注意:已在 XCode 14 - Intel 上测试通过。 - IKQ
这是唯一有效的解决方案,谢谢伙计。简而言之,代码片段将 ONLY_ACTIVE_ARCH 构建设置为“NO”,适用于 Xcode 项目中的每个构建配置。这确保了构建所有所需的架构,即使它们不是当前目标的活动架构。它可以帮助解决与缺失架构或特定框架或依赖项兼容性相关的问题。 - Lavkant Kachhwaha

17

请检查您的Scheme是否正确运行。

然后,您应该打开XCode > -您的主要目标- > 仅构建活动架构并将“NO”设置为在所有架构上构建。

选项:

YES - 如果设置为是,则Xcode将检测连接的设备,并确定架构,并且仅在该架构上进行构建。

NO - 如果设置为否,则会在所有架构上进行构建。


8
如果最初的框架没有使用x86架构,则此方法无法解决问题。在尝试使用模拟器进行构建时,仍会抛出错误。 - willhess
使用完整信息,但我按照您的步骤进行了操作... 我已经更新为“NO”,但没有用。如何在Xcode 12.2中解决此错误?我想在iPad模拟器上运行。 - Naresh

11
对于搭载 M1 芯片的 Mac 上的所有 Pod,您需要在构建设置的“架构”中添加“x86_64-apple-ios-simulator”支持。因此,操作步骤如下:
  1. 进入 Pods,选择错误的目标并在其中添加“x86_64-apple-ios-simulator”。enter image description here
  2. 在特定的 Pods 目标中将“构建活动架构”设置为“否”。

enter image description here

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

3
我按照您的步骤操作了,我在我的SDK和项目中都添加了“x86_64”和“x86_64-ios-simulator”,但是没有用,我得到了这个错误:“Could not find module 'BlazeSdk' for target 'x86_64-apple-ios-simulator'; found: arm64, arm64-apple-ios”。如何在Xcode 12.2中解决这个错误?我想在iPad模拟器上运行。 - Naresh
3
我们如何解决使用 SPM 构建的软件包的问题? - Waqas

10

我目前正在使用的是xcode 12.5

因此,我在最底部编辑了“用户定义”选项,并添加了VALID_ARCHS。

选择目标并进入构建设置

单击加号图标,您将看到

enter image description here

添加 VALID_ARCHS 和$ (ARCHS_STANDARD)值

或者您可以使用 -> armv7、armv7s、arm64、arm64e、x86_64、i386

enter image description here


7
我按照你的步骤进行了操作,将x86_64x86_64-ios-simulator添加到我的SDK和项目中,但是仍然出现了错误:Could not find module 'BlazeSdk' for target 'x86_64-apple-ios-simulator'; found: arm64, arm64-apple-ios。我该如何解决Xcode 12.2中的这个问题?我想在iPad模拟器上运行。 - Naresh
是的,它确实起作用了。 - Sathya Baman

8

对于使用 Xcode 12 的新 M1 Mac,我遇到了同样的问题。通过设置 Build Active Architecture Only = 'Yes' 并在构建设置中添加 VALID_ARCHS = arm64 armv7 arm64-ios-simulator(实际上是排除 x86_64x86_64-ios-simulator 架构),我成功解决了这个问题。


3
我按照您的步骤进行了操作... 我已经在我的 SDK 和项目中添加了 x86_64x86_64-ios-simulator,但是仍然无法使用,我得到了这个错误:Could not find module 'BlazeSdk' for target 'x86_64-apple-ios-simulator'; found: arm64, arm64-apple-ios。如何在 Xcode 12.2 中解决这个错误?我想在 iPad 模拟器上运行。 - Naresh
@Naresh 我也遇到了同样的问题,你找到解决方法了吗? - Sergey Didanov
@Sergey Didanov,不。 - Naresh
1
@SergeyDidanov 你尝试从所有地方排除基于英特尔架构(x86_64x86_64-ios-simulator)了吗?我的回答是针对苹果硅芯片的Mac电脑的。 - Siddharth Kamaria
2
这对我有用。在我的项目中,我正在通过CocoaPods使用GoogleMaps-SDK,强制我将Excluded Architectures设置为Any iOS Simulator SDK:arm64(以便在模拟器中运行项目),但反过来,在我正在使用SPM的另一个库却不喜欢这样设置。 - nayooti

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