Cocoapods使用私有库中际遇的坑,使用Cocoapods举行

spec.resource_bundles = { 'MyLibrary' => ['Resources/*.png'], 'OtherResources' => ['OtherResources/*.png']}

include of non-modular header inside framework module

背景:
当创设自身的pod时,作者的代码重视 MBProgressHUD第三方库,pod spec lint验证进度一贯出这几个错误
化解办法:
1.buldsetting 中设置 Allow Non-modular Includes In Framework Modules 为 YES
而是对我没用
2.将#import "**.h" 第三方库写在 .m文件中,并不是放在.h文件中就能够
e.g.:
自己的文书 UIView Hint
将 #import "MBProgressHUD.h" 那行代码放在 UIView Hint.m文件中

3.subspec

为了让自个儿的Pod被导入时体现出完美的文件层划分,subspec是必得的。若subspec要依赖别的的subspec,则subspec的dependency前边接的不是目录路径,而是specA/specB这种spec关系

接下来在将Git的改观push到远端仓库就可以

pod spec lint --sources='私有仓库repo地址,https://github.com/CocoaPods/Specs'

Specs satisfying the XXX dependency were found, but they required a higher minimum deployment target

缘由是“XXX”需求要求一个越来越高的最低安插指标(就是podspec文件中依附的库的最低布署版本)
把工程安顿版本改为 重视库的最低版本

7.若是私有库加多了静态库也许dependency用了静态库

那么试行pod lib lint还应该有pod spec lint时候须求增加—user-libraries选项不然晤面世'The 'Pods' target has transitive dependencies错误

开创并安装八个私家的Spec Repo。

s.ios.vendored_frameworks = "xxx/**/*.framework"s.ios.vendored_libraries = "xxx/**/*.a”

私有库已经由此验证并传播私有repo也能经过pod search,不过正是pod install退步。

那时只要实行pod update 然后去喝杯水就好了。。。(前提是你把合法源换到本国的,不然从github上创新官方repo的速度你懂的。 退换官方源)

参考

what's the different between 'pod spec lint' and 'pod lib lint'
给Pod增添财富文件
Reject installation if a static library is used as a transitive dependency while using frameworks

5.方便人民群众地开垦本土私有库

Cocoapods就提供了三个费用格局,其实际操作作起来也是特别轻易的作业,就是将所谓的援引路线修改成地点路径就能够。就是讲Podfile中的pod '库名', :path => '当地路径'就能够。那样在平时的改变代码中是不供给进行pod update的,可是对于假设改变了目录结构(增添、删除也许移动文件文件)大概是修改了Podspec文件的布署来讲,最佳是运作一下pod update的命令。普通修改代码的境况下就无需周转pod update命令和打tag了。pod 'iOS-Test', :path => '../iOS-Test’

│   ├── Podfile.lock

在此以前使用Cocoapods时候就是轻易的创立Podfile,然后推行pod install就造成。近来走近过大年了有空时间比比较多就雕刻把项目中复用很多的代码抽出出来然后用Cocoapods管理,算是迈开项目组件化的率先步。途中遇见若干坑,这里就总括下有益温馨之后查看。

此处先提交轻易利用私有库的学科链接:
CocoaPods三重奏(二) 之 组件化开垦

2.私有pod的验证

动用pod spec lint去验证私有库能无法通过认证时应有,应该要增多--sources选项,不然会冒出找不到repo的不当

pod spec lint --sources='私有仓库repo地址,https://github.com/CocoaPods/Specs'

end

 NSURL *bundleURL = [[NSBundle mainBundle] URLForResource:@"JZShare" withExtension:@"bundle"]; NSBundle *bundle = [NSBundle bundleWithURL:bundleURL]; UIImage *img = [UIImage imageNamed:icon inBundle:bundle compatibleWithTraitCollection:nil];

私有库中增多财富(图片、音录像等)

格局共有三种:

第一种

spec.resources = ["Images/.png", "Sounds/"]
不过那么些财富会在卷入的时候平昔拷贝的app的Bundle中,那样或然会和别的国资本源产生命名争执

第二种

spec.resource = "Resources/MYLibrary.bundle"
把能源都献身bundle中,然后装进时候那个bundle会直接拷贝进app的mainBundle中。使用的时候在mainBundle中搜索那一个bundle然后再找寻具体能源

NSURL *bundleURL = [[NSBundle mainBundle] URLForResource:@"JZShare" withExtension:@"bundle"];
NSBundle bundle = [NSBundle bundleWithURL:bundleURL];
UIImage
img = [UIImage imageNamed:icon inBundle:bundle compatibleWithTraitCollection:nil];
第三种
spec.resource_bundles = {
'MyLibrary' => ['Resources/.png'],
'OtherResources' => ['OtherResources/
.png']
}
这种措施运用 framework 的命名空间,有效幸免了能源龃龉。
接纳方式是先获得最外面包车型客车 bundle,然后再去找上边钦赐名字 的 bundle 对象,再寻找具体能源
NSBundle *bundle = [NSBundle bundleForClass:[MYSomeClass class]];
NSURL *bundleURL = [bundle URLForResource:@"MyLibrary" withExtension:@"bundle"];
NSBundle *resourceBundle = [NSBundle bundleWithURL: bundleURL];
UIImage *img = [UIImage imageNamed:icon inBundle:bundle compatibleWithTraitCollection:nil];

8.假如私有库只引用别的库的subspec

只需求依据想借助的subspec,不用管主spec(因为正视subspec必然要依附主spec)

最终再来讲一下塑造好的podspec文件三番五次的更新维护职业,举例如何增加新的本子,如何删除Pod。

便民地开垦本土私有库

Cocoapods就提供了一个支出格局,其实际操作作起来也是特别轻便的事务,便是将所谓的援引路线修改成地点路线就可以。正是讲Podfile中的pod '库名', :path => '本地路线'就可以。那样在日常的改变代码中是不需求实践pod update的,可是对于如若改变了目录结构(增添、删除或许移动文件文件)只怕是修改了Podspec文件的布署来讲,最佳是运作一下pod update的通令。普通修改代码的事态下就没有要求周转pod update命令和打tag了。
pod 'iOS-Test', :path => '../iOS-Test’

1.pod lib lint 和 pod spec lint 命令的界别

pod lib lint是只从本地验证你的pod能或无法通过认证pod spec lint是从本地和长途验证你的pod能不可能通过认证在编排好.spec文件后,进行pod验证。远程验证供给先提交代码到远端,然后开展表达。远端验证,供给给品种打tag,不然验证的要么上次提交的(那点很意外,不打tag验证一贯是前面包车型地铁,还没时间去深刻钻研)

新禧佳节回到上班,未有怎么任务做,正好项目中有一对国有组件需求从变得庞大的花色种类中剥离出来,何况年前项目终于从SVN迁移到了Git,真是喜大普奔,额手称庆!那样项目应用Cocoapods就有了标准,正好趁着那二日尚未什么样事情做,学习一下成立私有的podspec并在品种中配备使用,以及pods的subspec的创办及选取。

这种方法运用 framework 的命名空间,有效防护了财富抵触。使用方式是先获得最外侧的 bundle,然后再去找上边钦命名字 的 bundle 对象,再寻觅具体能源

私有pod的验证

选取pod spec lint去印证私有库能不可能通过验证时应有,应该要添加--sources选项,不然会冒出找不到repo的荒唐
pod spec lint --sources='私有货仓repo地址,https://github.com/CocoaPods/Specs'
3.subspec
为了让投机的Pod被导入时展现出理想的文件层划分,subspec是必需的。
若subspec要借助另外的subspec,则subspec的dependency后边接的不是目录路线,而是specA/specB这种spec关系

6.私有库中增添财富

办法共有三种:第一种

spec.resources = ["Images/*.png", "Sounds/*"]

不过这么些能源会在卷入的时候一贯拷贝的app的Bundle中,那样大概会和任何能源发生命名争持第三种

spec.resource = "Resources/MYLibrary.bundle"

把能源都放在bundle中,然后装进时候这几个bundle会间接拷贝进app的mainBundle中。使用的时候在mainBundle中寻觅这么些bundle然后再寻觅具体能源

NSURL *bundleURL = [[NSBundle mainBundle] URLForResource:@"JZShare" withExtension:@"bundle"]; NSBundle *bundle = [NSBundle bundleWithURL:bundleURL]; UIImage *img = [UIImage imageNamed:icon inBundle:bundle compatibleWithTraitCollection:nil];

第三种

spec.resource_bundles = {'MyLibrary' => ['Resources/*.png'],'OtherResources' => ['OtherResources/*.png']}

这种格局应用 framework 的命名空间,有效防御了财富争持。使用方法是先得到最外面的bundle,然后再去找上边钦赐名字 的 bundle 对象,再寻觅具体能源

NSBundle *bundle = [NSBundle bundleForClass:[MYSomeClass class]];NSURL *bundleURL = [bundle URLForResource:@"MyLibrary" withExtension:@"bundle"];NSBundle *resourceBundle = [NSBundle bundleWithURL: bundleURL];UIImage *img = [UIImage imageNamed:icon inBundle:bundle compatibleWithTraitCollection:nil];

s.dependency 'AFNetworking', '~> 2.3'   #依靠关系,该项目所正视的其它库,假如有四个供给填写多少个s.dependency

NSBundle *bundle = [NSBundle bundleForClass:[MYSomeClass class]];NSURL *bundleURL = [bundle URLForResource:@"MyLibrary" withExtension:@"bundle"];NSBundle *resourceBundle = [NSBundle bundleWithURL: bundleURL];UIImage *img = [UIImage imageNamed:icon inBundle:bundle compatibleWithTraitCollection:nil];

私有库援用私有库的难点

在私有库援用了私有库的情形下,在印证和推送私有库的情状下都要丰裕富有的能源地址,不然pod会暗中认可从官方repo查询。

pod spec lint --sources='私有堆栈repo地址,https://github.com/CocoaPods/Specs'
pod repo push 本地repo名 podspec名 --sources='私有仓库repo地址,https://github.com/CocoaPods/Specs'
5.援引本身或第三方的framework或.a文件时
在podsepc中应该这样写:

s.ios.vendored_frameworks = "xxx/*/.framework"
s.ios.vendored_libraries = "xxx//*.a”

4.私有库援引私有库的难题

在私有库引用了私有库的处境下,在印证和推送私有库的情况下都要拉长富有的能源地址,不然pod会私下认可从官方repo查询。

pod spec lint --sources='私有仓库repo地址,https://github.com/CocoaPods/Specs'pod repo push 本地repo名 podspec名 --sources='私有仓库repo地址,https://github.com/CocoaPods/Specs'

自己已经制作好了PodTestLibrary的0.1.0版本,现在本身对他张开进级换代专业,这一次笔者增多了更加的多的模块到PodTestLibrary之中,富含工具类,底层Model及UIKit扩展等,这里又尝试了瞬间subspec效率,给PodTestLibrary创造了四个子分支。

一旦私有库增加了静态库大概dependency用了静态库

那么施行pod lib lint还会有pod spec lint时候需求丰盛—user-libraries选项
再不会师世'The 'Pods' target has transitive dependencies错误

今后他会问您多少个难点,1.是否须要三个事例工程;2.选项贰个测量检验框架;3.是还是不是基于View测量检验;4.类的前缀;4个难点的有血有肉介绍能够去看官方文书档案,作者那边选拔的是1.yes;2.Specta/Expecta;3.yes;4.PTL。 问完那4个难点他会自行执行pod install命令创设项目并扭转重视。

使用pod spec lint去验证私有库能还是不能够通过验证时应有,应该要增添--sources选项,不然会现出找不到repo的不当

pod lib lint 和 pod spec lint 命令的差别

pod lib lint是只从地点验证你的pod能还是无法通过验证
pod spec lint是从本地和长距离验证你的pod能或不能够通过认证
作者一般都以一贯使用pod spec lint去表明pod有未有标题

commonTools.source_files = 'Pod/Classes/CommonTools/**/*'

  • 第二种

假设私有库只援用别的库的subspec

只需求借助想依靠的subspec,不用管主spec(因为注重subspec必然要依赖主spec)

ui.resource = "Pod/Assets/MLSUIKitResource.bundle"

pod spec lint --sources='私有仓库repo地址,https://github.com/CocoaPods/Specs'pod repo push 本地repo名 podspec名 --sources='私有仓库repo地址,https://github.com/CocoaPods/Specs'

wtlucky@wtluckydeMacBook-Pro:~/.cocoapods/repos/WTSpecs$ git ci -m "remove unuseful pods"

  • 第一种

├── PodTestLibrary

5.引用本人或第三方的framework或.a文件时在podsepc中应当如此写:

从此再行到~/.cocoapods/repos/WTSpecs目录下查看

Cocoapods就提供了贰个费用情势,其实际操作作起来也是极度轻便的事情,正是将所谓的援引路线修改成地点路线就可以。便是讲Podfile中的pod '库名', :path => '本地路线'就能够。这样在常常的修改代码中是没有要求推行pod update的,不过对于假诺改换了目录结构(增加、删除也许移动文件文件)也许是修改了Podspec文件的布局来讲,最棒是运维一下pod update的授命。普通修改代码的境况下就无需周转pod update命令和打tag了。pod 'iOS-Test', :path => '../iOS-Test’

- PodTestLibrary/NetWorkEngine (1.0.0)

在私有库援用了私有库的图景下,在认证和推送私有库的图景下都要加上富有的能源地址,不然pod会暗许从官方repo查询。

$ git push --tags     #推送tag到远端旅馆

pod lib lint是只从地面验证你的pod能还是不可能通过验证pod spec lint是从本地和长距离验证你的pod能或无法通过认证本人一般都是直接行使pod spec lint去验证pod有没反常

│   ├── Podfile                              #demo 应用程式 的注重描述文件

那会儿只要进行pod update 然后去喝杯水就好了。。。(前提是您把官方源换来国内的,不然从github上更新官方repo的进程你懂的。 更动官方源)

PS:如果有别的协作职员一齐利用这一个私有Spec Repo的话在她有对应Git饭店的权能的前提下实行同一的一声令下增添那个Spec Repo就能够。

把财富都放在bundle中,然后装进时候那么些bundle会直接拷贝进app的mainBundle中。使用的时候在mainBundle中搜寻这一个bundle然后再寻找具体财富

.

  • what's the different between 'pod spec lint' and 'pod lib lint'
  • 给Pod加多能源文件
  • Reject installation if a static library is used as a transitive dependency while using frameworks

Pod::Spec.new do |s|  s.name             = "PodTestLibrary"  s.version          = "1.0.0"  s.summary          = "Just Testing."  s.description      = <<-DESC                       Testing Private Podspec.                       * Markdown format.                       * Don't worry about the indent, we strip it!                       DESC  s.homepage         = ""  # s.screenshots     = "www.example.com/screenshots_1", "www.example.com/screenshots_2"  s.license          = 'MIT'  s.author           = { "wtlucky" => "wtlucky@foxmail.com" }  s.source           = { :git => "", :tag => "1.0.0" }  # s.social_media_url = ''

只要求依附想依赖的subspec,不用管主spec(因为注重subspec必然要信赖主spec)

wtlucky@wtluckydeMacBook-Pro:~/.cocoapods/repos/WTSpecs$ git push origin master

  • 第三种

pod 'PodTestLibrary', :path => '~/code/Cocoapods/podTest/PodTestLibrary'      #点名路径

主意大利共产党有三种:

s.frameworks = 'UIKit'

那么奉行pod lib lint还或者有pod spec lint时候须求增添—user-libraries选项不然会油可是生'The 'Pods' target has transitive dependencies错误

end

Just Testing.

为了让自身的Pod被导入时显得出美丽的文书层划分,subspec是必需的。若subspec要依赖别的的subspec,则subspec的dependency前边接的不是目录路线,而是specA/specB这种spec关系

#s.dependency 'OpenUDID', '~> 1.0.0'

可是这几个能源会在卷入的时候一直拷贝的app的Bundle中,这样恐怕会和别的资源产生命名争辨

- Versions: 1.0.0, 0.1.0 [WTSpecs repo]

那边先交付简单利用私有库的学科链接:Cocoapods 应用第二有的-私有库相关

s.frameworks = 'UIKit'                  #所需的framework,多个用逗号隔离

spec.resources = ["Images/*.png", "Sounds/*"]

│   └── 0.1.0

spec.resource = "Resources/MYLibrary.bundle"

$ pod search PodTestLibrary

-> PodTestLibrary (0.1.0)

本条第二步未有怎么好介绍的,假设是有存活的零件项目,并且在Git的本子管理下,那么这一步尽管达成了,能够直接进行下一步了。

$ git tag -m "first release" "0.1.0"

即便大家要去除私有Spec Repo下的某三个podspec怎么操作呢,此时无需依赖Cocoapods,只必要cd到~/.cocoapods/repos/WTSpecs目录下,删掉库目录

地面测量检验配置好的podspec文件是不是可用。

.

$ pod search PodTestLibrary

└── README.md

3 directories, 4 files

万一从第二步过来,已经有了现存的档期的顺序,那么就需求给这一个连串开创贰个podspec文件,创制它必要实践Cocoapods的其他一个命令,法定文书档案在这里

然后施行pod install命令安装依赖,打开项目工程,能够看来库文件都被加载到Pods子项目中了,不过它们并不以前在Pods目录下,而是跟测量试验项目同样存在于Development Pods/PodTestLibrary中,那是因为大家是在本地测量检验,而从未把podspec文件增多到Spec Repo中的缘故。

}                                       #能源文件地方

