无法在XCode 5中链接GoogleAnalytics 3.01(缺少所需的架构x86_64)

46

我已经构建了我的应用程序(针对iOS7),现在想在提交之前完成最后一步,即应用Google Analytics。我所做的事情:

  1. 下载GA for iOS 3.01
  2. 导入 /GoogleAnalytics/Library/ 内容到“GoogleAnalytics”组中
  3. libGoogleAnalyticsServices.a 导入到“GoogleAnalytics”组中
  4. 添加构建阶段并交换构建阶段 libGoogleAnalytics_debug.alibGoogleAnalyticsServices.a
  5. 在我的 -Prefix.pch 文件中添加代码块 #include "GAI.h"
  6. 在我的 AppDelegate 中初始化 [GAI sharedInstance]

我在本帖底部附上了设置的截图。 当我尝试构建(无论是设备还是模拟器,都是32位),我会得到以下链接器错误:

Undefined symbols for architecture x86_64:
  "_OBJC_CLASS_$_GAI", referenced from:
      objc-class-ref in FTVAppDelegate.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我该如何解决这个问题?

更新1

我也收到了警告。

ld: warning: ignoring file .../libGoogleAnalyticsServices.a, missing required architecture x86_64 in file .../libGoogleAnalyticsServices.a (3 slices)
ld: warning: ignoring file .../SDWebImage.framework/SDWebImage, missing required architecture x86_64 in file .../SDWebImage.framework/SDWebImage (3 slices)

更新2

只有在编译64位时才会出现此错误。我不小心将“仅构建活动架构”设置为“否”,当更改为“是”时,我又能够再次构建了。这意味着该应用程序现在无法在 iPhone 5S 上运行 - 这仍然是一个问题。

4个回答

70

你没有做错任何事情。我相当确定Google还没有提供适用于arm64的libGoogleAnalyticsServices.a版本,这真的很烦人...自从Xcode 5GM发布以来已经过了几周。

目前,我想只能为armv7、armv7s构建或删除Google分析,直到他们想明白为止。

更新:最终修复,参见https://developers.google.com/analytics/devguides/collection/ios/resources


因此,如果我构建的是armv7、armv7s,则该应用程序将无法在5S手机上运行。或者我可以为5S手机构建它,但这样就没有广告。 - WebOrCode
1
它可以在iPhone 5S上正常运行,但您将无法利用手机上可用的arm64 64位架构。 - Ryan Romanchuk
1
@Karthik 我记得 SD 库实际上是可以工作的,它是其中一个依赖库,而且它是可以修复的,让我看看我是如何修复构建的。 - Ryan Romanchuk
我的方法是从构建设置中移除arm64选项,这样所有的库都能正常工作了。但还是感谢你的帮助。 - Karthik

13
在“构建设置”中的“架构”部分选择此选项,您的代码将可以在iPhone 5S上运行,我也曾遇到过同样的困扰。 构建设置

8

大家好,令人高兴的消息是,在3.03版本修复以下问题:

谷歌分析服务SDK for iOS v3.03现已支持64位。 (来源)


0
我在第一张截图中看到你的项目有2个目标。 你确定libGoogleAnalyticsServices.a已添加到两个目标吗? 链接框架可能因目标而异,因此这是最常见的错误方式... 还要尝试从项目中删除GA,然后清除,然后清除构建文件夹,然后重新启动Xcode并再次添加GA =)昨天这对我有帮助=)

谢谢你的建议,Petro。但是我刚试了一下,它并没有帮助到我。而且我非常确定这些文件已经添加到了正确的目标中。 - casparjespersen
7
关于你的更新2,需要说明的是x86_64并不是iPhone 5s的架构,它是arm64。在目标架构中,你可以选择“标准架构(包括64位)”生成两个二进制文件——32位和64位的iOS。但是,如果你使用“标准架构”(armv7,armv7s)构建应用程序,它仍然可以在iPhone 5s上运行,只是没有64位处理性能提升。此外,我认为GA静态库还没有针对32位和64位iOS构建,你将会得到像“undefined symbol for arch arm64”的错误。 - Petro Korienev

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