有些时候我们的项目太过于庞大,需要进行组建化开发,可以将每个模块开发成一个组件。或者是我们的一些自己库,想用pod倒入,又不想使用本地路径的方式。这时候我们就可以做一个远程的私有代码仓库,这样我们开发的库就可以满足我们自己用pod进行导入,又不用让别人看到
- 在代码托管平台创建我们的代码仓库,因为GitHub上面私有的要钱,所以我们可以其他的比如码云,coding都可以,这里我使用的是coding ,先在网上创建好我们的代码仓库。复制url连接
可以在终端执行pod repo
查看当前存在的索引库 - 把自己的索引库添加到CocoaPods
pod repo add 库名 url
- 创建一个我们需要开发的组件
pod lib create 组件名
然后终端就会执行一些基本让我选择的基本选项,执行完之后就创建了我们的项目,这是后我们需要把自己要开发的库托到项目里面的一个文件夹里
然后在终端,执行一下
pod install
就把本地库引入了我们的项目,因为我们引入的时候没有选择,copy item if needed。所以项目中只是对文件的引用,我们这样就可以边开发边测试了,等开发功能差不多的时候,就可以进行下一步了。
在代码托管平台创建我们的托管项目
创建的时候注意,不要勾选,readeMe和gitignore,因为我们上一步创建出来的项目里面自带这两个文件。如果远程又创建了会产生冲突,
创建远程代码管理
创建完之后,会有一个url用来cloning的
然后找到url更改我们本地代码的.podspec文件的里面一些配置
#核心代码所在的位置
s.source_files = 'HomeKit/Classes/**/*'
默认当前文件在哪里,他就是找到当前文件的目录下面,因为 HomeKit跟。podspec文件在同一级目录,所以不需要,跳转文件夹
/**他会找当前文件夹里面的所有文件,不写的话他只会查找一层
之后开发更新,版本号也是需要更改的。每次更新版本都需要更改,注意跟tag保持一致
s.version = '0.1.0'
因为Cocoapod是根据tag去索引代码的,git的tag。如果没有写的话是不能下载的,
创建好远程的代码库,然后将.podspec里面source改成创建好的远程地址
s.source = { :git => '创建好的远程代码托管url', :tag => s.version.to_s }
- 当我们的代码运行没有错误之后,我们就可以添加到远程代码仓库了
- 总体来讲的话,使用终端操作git管理代码有这么几个主要步骤
先查看文件的状态
git status
- 把文件添加到本地暂缓区
git add .
- 把文件添加到本地代码仓库
git commit 文件名
- 建立本地仓库与远程代码仓库之间的连接
先查看是不是有远程的代码仓库
git remote
如果没有的话手动添加关联
git remote add origin 远程仓库url
- 把本地代码提交到远程代码仓库
git push origin master
- 添加tag,这里面的tag要跟.podspec里面的version保持一致
git tag -a 0.1.0 -m '描述文字'
- 把tag推送到远程代码仓库
git push --tags
- 将我们的组建添加到pod库里面,这里需要穿我们自己私有的库名还有组建的podspec文件全称
pod repo push HLPrivateStore HomeKit.podspec
执行这句可能会产生警告,这时候我们可以忽略警告,可以在后面加上 一句
pod repo push HLPrivateStore HomeKit.podspec --allow-warnings
当执行完这部我们用pod search
来搜索一下看看有没有我们的库,如果有就可以使用了。注意,要在podfile文件里面加上一句
source '本地库的url '
因为他默认会从公有库里寻找,
- 注意以后我们更新我们的库的话 需要更改podspec。里面的version
还要重新设置git的tag
划分子组件
如果我们的组件中用到了太了文件和一些共有的工具类,我们可以将它们划分成一个个子组件,这样当我们使用的时候,在工程里面就可以很清晰的辨别文件的类型
s.subspec 'Frame' do |frame|
#两个frame的名字不能一样不然会出错,第二个只是一个变量名字,用来在在这个区间使用
frame.source_files = 'HomeKit/Classes/Frame/*.{h, m}'
end
因为我们没有改代码,所有子需要重新覆盖一下本地的podspec文件就好了
pod repo push HLPrivateStore HomeKit.podspec --allow-warnings
因为我们刚刚更新了spec的文件,划分了文件结构,所以我们引用的项目,重新pod update
一下
这时候我们引用的地方可能会出现,划分的文件夹,但是里面没有文件,文件还是在外面,这是因为我们那有引用全部文件s.source_files = 'HomeKit/Classes/**/*'
这句代码,所以我们要把这句话注释掉,就可以了
组件加载资源文件(图片 xib storybord)
在 .podspec文件里面更改
s.resource_bundles = {
'HLCategory' => ['HLCategory/Assets/*.png', 'HLCategory/Classes/**/*.xib']
}
s.resource_bundles = {
'SHLLiveKit' => ['SHLLiveKit/Classes/**/*.{storyboard,xib}']
}
当我们在使用 我们框架里面的图片资源的时候,要记得加上bundle的名字,因为Xcode会将我们的资源压缩到我们框架的bundle里面,它本身不是mainBundle里面的资源,所以不能直接使用,图片名字
OC 项目使用Swift框架混编
在使用swift的框架的时候,引入头文件的代码#import " 工程文件名-Swift"
,如果要有这个文件,必须要有Swift代码,不然不会生效。但是有时候,我们即使是使用了看起来是正确的头文件名字,也有Swift的代码但是还是不生效。这时候我们可以去build Setting里面,找这个工程里面的文件Objecting -C generated interface Header Name 这里面找头文件,当然要去使用Swift的那个库里面找,如果引用的地方跟Swift框架,不属于同一个库的话,需要使用 #import <库名/查看到为文件名>
Swift使用OC的话,会生成桥接文件
如果使用的框架Swift版本太低,我们可以使用Xcode进行转化
转换Swift的版本
网友评论