采用制作好的Pod

当今以来一下以此工具,相关的文书档案介绍是Using Pod Lib Create就拿自家制造的podTestLibrary为例子具体讲一下这里是哪些操作的,先cd到要创设项指标目录然后施行

s.requires_arc = true

#}

wtlucky@wtluckydeMacBook-Pro:~/.cocoapods/repos/WTSpecs$ git add --all .

当您看来

#s.dependency 'AFNetworking', '~> 2.3'

├── Pod                                       #组件的目录

dataModel.source_files = 'Pod/Classes/DataModel/**/*'

Creating a Private CocoaPod

└── [VERSION]

Pod::Spec.new do |s|  s.name             = "PodTestLibrary"    #名称  s.version          = "0.1.0"             #版本号  s.summary          = "Just Testing."     #简单来说介绍,上边是事无巨细介绍  s.description      = <<-DESC                       Testing Private Podspec.                       * Markdown format.                       * Don't worry about the indent, we strip it!                       DESC  s.homepage         = ""                           #主页,这里要填写能够访谈到的地方,不然验证不通过  # s.screenshots     = "www.example.com/screenshots_1", "www.example.com/screenshots_2"           #截图  s.license          = 'MIT'              #开源共同商议  s.author           = { "wtlucky" => "wtlucky@foxmail.com" }                   #小编音讯  s.source           = { :git => "", :tag => "0.1.0" }      #花色地址,这里不帮助ssh的地点,验证不通过,只支持HTTP和HTTPS,最佳使用HTTPS  # s.social_media_url = ''                       #多媒体介绍地方

