升级xcode12后,出现构建问题:
ld :building for iOS Simulator, but linking in object file built for iOS, file 'xxx.framework/xxx' for architecture arm64
它可以在iPhone上运行。
升级xcode12后,出现构建问题:
ld :building for iOS Simulator, but linking in object file built for iOS, file 'xxx.framework/xxx' for architecture arm64
它可以在iPhone上运行。
构建设置编辑器不再包括有效体系结构构建设置“VALID ARCHS”,其使用也不被鼓励。相反,有一个新的被排除的体系结构构建设置(EXCLUDED ARCHS)。
Xcode 12实际上是Apple Silicon的垫脚石,但这种平台还不可用。但是,在该平台上,我们将获得基于arm64的macOS,在该平台上模拟器将运行在arm64架构上,而不是现在基于Intel的x86_64架构上。
Xcode通常依赖于“运行目标”来构建其库/应用程序。因此,当选择模拟器作为“运行目标”时,它会为可用的模拟器体系结构构建应用程序,当选择设备作为“运行目标”时,它会构建适用于该设备支持的体系结构(arm *)的应用程序。
xcodebuild在Xcode 12 +构建系统中认为arm64是模拟器的有效体系结构。因此,当选择模拟器作为运行目标时,它可以尝试对基于arm64的模拟器进行编译/链接(尚不可用)。因此,它向clang(++)发送一些-target标志,例如arm64-apple-ios13.0-simulator格式,clang尝试对基于arm64的模拟器进行构建/链接,最终在基于Intel的mac上失败。
xcodebuild只尝试在Release版本中执行此操作。为什么?因为“仅构建活动架构(ONLY_ACTIVE_ARCH)”构建设置通常仅针对“发布”配置设置为“否”。这意味着xcodebuild将尝试为所选运行目标的所有架构变体构建您的库/应用程序的发行版。对于模拟器运行目标,它将从现在开始包括x86_64和arm64,因为Xcode 12+中的arm64也是模拟器支持Apple Silicon的受支持架构。
简而言之,每当Xcode尝试使用命令行xcodebuild(默认为发行版构建,请参见项目设置的“常规”选项卡)或者在发布模式下构建时,它都会失败。因此,解决此问题的简单方法是在您的库/应用程序中将“仅构建活动架构(ONLY_ACTIVE_ARCH)”设置为Yes,即使是在发布模式下也要如此。
解决该问题的步骤:
解决方案1:
解决方案2: