使用Swift构建Cocoapod并依赖Objective-C框架

罗曼

我知道在SO上已经有关于此主题的一些问题,但是很少有人接受答案,而且我认为我没有发现与我完全相同的问题。

我正在构建一个Swift Pod,在我的代码中,我依赖于捆绑为.framework文件的Google Maps iOS SDK 该项目在Xcode中可以正常运行,但是我无法将库发布到Cocoapods。

我设法有了一个Podspec几乎可以使用该pod lib lint命令验证文件但是,既然我已经将Google-Maps-iOS-SDKpod作为依赖项添加到Podspec文件中,它将失败并显示以下消息:

$ pod lib皮棉

[!]“ Pods”目标具有包含静态二进制文件的传递依赖项:(/private/var/folders/n2/qyjfpk6n7zz_mngtwswlmsy00000gn/T/CocoaPods/Lint/Pods/Google-Maps-iOS-SDK/GoogleMaps.framework)

$

这是预期的吗?为什么我不能在自己的基于Swift的pod中添加Google Maps iOS SDK作为pod引用?

这是Podspec

Pod::Spec.new do |s|
    s.name                  = '(name)'
    s.version               = '1.0.0'
    s.summary               = '(summary)'
    s.platforms             = { :ios => '8.0', :osx => '10.10' }
    s.ios.deployment_target = '8.0'
    s.osx.deployment_target = '10.10'
    s.license               = { :type => 'BSD', :file => 'LICENSE' }
    s.source_files          = 'Sources/*.{h,swift}', '*.framework'
    s.source                = { :git => "https://github.com/(Github repo).git", :tag => "1.0.0" }
    s.requires_arc          = true
    s.frameworks            = "Foundation", "CoreLocation"
    s.author                = { 'Romain L' => '(email)' }
    s.dependency 'Google-Maps-iOS-SDK'
end

如果我没有将Google Maps iOS SDK作为依赖项包含在内,那么pod lib lint桥接头会失败,并抱怨找不到它<GoogleMaps/GoogleMaps.h>找不到文件)。

我被卡住了,我不知道这是Cocoapods 0.36(还是Beta版)中的错误还是我做错了什么。

谢谢你的帮助!

罗曼

我终于在SO上找到了另一个处理类似问题的线程:通过CocoaPods添加了iOS的Google Maps在Swift项目中的链接器错误

看来,这些错误是由于Podspec文件错误(在Google Maps iOS SDK方面)以及Cocoapods 0.36 Beta中的错误共同导致的。

实际上,可以使用@fz。的修订版Google Maps Podspec文件来解决这些问题:https ://stackoverflow.com/a/28471830/145997 另一篇对理解vendored_frameworks设置的工作原理也很感兴趣的文章Podspec是:http : //codereaper.com/blog/2014/creating-a-pod-with-crashreporter/

因此,要在Pod项目中正确导入Google Maps iOS SDK,请首先使用以下命令Podfile

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
# altered version of Google's Podspec
pod 'Google-Maps-iOS-SDK', :podspec => "https://raw.githubusercontent.com/Reflejo/GoogleMapsPodspec/master/Google-Maps-iOS-SDK.podspec.json"
use_frameworks! # don't forget this!

现在,我只需执行即可从我的Swift代码中引用Google Maps类import GoogleMaps而且,要分发Pod,我的最终结果Podspec类似于以下内容:

Pod::Spec.new do |s|
    s.name                  = 'MyPod'
    s.version               = '1.0.0'

    s.homepage              = "https://github.com/..."
    s.summary               = '(pod summary)'
    #s.screenshot            = ""

    s.author                = { 'Romain L' => '(email)' }
    s.license               = { :type => 'BSD', :file => 'LICENSE' }
    s.social_media_url      = "https://twitter.com/_RomainL"
    s.platforms             = { :ios => '8.0' }
    s.ios.deployment_target = '8.0'

    s.source_files          = 'MyCode/*.{h,swift}'
    s.module_name           = 'MyPod'
    s.source                = { :git => "https://github.com/....git", :tag => "1.0.0" }
    s.requires_arc          = true
    s.libraries             = "c++", "icucore", "z" # required for GoogleMaps.framework
    s.frameworks            = "AVFoundation", "CoreData", "CoreLocation", "CoreText", "Foundation", "GLKit", "ImageIO", "OpenGLES", "QuartzCore", "SystemConfiguration", "GoogleMaps" # required for GoogleMaps.framework
    s.vendored_frameworks   = "Dependencies/GoogleMaps.framework" # Put the Google-provided framework in that subfolder of your Pod project
    #s.dependency              'Google-Maps-iOS-SDK' # Careful! this will cause errors if enabled!
end

现在,我可以在Xcode中启动新的iOS应用,并使用以下内容Podfile链接到自己的Pod,而该Pod本身就是Google Maps iOS SDK的参考:

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
pod 'MyPod'
use_frameworks! # do not forget this!

并不是那么容易,但是毕竟可行!不过,希望Google能够Podspec为Swift开发打补丁

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

导入Objective-C框架(CocoaPod)到Swift吗?

将Objective-c框架导入Swift框架(Google Analytics + Cocoapod)

通过引用Objective-C代码构建Swift框架

如何将Objective-C和Swift混合使用以构建cocoapods框架

将Objective-c框架导入Swift框架项目

使用Swift和Objective-C的iOS框架,其中Objective-C使用Swift C

使用Swift语言处理Objective-C框架时出错

在Objective-C框架中使用Swift闭包

在Xcode Swift项目中使用Objective C框架

在 Swift 中导入 Objective-c 框架?

在Swift Framework中添加Objective C框架

导出Swift框架以用于Objective-C

台风框架:Swift或Objective-C

通过CocoaPod将Objective-C框架导入Swift项目时,Bridging Header中的“找不到文件”

在Xamarin iOS项目中使用Swift框架内的Objective C框架

如何使用桥接头将Objective-C cocoapod导入Swift

添加Swift文件后构建Swift Cocoa Touch框架时出错:<未知>:0:错误:无法构建Objective-C模块

创建具有客观c框架依赖关系的胖框架

iOS Swift框架:如何将Objective C代码正确导入swift框架?

Cocoapod与Mix and Match Swift和Objective-c代码

将Objective-C Cocoapod添加到Swift

无法在 Objective-C 中访问 Swift 框架

将Swift框架导入Objective-C项目

从Swift框架到Objective C的访问委托协议

Cocoa Touch Objective-C框架中的Swift类

在框架内将Swift文件公开到Objective-C

从嵌入式Objective C框架调用Swift

将Objective-C框架连接到Swift iOS 8应用程序(解析框架)

无法从 Objective-C 通用框架引用 Swift 通用框架的类和方法