platform :ios, '7.0'

s.subspec 'NetWorkEngine' do |networkEngine|

ui.public_header_files = 'Pod/Classes/UIKitAddition/**/*.h'

在成就这一名目好多步骤之后,我们就足以在专门的学业项目中选用那几个私有的Pod了只需求在类型的Podfile里扩展以下一行代码就能够

因为podspec文件中赢得Git版本调整的体系还索要tag号,所以大家要打上二个tag,

始建完结之后在Terminal中进行如下命令

├── Specs

commonTools.dependency 'OpenUDID', '~> 1.0.0'

成就那一个之后,在实质上项目中我们就足以挑选使用成套组件库也许是组件库的某三个片段了,对应的Podfile中增加的开始和结果为

履新维护podspec。

这里说的是丰硕到个体的Repo,假使要增加到Cocoapods的官方库了,能够动用trunk工具,具体能够查阅法定文档。

创设Pod所对应的podspec文件。

- PodTestLibrary/UIKitAddition (1.0.0)

├── PodTestLibrary.podspec           #其三步要开创的podspec文件

platform :ios, '7.0'

s.subspec 'DataModel' do |dataModel|

wtlucky@wtluckydeMacBook-Pro:~/.cocoapods/repos/WTSpecs$ rm -Rf PodTestLibrary

