在objc podspec项目中快速依赖

我创建了我的第一个需要Swift依赖的CocoaPod项目(ObjC)。 当我尝试对该项目进行绑定时,出现错误:

用Swift编写的Pod只能作为框架集成; 添加use_frameworks! 到您的Podfile或目标选择使用它。

我知道如何在常规xcode项目中包含CocoaPod时执行此操作,但在项目是CocoaPod时如何解决此问题? 我尝试添加'use_frameworks!' 声明在podspec文件中,但似乎不正确。

这是我的podspec文件:

Pod::Spec.new do |s|

  s.name             = "my-custom-pod"
  s.version          = "0.0.1"
  s.summary          = "totally awesome stuff"

  s.description      = <<-DESC
                         more details about the totally awesome stuff, if only it worked :(
                       DESC

  s.homepage         = "https://awesomestuff.com"
  # s.screenshots     = "www.example.com/screenshots_1", "www.example.com/screenshots_2"
  s.license          = 'MIT'
  s.author           = { "Me" => "me@awesomestuff.com" }
  s.source           = { :git => "https://awesome.com/awesome/my-custom-pod.git", :tag => s.version.to_s }
  s.social_media_url = 'https://twitter.com/awesomestuff'

  s.platform     = :ios, '8.0'
  s.requires_arc = true

  s.source_files = 'Pod/Classes/**/*'
  s.resource_bundles = {
    'my-custom-pod' => ['Pod/Assets/*.png']
  }

  # s.public_header_files = 'Pod/Classes/**/*.h'
  s.frameworks = 'CoreLocation', 'MapKit'
  s.dependency 'SSKeychain', '~> 1.2.3'
  s.dependency 'FMDB', '~> 2.5'
  s.dependency 'GoogleMaps', '~> 1.10.4'
  s.dependency 'Socket.IO-Client-Swift', '~> 4.0.4'
end

在这里,套接字io客户端是问题。 我能够将套接字io框架导入到我的其他ObjC项目中没有任何问题,但我从来没有尝试将其转换为定制的可可豆荚。

任何帮助深表感谢。 提前致谢。


use_frameworks! 是仅限podfile的设置。

在创建podspec的同时使用框架的方式是为您的pod spec lint命令提供--use-frameworks标志。


lint失败了,因为我试图包含--use-libraries lint命令来容纳GoogleMaps窗格,但是在尝试包含像Socket.IO这样的快速窗格时,这不兼容。 由于GoogleMaps窗格在窗格中包含了其自身的静态版本,因此您不能简单地将其包含在您的窗格项目中,否则您会得到lint错误The 'Pods' target has transitive dependencies that include static binaries

所以我最终必须抓住GoogleMaps.framework并将其静态包含在我的pod中(而不是将pod列为依赖项)。 不理想,但我无法找到另一个工作解决方案,包括一个快速Pod和GoogleMaps窗格。

以下是我的podspec文件中的相关位:

s.libraries = 'c++', 'icucore', 'z'

s.dependency 'SSKeychain', '~> 1.2.3'
s.dependency 'FMDB', '~> 2.5'
s.dependency 'Socket.IO-Client-Swift', '~> 5.3.3'

s.frameworks = 'MapKit', 'GoogleMaps', 'AVFoundation', 'CoreData','CoreLocation', 'CoreText', 'GLKit', 'ImageIO', 'OpenGLES', 'QuartzCore', 'SystemConfiguration', 'Accelerate'
s.resource_bundles = { 'GoogleMaps' => ['Pod/Dependencies/GoogleMaps.framework/Resources/*.bundle'] }
s.vendored_frameworks = 'Pod/Dependencies/GoogleMaps.framework'
s.xcconfig = { 'LD_RUNPATH_SEARCH_PATHS' => 'Pod/Dependencies' }

以下是适用于此podspec的lint命令:

pod lib lint my-custom-pod.podspec --private --allow-warnings

我现在看到的唯一问题是,当我将pod导入到我的项目中时,我在运行之前会遇到此警告:

自动链接提供的'path / to / GoogleMaps.framework / GoogleMaps',路径/到/ Pod / Dependencies / GoogleMaps.framework / GoogleMaps的框架链接器选项不是dylib

或者这个在编译时(在控制台中显示):

GMSBillingPointRecorder类在path / to / my / application / Frameworks / my-custom-pod.framework / my-custom-pod和path / to / my / app / myapp.app / myapp中实现。 将使用两者之一。 哪一个是未定义的。

对于GoogleMaps框架中的每个类都有单独的控制台日志警告。 我似乎无法摆脱这些警告。 如果我链接,我会收到警告,如果我没有链接,我会收到警告。

链接地址: http://www.djcxy.com/p/89645.html

上一篇: swift dependency in objc podspec project

下一篇: Cannot Lint/Push a Swift Cocoapods podspec