用 Xcode 编译 Cocoapods 静态库

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kmyhy/article/details/82764163

在开发中用 Cocoapods 托管开放给第三方的 SDK 框架是很方便的,但是在实际应用中却发现,cocoapods 的 lint 检验过于严格,在创建 framework 时经常因为各种无法描述的问题导致 xcodebuild 编译失败或者校验无法通过。
对于一些复杂项目而言(尤其是一些和其他语言混编的项目),要通过编写 podspec 配置来成功编译非常不易。甚至笔者遇到一个项目,无论如何修改 podspec 都无法通过 cocoapods lint,经过漫长的 google 后发现此问题基本无解,但用 Xcode 编译没有任何问题。因此先用 Xcode 编译出 .framework 文件,将 .framework 放到 pod 中,在上传至远程索引库。

用 Xcode 编译 framework

这个过程不再赘述。值得注意的是,framework 必须是 universal 的,因为 cocoapods 的 lint 非常严格,如果 framework 中缺少 slice 是无论如何也不能 lint 的(此问题基本无解,网上说的设置 s.xcconfig archs 或者 OTHER_LDFLAGS[arch=i386] 的方法不工作)。也就是说必须在真机下编译一次,再在模拟器下编译一次,然后将两个编译出来的 .a 文件合并为一个 .a 文件(用 lipo -create)。然后将 .framework 中的原文件替换。

创建 pod 组件库

创建 git 库后,check out 到本地,将 .framework 放到项目目录,然后 push。唯一需要注意的是 push 之后别忘了为组件库打上 tag。

创建 podspec

pod spec create <xxxframework>

这里的 是你的 pod 库名称。
然后编写 podspec(假设库名为 YLYIndoorNavigation):



Pod::Spec.new do |s|

  s.name         = "YLYIndoorNavigation"
  s.version      = "0.0.1"        
  s.summary      = "元力云室内定位 SDK"

  s.description  = "广州元力云网络 - 室内定位 SDK"

  s.homepage     = "https://gitee.com/kmyhy/YLYIndoorNavigationSDK"

  s.license      = { :type => "MIT", :file => "LICENSE" }

  s.authors             = { "kmyhy" => "[email protected]" }
  s.source       = { :git => 'https://gitee.com/kmyhy/YLYIndoorNavigationSDK.git', :tag =>s.version  }
  s.platform     = :ios, '9.0'
  s.vendored_frameworks = 'YLYIndoorNavigation.framework'
  s.frameworks   = 'UIKit','Foundation'
  s.libraries    = 'stdc++'
  s.dependency 'CocoaAsyncSocket'
  s.dependency 'Protobuf'
  s.dependency 'MSWeakTimer'
  s.dependency 'AFNetworking'
  s.dependency 'FDFullscreenPopGesture', '~> 1.1'
end

  1. s.version 即 tag 版本号。
  2. s.verdored_frameworks 指定了这个 pod 库中包含的第三方 framework,也就是我们用 xcode 编译出来的那个 framework,如果还用到其它 framwork,可以继续添加到这里,用逗号分隔。
  3. s.libraries 是这个库依赖的系统 .a 库。比如 libstdc++.tbd,如果 c++ 混编代码,缺少这个会报一个 ___gxx_personality_v0 错误。
  4. s.dependency,依赖的 pod 库。
  5. 这个库除了 .framework 文件之外,没有任何源文件,不用指定 s. source_files。

上传 pod

如果没注册,先注册:
pod trunk register [email protected] “xxx”

注:邮箱和名字必须和 .podspec 中的一致。注册成功后去邮箱点链接。

然后 pod trunk push 上传 Pod。

上传完成后,先 pod setup 更新一下本地索引文件,然后再 pod search,即可看到上传的 pod。

如果还是搜索不到,删除~/Library/Caches/CocoaPods目录下的search_index.json文件。

猜你喜欢

转载自blog.csdn.net/kmyhy/article/details/82764163