用 Xcode 编译 Cocoapods 静态库

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

内容简介:在开发中用 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 静态库》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

ActionScript 3.0精彩范例词典

ActionScript 3.0精彩范例词典

杨东昱 编 / 2008-5 / 59.00元

《ActionScript 3.0精彩范例词典》列出了最常用的ActionScript语法,并附有详细的程序代码范例,不但教您如何使用、修改ActionScript代码,而且还以实际范例和图解,说明每项语法还能呈现哪些动画效果和功能,对学习ActipScript有所帮助。读者在阅读《ActionScript 3.0精彩范例词典》之后,将能开发出属于自己的ActionScript程序与FLASH动画......一起来看看 《ActionScript 3.0精彩范例词典》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

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

UNIX 时间戳转换