用 Xcode 编译 Cocoapods 静态库

栏目: IOS · 发布时间: 7年前

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

在开发中用 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" => "kmyhy@126.com" }
  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 xxx@126.com “xxx”

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

然后 pod trunk push 上传 Pod。

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

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


以上所述就是小编给大家介绍的《用 Xcode 编译 Cocoapods 静态库》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Growth Hacker Marketing

Growth Hacker Marketing

Ryan Holiday / Portfolio / 2013-9-3 / USD 10.31

Dropbox, Facebook, AirBnb, Twitter. A new generation of multibillion dollar brands built without spending a dime on “traditional marketing.” No press releases, no PR firms, and no billboards in Times ......一起来看看 《Growth Hacker Marketing》 这本书的介绍吧!

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具