github + SourceTree管理自己的库并上传到cocoapods及各种坑的解决办法
一、上传写好的库到github(我这里使用SourceTree客户端)
1.在github上创建一个仓库
2.将仓库拉倒本地
复制仓库地址
将刚才复制的地址粘贴到这里
3.上传项目到github
将写好的库放在上一步的目标路径文件夹里。 可以看到sourceTree里新增的文件,将为暂存文件放到已暂存。
点下面提交信息的输入框,勾选下面立即推送,可以同时提交到本地及远程仓库
二、上传到cocoapods
1.注册cocoapods
pod trunk register 邮箱地址 ‘用户名’ --description='描述信息'
执行成功后打开你的邮箱验证即可。
pod trunk me 命令检查是否注册成功
2.制作podspec文件
方法一:cd 你的仓库所在目录 ---> pod spec create xxx(xxx是你的sdk名)。然后vi xxx.podspec 进入文件中进行配置。(方法一比较麻烦,不推荐)
方法二:拷贝别人的podspec,然后修改一下就可以。
下面来看看podspec里的内容及含义:
Pod::Spec.new do |s| s.name = 'LFPickerView' s.version = '1.0' s.license = { :type => "MIT", :file => "LICENSE" } s.summary = '将PickerView,DatePicker封装得更加简单易用,并可搭配UITextField使用' s.homepage = 'https://github.com/zhanglinfeng/LFPickerView' s.authors = { '张林峰' => '1051034428@qq.com' } s.source = { :git => 'https://github.com/zhanglinfeng/LFPickerView.git', :tag => s.version.to_s } s.requires_arc = true s.ios.deployment_target = '8.0' s.source_files = 'LFPickerView/LFPickerView/*.{h,m}'
s.dependency "Masonry"
end
s.name 你的sdk名字
s.homepage 你仓库的主页地址
s.source 仓库地址(注意跟主页地址不一样)及tag
s.ios.deployment_target 最低支持iOS 8.0
s.dependency "Masonry 依赖第三方库
s.source_files 供别人使用的文件(要根据你的文件路径设置,别搞错了,如下图)
然后把这个文件也提交到github。
3.给项目打个tag
tag要跟上一步制作的podspec文件里的tag一致。
4.上传你的sdk到cocoapods
注意:如果你的cocoapods版本低于1.1.0一定要升级。(怎么升级,升级速度慢失败等,网上一堆教程这里不说了)
cd 到你仓库根目录
pod lib lint 命令,对打上的标签与podspec标记的标签进行比验证
pod trunk push 命令,真正执行分支的推送操作
成功截图如下
然后等几个小时到2天,差不多就可以搜到自己的库了。
pod search 你的sdk名
如果好几天了还搜不到,对于有些类库确实是在Cocoapods中所不存在的,为了确定我们搜索的库是不是真的在Cocoapods的Repos中存在,我们可以到https://cocoapods.org/中进行搜索。如果你的库在Cocoapods里,但pod search 你的sdk名 命令还是搜不到。则执行下面操作:
终端输入rm ~/Library/Caches/CocoaPods/search_index.json
再pod search
。
5.一些使用技巧
a.使用指定tag
三、解决一些坑
1.- ERROR | [iOS] file patterns: The `source_files` pattern did not match any file.
解决办法:检查你.podspec文件中s.source_files路径有没有填错
2.did not pass validation ,due to 1 wanrings (but you can use --allow-warnings to ignore them)
解决办法:在命令后面加--allow-warnings
3.
4.- ERROR | xcodebuild: /Users/zhanglinfeng/Library/Developer/Xcode/DerivedData/App-culgapkleglkstaqypgjlqqpywqh/Build/Products/Release-iphonesimulator/LFKit/LFKit.framework/Headers/LFEncryptDecryptUtil.h:10:9: error: include of non-modular header inside framework module 'LFKit.LFEncryptDecryptUtil': '/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator11.0.sdk/usr/include/CommonCrypto/CommonCryptor.h' [-Werror,-Wnon-modular-include-in-framework-module]
解决办法:#import <CommonCrypto/CommonCryptor.h>从.h文件拿到.m文件。原因不明,反正我辛辛苦苦各种尝试,这样就解决了。