- Homepage: 

由此Cocoapods创立出来的目录本人就在地头的Git管理下,大家须要做的便是给它增加远端货仓,一样去GitHub或别的的Git服务提供商这里创设二个个体的库房,拿到SSH地址,然后cd到PodTestLibrary目录

向Spec Repo提交podspec须要产生两点二个是podspec必需经过认证精确,在三个正是删掉无用的批注(这些不是必得的,为了规范恐怕删掉呢)。 向我们的村办Spec Repo提交podspec只须求三个指令

- PodTestLibrary/CommonTools (1.0.0)

- Versions: 0.1.0 [WTSpecs repo]

- Source:   

#s.resource_bundles = {

$ pod repo add WTSpecs 

因为大家成立了subspec所以项目总体的注重dependency,源文件source_files,头文件public_header_files,能源文件resource等都活动到了分别的subspec中,每一个subspec之间也得以有互相的依赖关系,比方UIKitAddition就依靠于CommonTools。

│   └── Tests

│   ├── PodTestLibrary

├── Example                                  #demo APP

9 directories, 5 files

具体做法是先将源文件加多到Pod/Classes中,然后依照分裂的模块对文件目录举办规整,因为自个儿有七个模块,所以在Pod/Classes下有创设了多个子目录,实现之后连续编辑此前的PodTestLibrary.podspec,此次扩充了subspec个性

