前段时间,由于公司和其他公司合作,需要用到我们产品的某些内容进行集成。公司决定封装自己产品SDK,现在把经验总结如下:
简介:
库分为静态库和动态库,静态库库一般以.a或者.framework为后缀名,而动态库的后缀一般为.tbd(以前是.dylib)和.framework。
静态库:调用时会被完整的复制到可执行文件中,被多次使用就有多份拷贝。
动态库:调用时不会复制,系统只加载一次,多个程序共用程序。运行时由系统动态加载到内存,节省内存。(系统的库差不多都是动态库吧,注意⚠️:如果使用自己封装的动态库,会被拒)。
步骤:
一、创建静态库:
注意:默认创建的是动态库,需要到,Build Settings 里面修改 Mach-O Type 为 static Library
二、调试静态库:
坑一、刚开始我们发现,只是创建静态库时,还要新建一个工程Demo来调试我们的库(上级搞的),我就觉得这样很不方便,感觉可以使用一个工程就能搞定的。
解决办法:
坑二、还需要进行一步才能进行库的调试
到此,你会发现我们的库可以进行调试了,而且不用先编译我们的库,直接运行这个 Demo 就可以直接调试了,非常方便。(去试试吧~~)
这样子就差不多完成了。
如果想要让模拟器和真机通用一个静态库,我们可以使用终端命令来实现(也可以参考这个博客)。注意⚠️:framework静态库合并的不是framework,而是framework下的二进制文件,命令为:
lipo -create "真机版本路径" "模拟器版本路径" -output "合并后的文件路径"
三、上传pod
这个博客挺好cocoapods上传.podspec文件流程,我也是看这个博客上传的,我觉得最主要的就是 podspec 文件的配置,下面我只进行对根据博客进行商城遇到的问题进行总结,其他大家可以看他的博客。
四步:
1、 创建 git 远程仓库
2、上传文件到刚刚新建的 git 仓库
1. git add . 添加当前文件夹下的所有文件到git仓库缓存区
2. git status 显示代码状态
3. git commit -m '注释' 提交代码加注释, 提交到本地git仓库
4. git log 看本地git仓库的提交记录
5. git push origin master 推送到远程master分支
//打 tag
git tag -a '0.0.1' -m '新增0.0.1tag' 在本地仓库增加0.0.1tag。
git push --tags 提交tag到远程仓库。
3、配置 .podspec 文件
3.1.创建
pod spec create 工程名 //一般为工程名
3.2.配置,如果想简单点,去仿别人的 podspec 文件
Pod::Spec.new do |s|
s.name = "XXX" //名称
s.version = "0.0.1" //⚠️注意:版本号,也是tag(必须和tag版本一致)
s.summary = "XXX summary" //Tools 的总结
s.description = <<-DESC XXX的描述,一些介绍。DESC //这里的描述,必须比s.summary的长度要长。
s.homepage = "https://github.com/xxx/XXX" //远程仓库的首页地址
s.license = "MIT" //MIT
s.author = { "xxx" => "[email protected]" } //作者,邮箱
s.platform = :ios, "5.0"
s.source = { :git => "https://github.com/xxxx/xxx.git", :tag => s.version } //git => 远程仓库的clone地址, tag取版本号就行
s.requires_arc = true //ARC
s.source_files = "Classes", "Classes/**/*.{h,m}" //包含文件,Classes文件下的所有.h.m
s.resources = "XXX/XXXUIResource.bundle" //多个资源用逗号隔开 (某个文件夹下/某个资源文件 , 下同)
//
s.ios.preserve_paths = 'XXX/xxx.a'//设置.a文件,多个用逗号隔开
s.vendored_frameworks = 'XXX/XXXFramework.framework'//设置了framework,才会显示在文件夹中
s.frameworks = "AudioToolbox", "AVFoundation", "CoreGraphics"//引用的系统库
s.libraries = "iconv", "xml2", "bz2", "z", "stdc++", "c++"//引用一些lib库
s.requires_arc = true //ARC
s.dependency "MJRefresh" //引用的第三方库,配置,多个就写多个
s.dependency "MJExtention"
end
3.3.检验 podspec
pod lib lint XXX --allow-warnings //加后面的参数比较容易成功
检验成功记得,上传到 远程 git 仓库
git add .
git commit -m '增加Tools.podspec文件'
git push origin master
4.注册cocoapods trunk,按照提示操作即可
4.1 注册 trunk
pod trunk register [EMAIL] [USERNAME] //邮箱,名称
pod trunk register [email protected] 'xxx'
4.2 上传 xxx.podspec文件到git的Specs仓库
pod trunk push xxx.podspec --allow-warnings //加后面的参数比较容易成功
最后搜索并使用我们的库
终端上搜索 XXX,这个时候是搜索不到的。
pod search XXX
需要删除 : 资源库->Caches->CocoaPods中的search_index(索引文件),然后在终端pod search XXX,这个等待时间比较久,因为需要重新生成索引文件。
出现的问题汇总
1.xib 找不到,不能放在framework目录下面,手动加入的framework是可以的。pod 的话要加在bundle 里面。
- 动态库链接,还不知道怎么配,还需要手动添加,如有知道请赐教,谢谢。我看了这个博客能做到,但是自己尝试并没有成功。
CocoaPods 动/静态库混用封装组件化