cocoapod私有化总结

一:首先要知道一些terminal常用的命令:

pod lib lint --verbose (带详细输出的编译执行.podspec文件)

pwd (列出当前终端所在的目录)

tree 文件夹名 -L 2 《打印出指定文件夹下的目录树》

a、操作git主机的的命令:
gitremote rm origin (移除当前主机)

gitremote -v (查看当前主机)

git remote add origin 网址 (添加origin的主机,主机的网址为命令上的"网址")

b、升级cocoapod的命令:
A:gem source -l (查看根源)

B:pod repo update (将cocoapod远端的spec文件同步到本地)
:cocoapod有一个远端仓库盛放着一堆的spec文件。然后本地的cocoapod有一个类似命令集的工具,和一个本地的spec文件仓库。
a、如果 出现这个错误:

[!] CocoaPods was not able to update the `master-1` repo. If this is an unexpected issue and persists you can inspect it running `pod repo update --verbose`

a.1、先删除全局缓存:

$ sudo rm -fr ~/Library/Caches/CocoaPods/
$ sudo rm -fr ~/.cocoapods/repos/master/

a.2、再把当前 Pods 目录清空:

$ sudo rm -fr Pods/

a.3、再下载cocoapods:

$ sudo gem install cocoapods

a.3.1、出现错误:

ERROR:  While executing gem ... (Errno::EPERM)
    Operation not permitted - /usr/bin/pod

执行:

sudo gem install -n /usr/local/bin cocoapods (升级cocoapod工具的命令)<br>

a.4、再同步:

$ pod setup 

二:创建私有pod库的步骤与命令:

1、在gitlab上面创建一个项目'HHlibrary',项目链接为'http://git.gitlab.com/HHlibrary.git'

2、$ pod repo add HHlibrary http://git.gitlab.com/HHlibrary.git(在~/.cocoapods/repos目录下创建私有Spec Repo,不限在哪个目录执行)

注意

pod lib create ProjectName其实使用了默认参数,补全的话pod lib create ProjectName --template-url=https://github.com/CocoaPods/pod-template.git,

3、$ pod lib create HHlibrary(终端进入选择放项目的文件夹,然后执行)
注释:之后他会问你四个问题,

1.是否需要一个例子工程;

2.选择一个测试框架;

3.是否基于View测试;

4.类的前缀;

4个问题的具体介绍可以去看官方文档,
我这里选择的是1.yes;2.Specta/Expecta;3.yes;4.PTL。
问完这4个问题他会自动执行pod install命令创建项目并生成依赖。

4、tree 文件夹名 -L 2 《打印出指定文件夹下的目录树》

5、将组件的文件都放入Pod/Classes文件夹下

6、进入Example文件夹执行'pod update'命令

7、用xcode打开在Example文件夹中的demo项目,在'Manager Sheme'选择'HHlibrary'

8、如果组件中有第三方库,设置'library Search paths'

9、选择'Generic ios Device',Build通过

10、在gitlab上给HHlibrary添加ssh pubkey,然后cd到PodTestLibrary目录

$ git add .
$ git commit -s -m "Initial Commit of Library"
$ git remote add origin git@coding.net:wtlucky/podTestLibrary.git           #添加远端仓库
$ git push origin master     #提交到远端仓库

//因为podspec文件中获取Git版本控制的项目还需要tag号,所以我们要打上一个tag,
$ git tag -m "first release" "0.1.0"
$ git push --tags     #推送tag到远端仓库



11、开始编辑podspec文件

Pod::Spec.new do |s|
  s.name             = 'HHlibrary'
  s.version          = '0.1.0'
  s.summary          = 'HHlibrary'

  s.description      = <<-DESC
  Testing Private Podspec.
