我正在创建我的第一个需要Swift依赖的CocoaPod项目(ObjC)。当我尝试lint项目时,我收到错误:
用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
这里,socket io客户端是个问题。我能够将套接字io框架导入到我的其他ObjC项目中没有问题,但我从未尝试将其插入到自定义可可豆荚中。
非常感谢任何帮助。提前谢谢。
答案 0 :(得分:1)
添加podsepc文件:-
spec.dependency 'Socket.IO-Client-Swift', '12.0.0'
spec.pod_target_xcconfig = {
'SWIFT_VERSION' => '4.0',
'VALID_ARCHS' => 'x86_64 arm64'
}
答案 1 :(得分:0)
use_frameworks!
是仅限podfile的设置。
在lint podspec时使用框架的方法是为--use-frameworks
命令提供pod spec lint
标记。
答案 2 :(得分:0)
lint失败了,因为我试图包含--use-libraries lint命令来容纳GoogleMaps pod,但是当尝试包含像Socket.IO这样的swift pod时,这是不兼容的。由于GoogleMaps pod在pod中包含其自身的静态版本,因此您无法将其简单地包含在pod项目中,否则会出现lint错误The 'Pods' target has transitive dependencies that include static binaries
所以我最终不得不抓住GoogleMaps.framework并将其静态包含在我的pod中(而不是将pod列为依赖项)。不太理想,但我无法找到另一个工作解决方案,包括一个swift pod和GoogleMaps pod。
以下是我的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导入我的项目时,我在运行之前遇到了这个警告:
自动链接提供的路径/到/ GoogleMaps.framework / GoogleMaps&#39;,在路径/到/ 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框架中的每个类,都有一个单独的控制台日志警告。我似乎无法摆脱这些警告。如果我链接,我会收到警告,如果我没有链接,我会收到警告。