iOS ,ld:在架构 arm64 上找不到 GoogleMaps 框架

10

我正在使用Google地图开发一款应用程序。我将解释我是如何使用Google地图的,或许你可以帮助我。

之前我使用了不带POD的Google地图框架,但在遇到几个有关Google地图密钥的错误后,我删除了Google地图框架引用,并使用了POD进行安装。一切都工作正常,但当我点击

Product -> TEST

现在我会收到这个错误:

ld: framework not found GoogleMaps for architecture arm64

有办法修复这个问题吗?

谢谢!

Podfile看起来是这样的(Cocoapods v1.0 beta 6):

platform :ios, '8.0'
use_frameworks!

target 'Project' do
    pod 'GoogleMaps'

    target 'ProjectTests' do
        inherit! :search_paths
        pod 'Mockingjay'
    end
end

最好使用Cocoapod,将库/框架添加到您的项目中非常简单,这种方法更少出错。 - ztan
1
好的,谢谢,就像我说的...我现在正在使用CocoaPods。 - Asinox
@Asinox,你能更新一下你的Podfile吗? - HardikDG
4个回答

2

更新 请检查您的目标中的 ArchitecturesBuild active Architectures only 键是否具有相同的构建设置。

您的 podfile 应该像这样:

platform :ios, '8.0'
use_frameworks!

target 'Project' do
    pod 'GoogleMaps'
end

target 'ProjectTests' do
     //inherit! :search_paths
     pod 'Mockingjay'
end

在开始执行ProjectTest目标前,请先结束project目标,另外,为什么要添加inherit! :search_paths?通常情况下不需要,除非您有特殊的要求。请注意保留HTML标签。

旧答案

如果您想在测试目标中使用Pods,则必须以与项目主目标相同的方式将它们添加到测试中。

因此,如果“SwiftCocoaPods”是您的主目标名称,则您的Cocoa Pods如下:

//other top level imports
target “SwiftCocoaPodsdo
pod "GoogleMaps"
end

target “SwiftCocoaPodsTestsdo
pod "GoogleMaps"
end

然后你需要为测试也添加pods,例如"SwiftCocoaPodsTests"。你可以用你的测试目标名称替换这个名字。

如果你想在多个目标中添加相同的pods,你可以使用def并在所有目标中使用它,看起来像这样:

def project_pods
pod "GoogleMaps"
//add other pods which you want in all the targets
end

target “SwiftCocoaPods” do
project_pods 
end

//only add project_pods instead of pods individually 
target “SwiftCocoaPodsTests” do
project_pods
end

1
问题在于我们不想将GoogleMaps包含在测试目标中。因此,使用Cocoapods只能将其包含在主目标中。但是由于某些原因,测试目标仍然认为它需要加载GoogleMaps。 - GnarlyDog
@GnarlyDog 在你们给我负面评价之前,你们必须提到你们不想在测试目标中使用 CocoaPods,但它仍然显示/占用了 CocoaPods。你们当前的问题没有说明这一点,只是说构建失败了。 - HardikDG
1
好的。但我认为原始问题已经很清楚了。尽管如此,我会用一个示例Podfile更新问题。 - GnarlyDog
@GnarlyDog,更新了答案,也许可以帮到您。 - HardikDG
尽管如此...我仍然感觉需要将AdSupport.framework链接到测试目标的构建阶段。该框架位于主目标中,而测试目标与Google框架无关。我怀疑这可能与主应用程序的桥接头文件(其中导入了Google库)以及我在测试目标的测试用例中使用“@testable import MyApp”有关。 - GnarlyDog
显示剩余2条评论

0
这对我有效:
platform :ios, '9.0'

source 'https://github.com/CocoaPods/Specs.git'
use_frameworks!

def all_pods
    pod 'GoogleMaps'
end

abstract_target 'Map Base' do
     all_pods

     target 'Map' do

     end

     target 'Unit Tests' do

     end

     target 'Device Tests' do

     end
end

0

你可以尝试这个解决办法,按照https://github.com/googlemaps/google-maps-ios-utils/issues/355#issuecomment-800912985中的建议使用Rosetta打开Xcode。

这会影响你的性能,但是是有效的。

1 - With Xcode closed (Important) Go to finder -> Applications
2 - Right Click on Xcode and select "Get Info"
3 - On the info panel check "Open using Rosetta"
4 - Double Click in the large bottom preview of the info panel.

请看这条评论: https://github.com/googlemaps/google-maps-ios-utils/issues/355#issuecomment-1060959728

0

对于 Xcode 14.3+,请按照以下步骤在 Xcode 14.3+ 中使用 Rosetta 打开:

要在 Rosetta 模拟器上运行应用程序,您需要执行以下操作:

  1. 在菜单栏中转到“Product”菜单,选择“Destination” > “Destination Architectures” > “Show Rosetta Destinations”。
  2. 您将在模拟器旁边的括号中看到架构名称,此处为 Rosetta。

如果您想在两种架构上运行,请选择“Show Both”选项。

  • 在菜单栏中转到“Product”菜单,选择“Destination” > “Destination Architectures” > “Show Both”。

参考链接:https://sarunw.com/posts/open-using-rosetta-in-xcode-14-3/


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