之前在项目里面都基本用cocoapods来管理第三方库,很少用Carthage和submodule。主要原因就是因为Carthage和submodule在引入库之外其实还是需要手工将第三方库的project引入到项目中,比较繁琐。但是–其他人不这么想啊,其他人多少会因为灵活性等等而考虑使用非cocoapods的其他管理工具。所以有的时候如果碰到开源项目,里面没有使用cocoapods,基本概念不明白就会比较麻烦。

Submodule
  • 为项目增加远程仓库作为子模块 git submodule add git@github.com:author/repo.git dir/localdir 这样会把远程项目会clone到本地dir/localdir文件夹中,并且更新本地.gitmodules配置文件
  • git submodule查看本地都有哪些module,如果module还没有checkout到本地,那么前面会有一个-
  • 当新下载一个项目的时候需要使用git submodule init来注册远程仓库到本地文件夹,并git submodule update来更新本地文件夹
  • git clone --recursive repo.git,clone整个项目的时候同时clone子项目
  • git submodule foreach git pull更新submoudle中的代码

另外,如果删除项目中的submodule需要注意,除了.gitmoudles文件之外,.git/config配置文件也有相关内容,所以除了在删除.gitmodules文件之外也需要对.git/config文件做相应修改

Carthage

基本使用
  • 新建Cartfile,标注好使用的库的地址以及版本
  • carthage update,这个时候会创建Carthage/目录,目录中,Build为编译好的framework和dsym文件,Checkout为checkout下来的代码
  • 项目中使用编译好的framework,可以使用Target的Generalembedded binaries,把整个Build拖进去

  • 如果不想使用嵌入的方式,可以使用Linked frameworks and Binaries来嵌入framework,并在Build Phase中添加script /usr/local/bin/carthage copy-framework,其中input文件即为几个framework文件。(据说如果不用copy-framework文件就会崩溃。ref)