【问题标题】:Linker errors in a Swift project with Google Maps for iOS added via CocoaPods通过 CocoaPods 添加 Google Maps for iOS 的 Swift 项目中的链接器错误
【发布时间】:2015-04-08 21:58:31
【问题描述】:

我正在尝试为我正在通过 CocoaPods 开展的 Swift 项目添加 Google Maps SDK for iOS,因为 CocoaPods 现在支持 Swift。

这是我的 podfile。

source 'https://github.com/CocoaPods/Specs.git'
use_frameworks!
platform :ios, '7.0'

pod 'Google-Maps-iOS-SDK'

Pod 安装成功完成,我可以像 import GoogleMaps 这样导入框架,而不会出现任何编译错误。

但后来我继续添加 UIView 并将其类设置为 GMSMapView 并将 IBOutlet 添加到我的视图控制器并构建项目。我收到以下错误。

链接器命令失败,退出代码为 1(使用 -v 查看调用)

我已经在 Swift 项目中添加和使用了用 Objective-C 编写的库,例如 MagicalRecord、MBProgressHUD,没有任何问题。

我还上传了一个演示 Xcode 项目 here

有什么办法解决这个问题?

【问题讨论】:

  • 我正在尝试复制此问题,但我目前从 pod 更新中收到以下错误:[!] Invalid `Podfile` file: undefined method `use_frameworks!' for #<Pod::Podfile:0x007fb79a29c080>. Updating CocoaPods might fix the issue.
  • 以下是使用 Swift 和 iOS 版 Google Maps SDK 的示例:github.com/domesticmouse/swift-google-map
  • @Brett 嗨,我正在使用 CocoaPods 0.36 beta 1。我认为该命令已在 beta 2 中删除,这是当前版本。您必须 downgrade 到 beta 1 (sudo gem install cocoapods -v 0.36.0.beta.1) 才能安装它,因为没有该命令,Objective-C pod 将作为静态库而不是框架安装。由于 Google Maps SDK 也是一个 Objective-C 库,因此您需要该命令。我在我写的blog post 中进一步解释了这一点。
  • 我正在使用 CocoaPods 0.35(发行版)进行构建。我刚刚卸载了 cocoapods 版本并安装了cocoapods-0.36.0.beta.2。我使用我的 github 示例来测试这个新配置(在删除 Podfile.lockPods/* 之后)并且一切正常。我阅读了您的博文,但我不明白您为什么需要 use_frameworks! 才能让 iOS 版 Google Maps SDK 与 Swift 一起使用。
  • @Brett Maps SDK 当然是这样工作的。我自己在另一个项目中使用过它。我打算采用更“纯粹”的 Swift 方法,将 SDK 添加为框架,而不使用桥接头等。它通常适用于其他 Objective-C 库。

标签: ios google-maps swift cocoapods google-maps-sdk-ios


【解决方案1】:

您面临的问题是 CocoaPods 上的错误和格式错误的 podspec 的组合。 Check this 了解更多信息。

随意使用这个 podspec:

https://raw.githubusercontent.com/Reflejo/GoogleMapsPodspec/master/Google-Maps-iOS-SDK.podspec.json

...在您的 Podfile 中为:

pod 'Google-Maps-iOS-SDK', :podspec => "https://raw.githubusercontent.com/Reflejo/GoogleMapsPodspec/master/Google-Maps-iOS-SDK.podspec.json"

【讨论】:

  • 嗨,我刚试过这个。 Pod 安装成功,但 Targets 列表只显示 Pods 项目中的 Pods
  • 你能澄清一下你的意思吗?
  • 安装库successfully。但是在Pods项目的Targets中,并没有添加框架。
  • @isuru 是的。您可以在某处发布您的项目和/或 Podfile 吗?
  • @Isuru 您的项目运行良好。你有没有尝试从你的 swift 文件中import GoogleMaps?它不是目标的事实是正确的行为,因为 Google 地图已经是一个压缩在 zip 文件中的框架。
【解决方案2】:

来自 Google 工程师的回复:

我相信这个错误现在已在 1.10.0 中修复。作为正式支持 CocoaPods 的一部分,我们更改了适用于 iOS CocoaPod 的 Google Maps SDK 的名称。请像这样更新您的 Podfile:

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.3'
use_frameworks!

pod 'GoogleMaps', '1.10.0'

(source of this information)

注意:

尽管上面的修复引入了一个新的警告,请看下面的link

因此,我个人建议您继续使用pod 'Google-Maps-iOS-SDK', :podspec => "https://raw.githubusercontent.com/Reflejo/GoogleMapsPodspec/master/Google-Maps-iOS-SDK.podspec.json",直到该错误在较新版本的 Google Maps iOS SDK 中得到修复,或者通过在构建设置标志中添加 -Wl,-no_compact_unwind 来简单地消除此警告。

【讨论】:

    猜你喜欢
    • 2013-05-24
    • 1970-01-01
    • 2017-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-18
    • 2015-02-25
    • 1970-01-01
    相关资源
    最近更新 更多