内容简介:在开发中用 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
- s.version 即 tag 版本号。
- s.verdored_frameworks 指定了这个 pod 库中包含的第三方 framework,也就是我们用 xcode 编译出来的那个 framework,如果还用到其它 framwork,可以继续添加到这里,用逗号分隔。
- s.libraries 是这个库依赖的系统 .a 库。比如 libstdc++.tbd,如果 c++ 混编代码,缺少这个会报一个 ___gxx_personality_v0 错误。
- s.dependency,依赖的 pod 库。
- 这个库除了 .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 静态库》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- Android NDK秘籍--编译静态库、调用静态库
- Qt 5.9.0 MinGW 静态编译版本
- 音视频学习 (四) 交叉编译和动态库、静态库入门
- 编译型语言、解释型语言、静态类型语言、动态类型语言概念与区别
- 音视频学习 (六) FFmpeg4.2.2 交叉编译动态静态库
- 详解64位静态编译程序的fini_array劫持及ROP攻击
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
C算法(第二卷:图算法)(第3版)
塞德威克(Sedgewick Robert) / 周良忠 / 第1版 (2004年1月1日) / 2004-4 / 38.0
《C算法(第2卷)(图算法)(第3版)(中文版)》所讨论的图算法,都是实际中解决图问题的最重要的已知方法。《C算法(第2卷)(图算法)(第3版)(中文版)》的主要宗旨是让越来越多需要了解这些算法的人的能够掌握这些方法及基本原理。书中根据基本原理从基本住处开始循序渐进地讲解,然后再介绍一些经典方法,最后介绍仍在进行研究和发展的现代技术。精心挑选的实例、详尽的图示以及完整的实现代码与正文中的算法和应用......一起来看看 《C算法(第二卷:图算法)(第3版)》 这本书的介绍吧!
CSS 压缩/解压工具
在线压缩/解压 CSS 代码
Base64 编码/解码
Base64 编码/解码