$ tree PodTestLibrary -L 2

$ pod repo push WTSpecs PodTestLibrary.podspec

- Homepage: 

Just Testing.

# pod repo add [Private Repo Name] [GitHub HTTPS clone URL]

成立Pod项目工程文件

#  'PodTestLibrary' => ['Pod/Assets/*.png']

├── LICENSE

- PodTestLibrary/DataModel (1.0.0)

end

$ pod lib lint

然后实践pod update,更新库信赖,然后打卡项目能够见到,大家和好的库文件已经冒出在Pods子项目中的Pods子目录下了,而不再是Development Pods。

立异维护podspec

commonTools.public_header_files = 'Pod/Classes/CommonTools/**/*.h'

$ pod repo remove WTSpecs

pod 'PodTestLibrary', '~> 1.0.0'

完了以往那些组件库就加多到大家的个人Spec Repo中了,能够进去到~/.cocoapods/repos/WTSpecs目录下查看

$ git remote add origin git@coding.net:wtlucky/podTestLibrary.git           #加多远端宾馆

│       └── PodTestLibrary.podspec

- Source:   

pod 'PodTestLibrary', '1.0.0'   #动用任何库

$ pod 'PodTestLibrary', '~> 0.1.0'

业已有五个本子了,使用pod search查找获得的结果为

│   ├── Assets                            #能源文件

$ git commit -s -m "Initial Commit of Library"

创造Pod的所必要的类别工程文件,况且有可访问的种类版本调控地址。

PodTestLibrary passed validation.

在个体项目中的Podfile中追加刚刚制作的好的Pod并选用。

先来讲第一步,什么是Spec Repo?它是独具的Pods的二个目录,正是三个容器,全部公开的Pods都在这几个里面,它其实是二个Git旅舍remote端在GitHub上,可是当您利用了Cocoapods后它会被clone到地点的~/.cocoapods/repos目录下,能够步入到那个目录看到master文件夹正是其一官方的Spec Repo了。这些master目录的构造是以此样子的

s.platform     = :ios, '7.0'

PodTestLibrary

完全先说贝因美(Beingmate)(Nutrilon)下成立六个私有的podspec包含如下那么多少个步骤:

s.public_header_files = 'Pod/Classes/**/*.h'   #公早先文件地方

