1.先去git上创建一个仓库XXXkit,用sourceTree clone到本地。
2.在刚刚clone下的工程文件夹中,用CD命令打开之后,用cocoapods创建XXXkit库
pod lib create XXXkit
如图
创建完毕会自动打开工程。
3.cd 到Example文件下 执行
pod install
打开Example工程
如下图所示,classes文件夹下的东西就是你库要放的位置,将你要打包的文件包括资源文件,xib,png全部copy此处。
在pods中找到 xxxKit.podspec文件修改
一共6处要修改的:
1 模块名。
2 版本号 请与上传git的版本号一致。
3 主页 /git地址 填写你刚刚创建的真实地址。
4 源文件/资源文件 如图所示
5 依赖的第三方库
6 class文件夹下 新建prefix.h 做出头文件 注:新建文件都要在class文件夹下新建,之后使用 pod install命令去更新。
pod install
如果有图片和xib 工程内会生成一个Rerouces文件夹
cmd+b 编译 解决error
若需要分模块 请参考如下代码 不需请略过
s.subspec 'CoreBundle' do |ss|
#'CoreBundle'
ss.public_header_files = 'CoreSupportLib/Classes/CoreBundle/**/*.h'
ss.source_files = 'CoreSupportLib/Classes/CoreBundle/**/*.{h,m}'
end
s.subspec 'CoreCategory' do |ss|
#'CoreCategory'
ss.public_header_files = 'CoreSupportLib/Classes/CoreCategory/**/*.h'
ss.source_files = 'CoreSupportLib/Classes/CoreCategory/**/*.{h,m}'
end
s.subspec 'CoreMacros' do |ss|
#'CoreMacros'
ss.public_header_files = 'CoreSupportLib/Classes/CoreMacros/**/*.h'
ss.source_files = 'CoreSupportLib/Classes/CoreMacros/**/*.{h,m}'
end
s.subspec 'CoreRouter' do |ss|
#'CoreRouter'
ss.public_header_files = 'CoreSupportLib/Classes/CoreRouter/**/*.h'
ss.source_files = 'CoreSupportLib/Classes/CoreRouter/**/*.{h,m}'
图片和xib的使用请用,不然图片不能正常显示。
pod 'CoreSupportLib/CoreBundle'
的
NSBundle+txSubBundle
UIImage+txSubBundle
具体代码如下
[UIImage tx_imgWithName:@"login_back" bundle:TXPublicLoginKit targetClass:self.class]
然后
6.确保工程不报错误
可以在主工程Example for XXXKit里测试代码工程
注:当断点无效时请清除工程。product ->clean Build Folder
6.1 一些问题
ld: library not found for xxxx
解决:在Edit Scheme中,找到Build项,点击+号,找到Pods静态库,点击Add。再尝试编译,编译通过。
Invalid bitcode signature
解决:1、build Settings里搜索把bitcode设置为NO试一试。
解决:2、targets -> build settings -> architectures -> build active architecture only -> debug 改成YES
使用Pods中使用Swift和Objective-C混编-编译不通过的原因-ld: symbol(s) not found for architecture arm64
解决:如果没有Swift文件时请创建一个,空文件就行
Undefined symbols for architecture arm64:
…
"_OBJC_IVAR_$_XXXXX", referenced from:
-[xxxxx xxxx] in xxxxxxxx.o
...
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
.m文件没有导入
在Build Phases里的Compile Sources 中添加报错的文件
7.将本地代码推送到远程仓库
利用sourceTree
commit
添加标签 即 版本号
push
8.在spec所在文件夹下校验 spec(一定记得先要传版本,pod spec lint 只会验证远程仓库的最新版本)
pod spec lint --use-libraries --allow-warnings --verbose
带私有库的校验方式:
pod spec lint TXPublicHomeworkKit.podspec --use-libraries --allow-warnings --verbose --sources='https://sunzhenglin:----@gitee.com/sunzhenglin/txRepos,https://github.com/CocoaPods/Specs'
当出现如下字样代表校验通过。
–verbose 打印日志
–allow-warnings 允许warn
–use-libraries 依赖库(s.dependency)包含了.a静态库 是验证是无法通过的。可以通过 --use-libraries 来让验证通过。
9.我们现在可以选择推到公共的索引库和私有的索引库
9.1推到公共的索引库
pod trunk register xxx@126.com 'xx' --description='xx' --verbose
打开验证邮箱收到邮件中链接 确保在spec所在文件夹下
pod trunk push xx.podspec --use-libraries --allow-warnings --verbose
如果搜不到,不是没传成功,是我们的本地搜索库没更新 。
终端执行
rm ~/Library/Caches/CocoaPods/search_index.json
再执行
pod search xxx
9.2推到私有的索引库
1、私有库/公有库:指的是我们真正放置组件代码的地方。
2、索引库:存放spec文件的地方,用于索引到代码的位置。
打个比方,索引库就好比指针,私有库就好比对象,指针中存放了对象的地址,通过地址可以找到对象!
公共的索引库是指https://github.com/CocoaPods/Specs.git
私有的索引库需要我们自己建
去gitee/github建一个私有库即可
例如https://gitee.com/XXX/txRepos.git
然后
$ pod repo add txRepos https://gitee.com/XXX/txRepos.git
注 删除命令如下加错了可以删除
pod repo remove txRepos
在spec所在文件夹下
pod repo push txRepos xx.podspec --use-libraries --allow-warnings --verbose
带私有库的验证和推的方法 例如下
pod repo push gitee-txrepos TXPublicLoginKit.podspec --use-libraries --allow-warnings --verbose --sources='https://sunzhenglin:sunlin009@gitee.com/sunzhenglin/txRepos,https://github.com/CocoaPods/Specs'
10,使用
在使用的工程里Podfile要加入如下代码才能 pod install 注意要加,公有库和私有库一个都不能少。
source 'https://github.com/CocoaPods/Specs.git'
source ‘https://gitee.com/XXX/txRepos.git'
其他注意事项
- 如果组件中含有静态库.a 则需要添加下面代码:
s.vendored_libraries = ‘xxKit/Classes/**/*.a’ - 组件化之后,在主工程调试组件中的代码发现,断点显示变量全是nil
解决:
打开Xcode 的Build Setting 搜索 optimization
修改Debug的对应选项 None[-O0] - 若是注册邮箱时没反应 说明网络和电脑不行 后面的push基本也不行
- 创建的私有库代码不走 断点不走
In Xcode, go to File->Project/Workspace settings.
Change the build system to Legacy Build system.
- swift 版本报错 bitcode 激活报错
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings[‘SWIFT_VERSION’] = ‘4.0’
config.build_settings[‘ENABLE_BITCODE’] = ‘NO’
end
end
end - 把库里的东西更新到最新
pod update --verbose --no-repo-update - Undefined symbols for architecture arm64:
“OBJC_CLASS$_MyUICreate”, referenced from:
objc-class-ref in SZLWorkAttendanceViewController.o
objc-class-ref in TYDutyCalendarViewController.o
objc-class-ref in TYReportRecor1HeadView.o
objc-class-ref in TYReportRecordViewController.o
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
创建的第三方库,模块中的文件没有暴露,虽然能使用,但是编译找不到。