内容字号:默认大号超大号

段落设置:段首缩进取消段首缩进

字体设置:切换到微软雅黑切换到宋体

利用CocoaPods管理代码看这一篇文章就够了

2018-03-12 17:19 出处:清屏网 人气: 评论(0

CocoaPods

一、CocoaPods介绍

安装完CocoaPods后,先来查看仓库。

pod repo

查看仓库

其实仓库就在cocoapods隐藏文件夹中,如下:

.cocoapods

这个文件夹是当安装了cocoapods后,第一次pod install的时候,cocoapods通过命令 pod setup 来建立的(这个pod setup命令是不需要手动执行的)。不过如果想重建这个官方repos仓库集合的话,可以执行下面命令:

pod repo remove master
pod setup

二、使用CocoadPods创建私有库

1、在Github上创建一个空的仓库,这个仓库是用来存放私有库spec的。当然也可以使用其他代码托管创建仓库。

Github

2、在Github上创建另一个空的仓库,这个仓库用来存放私有库的源码。

Github

3、创建一个本地私有仓库。

pod repo add MxZSpec https://github.com/vincentgemini/MxZSpec.git

注意这个只是创建而已,也就是只是在~/.cocoapods/repos 目录下添加了一个文件夹而已,并没有在其中添加 spec文件。

4、创建spec库索引。

pod lib create MxZFramework

创建spec库索引

打开spec文件。

默认spec文件

s.name:名称,pod search 搜索的关键词,注意这里一定要和.podspec的名称一样,否则报错

s.version:版本号

s.ios.deployment_target:支持的pod最低版本

s.summary: 简介

s.homepage:项目主页地址

s.license:许可证

s.author:作者

s.social_media_url:社交网址,这里我写的微博默认是Twitter,如果你写Twitter的话,你的podspec发布成功后会@你

s.source:项目的地址

s.source_files:需要包含的源文件

s.resources: 资源文件

s.requires_arc: 是否支持ARC

s.dependency:依赖库,不能依赖未发布的库

5、把创建好的MxZFramework推到远端。

git status
git add .
git commit -m 'init'
git remote add origin https://github.com/vincentgemini/MxZFramework.git
git push origin master
git tag '1.0.1'
git push --tags

由于cocoapods的repo是基于git的tag的,所以需要给MxZFramework添加一个tag.注意,这里添加的tag需要和podspec文件中描述的一致,不然以后别人引用的时候,cocoapods就不知道该下载什么代码了。

6、在MxZFramewrok中添加需要的源码库

MxZFramewrok文件结构

7、编辑库索引,打开1生成的spec文件,修改后如下:

MxZFramework.podspec

8、本地测试库索引,由于可以忽略警告,经常使用如下命令。

pod lib lint MxZFramework.podspec --verbose --allow-warnings

如果当前工程只有一个podspec,可以省略podspec,--verbose可以详细打印测试过程。

测试成功.png

9、远端测试库索引,在测试前,需要先将本地的源码库推到远端。此处注意tag一定要与podspec中的tag一致。

git status
git add .
git commit -m 'modify'
git push origin master
git tag '1.0.1'
git push --tags

上传成功后,再使用如下命令。

pod spec lint MxZFramework.podspec --allow-warnings

测试成功

有时本地测试可以通过,但远端测试无法通过,多半是由于远端代码库的文件结构不对,导致无法找到文件。此时需要对照一下索引库和远端代码库的对应关系。

10、在私有仓库中添加库索引。

pod repo push MxZSpec MxZFramework.podspec

由于索引中一些警告未处理,所以如下如下提示:

失败

解决办法:

pod repo push MxZSpec MxZFramework.podspec --allow-warnings

成功

MxZSpec.github

11、检验私有库

pod search MxZFramework

如下提示表示已经创建成功。

检验私有库

三、使用私用库开发

1、创建一个测试工程testTFW,进入到工程目录,初始化Podfile。

pod init

2、修改Podfile。

Podfile

3、构建pod。

pod install

提示

失败的原因是:pod install只会在master下搜索,所以需要制定仓库。

Podfile

成功

testTFW.project

四、总结

以上仅仅是本人利用cocoapods封装私有库的简单过程,稍后会持续补充一些遇到的新问题。

以下为补充部分

2018.2.24

  • 在添加USER_HEADER_SEARCH_PATHS变量时,发现添加后还是找不到相应的文件。解决办法设置绝对路径:

    $dir = File.dirname(__FILE__)
    $dir = $dir + "/MxZFramework/Vendors/FFmpeg-iOS/include/**"
    s.xcconfig = { "USER_HEADER_SEARCH_PATHS" => $dir}
  • 如果私有库中使用了静态库,那么在pod lib lint或者pod spec lint时需要加上--use-libraries,并且后面添加索引的时候也需要使用--use-libraries。

    pod spec lint --use-libraries

2018.3.7

使用inhibit_warnings或inhibit_all_warnings去掉第三方Pod中的警告

2018.3.8

简单记录:

#依赖第三方Framework
s.vendored_frameworks = 'Pod/ThirdModule/**/*.framework' 

#依赖第三方Lib
s.vendored_libraries = 'Pod/ThirdModule/**/*.a' 

#依赖系统Framework
s.frameworks = 'UIKit', 'QuartzCore', 'CoreGraphics', 'Accelerate', 'AssetsLibrary', 'OpenAL', 'OpenGLES'

#依赖系统Lib
s.libraries = 'icucore', 'c++', 'stdc++', 'stdc++.6', 'z', 'bz2', 'iconv', 'resolv', 'sqlite3', 'protobuf'

私有库中依赖私有库

在podspec中正常编写依赖pod关系:

s.dependency 'xxxModule', '1.0.1'

在检测podspec时,需要增加sources:

pod lib lint --use-libraries --verbose --allow-warnings --sources='https://github.com/CocoaPods/Specs.git,http://xxxxx/app/Speaces.git'

预编译头文件:

#方法一
s.prefix_header_contents = '#import <UIKit/UIKit.h>', '#import <Foundation/Foundation.h>'

#方法二
s.prefix_header_contents = <<-EOS
#ifdef __OBJC__
#import "MxZHeader1.h"
#import "MxZHeader2.h"
#endif 
EOS
end

#方法三
s.prefix_header_file = 'Classes/include/prefix.pch'

源文件:

s.source_files = 'Classes/**/*.{h,m}'
s.source_files = 'Classes/**/*.{h,m}', 'Others/**/*.{h,m}'

ARC设置:

s.requires_arc = false
s.requires_arc = 'Classes/Arc'   //该文件夹下是ARC,其它非ARC
s.requires_arc = ['Classes/*ARC1.m', 'Classes/ARC2.m']

compiler_flags设置:

s.compiler_flags = '-DOS_OBJECT_USE_OBJC=0', '-Wno-format'

资源设置:

s.ios.resource_bundle = { 'Resources' => 'Assets/XXX/Resources/*.png' }   
s.resource_bundles = { 
         'Resources' => ['Assets/XXX/Resources/*.png'], 
         'Other' => ['Assets/XXX/Other/*.png'] 
}

另一种资源设置:

s.resource = 'Resources/MxzKit.bundle'
s.resources = ['Images/*.png', 'Sounds/*']
分享给小伙伴们:
本文标签: CocoaPods

相关文章

发表评论愿您的每句评论,都能给大家的生活添色彩,带来共鸣,带来思索,带来快乐。

CopyRight © 2015-2016 QingPingShan.com , All Rights Reserved.

清屏网 版权所有 豫ICP备15026204号