s.requires_arc = true                   #是还是不是使用ARC,借使钦点具体文件,则具体的标题采用ARC

创建podspec文件

ui.dependency 'PodTestLibrary/CommonTools'

施行完未来,就创办了二个podspec文件,他里面会含有众多剧情,能够遵照本人事先介绍的进展编辑,没用的删掉。编辑实现之后选用表达命令验证一下

└── [SPEC_NAME]

在这一多种的步调中须要成立七个Git仓库,分别是首先步和第二步(第二步不自然非若是Git货仓,只借使能够获得到相关代码文件就足以,也能够是SVN的,也能够说zip包,不同就是在podspec中的source项填写的开始和结果各异),并且第一步只是在初次创设私有podspec时才须求,之后在创建其余的只需求从第二步初步就能够。本文只介绍在Git环境下的操作,别的条件别的方法暂不表达。

end

做完这一个就能够起来编写制定podspec文件了,它是多少个Ruby的公文,把编辑器的格式改成Ruby就能够观看语法高亮,上边作者贴上自家的podspec文件,并在前边以注释的格局表明每一个字段的含义,未有关系到的字段能够去合德文书档案查阅

└── README.md                                #markdown格式的README

networkEngine.public_header_files = 'Pod/Classes/NetworkEngine/**/*.h'

时,表达验证通过了,可是那只是以此podspec文件是合格的,不分明表达那几个Pod是能够用的,我们必要在该地做一下验证,那就是第四步的原委了,第四步在切实表达。

│   ├── 0.1.0

Cocoapods是老大好用的二个iOS信赖管理工具,使用它能够一本万利的军管和更新项目中所使用到的第三方库,以及将团结的体系中的公共组件交由它去管理。Cocoapods的介绍及亮点本文就不在赘述,笔者起来选用Cocoapods依然在七年前,那年它正好出现,网络的材质还百般的少,就连他们本身的HomePage都拾贰分的简便,小编就开首尝试着使用了须臾间,用它管理起第三方库确实是丰裕的平价顺手。后来它有了越来越强硬的作用就是温馨创设podspec,更能够设置个人的库。

networkEngine.dependency 'AFNetworking', '~> 2.3'

再去看我们的Spec Repo远端仓库,也可能有了三回提交,那个podspec也一度被Push上去了。

参谋资料

│   └── Classes                              #类文件

│   ├── PodTestLibrary.xcworkspace

pod 'PodTestLibrary', '~> 0.1.0'

$ git push origin master     #交给到远端仓库

最后介绍一下怎么样删除三个私有Spec Repo,只必要实施一条命令就能够

#s.source_files = 'Pod/Classes/**/*'

$ pod lib create podTestLibrary

#s.public_header_files = 'Pod/Classes/**/*.h'

end

.

│   │   └── PodTestLibrary.podspec

接下去便是向Pod文件夹中增多库文件和能源,并安排podspec文件,小编把叁个网络模块的共有组件放入Pod/Classes中,然后踏入Example文件夹实践pod update命令,再张开项目工程得以看看,刚刚加多的组件已经在Pods子工程下Development Pods/PodTestLibrary中了,然后编辑demo工程,测量试验组件,作者并未运用提供的测量检验框架实行测验,这里就先不介绍了。

向个人的Spec Repo中付出podspec。

pod 'PodTestLibrary/NetWorkEngine', '1.0.0'  #行使某三个局地

为此大家要求创立二个好像于master的民用Spec Repo,这里大家能够fork官方的Repo,也得以自身创造,个人建议不fork,因为你只是想增多本人的Pods,没有供给把现成的公然Pods都copy一份。所以成立多个 Git旅社,这几个库房你能够成立私有的也足以成立公开的,可是既然私有的Spec Repo,还是创设私有的库房吧,供给留神的正是假使项目中有另外同事共同开拓的话,你还要给他以此Git仓库的权位。因为GitHub的私人商品房货仓是收取费用的,作者还不是GitHub的付开支户,所以我动用了任何Git服务,我使用的是CODING,当然还也会有另外的可供选取开源中夏族民共和国、Bitbucket以及CSDN Code.