TODO: Add long description of the pod here.
                       DESC

  s.homepage         = 'http://hh/HHlibrary.git'
  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
  s.license          = { :type => 'MIT', :file => 'LICENSE' }
  s.author           = { 'HFavour' => 'hh@qq.com' }
  s.source           = { :git => 'http://hh/HHlibrary.git', :tag => "0.1.0" }
  # s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'

  s.ios.deployment_target = '8.0'
  s.platform = :ios,'7.0'
  s.requires_arc = true
  s.pod_target_xcconfig = { 'CLANG_ENABLE_OBJC_WEAK' => 'YES'}

  s.source_files = 'HHlibrary/Classes/**/*'
  
  s.resource_bundles = {
    'HHlibrary' => ['HHlibrary/Assets/*.xib']
  }
  # 你没用budle包着的话,那就一样处于mainBundle里面,如果你包了一层bundle的话,那就在初始化的时候,指定对应的bundle就行了

  # s.public_header_files = 'Pod/Classes/**/*.h'
  s.frameworks = 'CFNetwork', 'Foundation','UIKit'
  # s.dependency 'AFNetworking', '~> 2.3'


  #配置工程中的mrc文件
  non_arc_files = 'HHlibrary/Classes/SMTPLibrary/*'
  s.exclude_files = non_arc_files#在工程中首先排除一下
  s.subspec 'no-arc' do |sp|#一下就是子设置,为需要添加mrc标识的文件进行设置
  sp.source_files = non_arc_files
  sp.requires_arc = false
  s.frameworks = 'CFNetwork', 'Foundation','UIKit'
  end
end

12、$ pod lib lint --verbose(验证podspec是否可用)


 -> HHlibrary (0.1.0)
 
HHlibrary passed validation

//当你看到时,说明验证通过了,不过这只是这个podspec文件是合格的,不一定说明这个Pod是可以用的,我们需要在本地做一下验证.

13、本地测试podspec文件

//我们可以创建一个新的项目,在这个项目的Podfile文件中直接指定刚才创建编辑好的podspec文件,看是否可用。 在Podfile中我们可以这样编辑。
platform :ios, '7.0'//是.podspec文件里面的s.platform
pod 'PodTestLibrary', :podspec => '~/code/Cocoapods/podTest/HHlibrary/HHlibrary.podspec'  #指定podspec文件
//然后执行pod install命令安装依赖,打开项目工程,可以看到库文件都被加载到Pods子项目中了

14、提交podspec到Spec Repo中

$ pod repo push HHlibrary HHlibrary.podspec  #前面是本地Repo名字 后面是podspec名字
//完成之后这个组件库就添加到我们的私有Spec Repo中了,可以进入到~/.cocoapods/repos/WTSpecs目录下查看

note1:编写.podspec文件需要注意的地方。
a、s.frameworks = "UIKit","Foundation" 《注明使用到的framework》

b、s.vendored_frameworks = '以当前.podSpec文件所在的文件夹为起始文件路径 的 相对路径' 《添加手动拖入的framework的相对路径》

c、s.libraries = "mtasdk","z", "sqlite3" 《注明使用到的.lib文件,并且文件名应当去掉lib前缀和.xx后缀》

d、s.vendored_libraries = 'PPStaticAnalysisToolLibrary/Classes/MTA/libmtasdk.a' 添加手动拖入的lib文件的相对路径》

e、.podspec文件中使用的路径都是相对路径,且起始路径就是当前文件夹

note2、在文件夹Class下添加第三方依赖库需要注意的地方。
a、注意在文件夹Class下添加后,还要在拖入xcode时选择target为lib

b、在TAEGETS为lib的'Build Setting'中的'library Search paths',注意设置好相对路径'$(PROJECT_DIR)/xx/xx/'

c、注意在xcode中添加第三方库需要依赖的系统库

note3、获取cocoapod ASSert文件夹底下的xib文件的方法。

    NSBundle *frameworkbundle = [NSBundle bundleForClass:[MailViewController class]];//获取cocoapod所在的bundle的位置
    NSBundle *bundle = [NSBundle bundleWithPath:[frameworkbundle pathForResource:@"HHlibrary" ofType:@"bundle"]];//一般Assert文件夹下的资源所在的位置就是frameworkbundle底下
    self.view = [[bundle loadNibNamed:@"MailViewController" owner:self options:nil] lastObject];

三:pod私有库使用指南:

1、在profile文件中配置《platform :ios, '9.0'》

2、在profile文件中引入pod

示例:

pod 'HHlibrary',:git => 'http://hh/HHlibrary.git'

3、在终端执行 'pod install' 或者 'pod update --no-repo-update'

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容