pod 'PodTestLibrary/UIKitAddition', '1.0.0'

那时假诺成功的话步入到~/.cocoapods/repos目录下就足以看看WTSpecs这几个目录了。至此第一步创造私有Spec Repo实现。

│   ├── PodTestLibrary.xcodeproj

└── [SPEC_NAME].podspec

最后再一次行使pod lib lint验证编辑好的podsepc文件,未有小编的WA宝马X5NING或然EWranglerROHaval之后,就能够重复提交到Spec Repo中了,命令跟以前是均等的

s.subspec 'UIKitAddition' do |ui|

-> PodTestLibrary (0.1.0)

-> PodTestLibrary (1.0.0)

└── README.md

如此这些Spec Repo就在本地删除了,大家还足以由此

│   └── 1.0.0

本地质度量试podspec文件

编纂完毕之后,在测量试验项目里pod update一下,多少个子项目都被加进项目工程了,写代码验证精确之后,就足以将以此工程push到远端酒馆,并打上新的tag->1.0.0。

在等级次序中编辑代码,测量检验库文件精确后就足以最初下一步了,提交podspec到Spec Repo中。

ui.source_files = 'Pod/Classes/UIKitAddition/**/*'

│   ├── Pods                                  #demo 应用程式 的信赖文件

networkEngine.source_files = 'Pod/Classes/NetworkEngine/**/*'

├── LICENSE

s.subspec 'CommonTools' do |commonTools|

s.platform     = :ios, '7.0'            #支撑的阳台及版本

$ pod repo push WTSpecs PodTestLibrary.podspec  #前边是本土Repo名字 前面是podspec名字

表达精确就能够进去下一步了。

'PodTestLibrary' => ['Pod/Assets/*.png']

再把它给加回来。

$ git add .

Developing Private In-House Libraries with CocoaPods

Private Pods

(本文小编:wtlucky)

测验精确后须要将该项目拉长并推送到远端仓库,并编写podspec文件。

注:这里需求小心的是每当你向Pod中加多了新的公文大概今后更新了podspec的版本都需求重新实行一回pod update命令。

s.source_files = 'Pod/Classes/**/*'     #代码源文件地点,**/*代表Classes目录及其子目录下有所文件,假设有多个目录下则用逗号分开,如若须要在类型中分组显示,这里也要做相应的装置

编辑完podspec文件后,供给验证一下那些文件是或不是可用,假如有任何WA奇骏NING或许ELANDRO本田CR-V都是不可能的,它就不能够被增添到Spec Repo中,不过xcode的WAENVISIONNING是能够存在的,验证需求实行一下命令

s.resource_bundles = {

于今,大家的那几个组件库就曾经制作增加完毕了,使用pod search命令就足以查到大家和好的库了

pod 'PodTestLibrary', :podspec => '~/code/Cocoapods/podTest/PodTestLibrary/PodTestLibrary.podspec'  #指定podspec文件

- Sub specs:

├── PodTestLibrary

向Spec Repo提交podspec

假使您的组件还在你冗余强大的体系中,要求拆分出来或许需求自身从零最初制造多个零件库,那么自个儿提出你利用Cocoapods提供的两个工具将第二步与第三步结合起来做。

├── LICENSE                               #开源和睦 暗中同意MIT

如上是项目转移的目录结构及连锁介绍。

dataModel.public_header_files = 'Pod/Classes/DataModel/**/*.h'

$ pod spec create PodTestLibrary git@coding.net:wtlucky/podTestLibrary.git

$ pod repo add WTSpecs git@coding.net:wtlucky/WTSpecs.git

end

成立私有Spec Repo

我们得以创建贰个新的花色,在这么些项指标Podfile文件中央机关单位接内定刚才创制编辑好的podspec文件,看是还是不是可用。 在Podfile中大家能够这么编辑,有二种办法

│       └── PodTestLibrary.podspec

$ pod lib lint

本文由星彩网app下载发布于计算机编程,转载请注明出处:Cocoapods使用私有库中际遇的坑,使用Cocoapods举行

TAG标签: 星彩网app下载
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。