第一次学习:
进入项目目录后,我们
1、touch Podfile
2、open Podfile 或者vim Podfile
3、三方文件,特别主要,要填写好项目名字
如下
platform :iOS,"8.1"
target 'YYHAlertViewDemo' do //YYHAlertViewDemo是我写的demo名字,也是正常的项目名字
pod ‘NIMSDK’
end
4、然后pod install
特别注意第一,第一次我们不能写pod update,如果我们这么处理,会出现如下问题:
1、pod couldnot load project
2、Couldn't load a xcode project because it is already opened from another project or workspace
等等问题。
导致我们去打开那个项目打不开。
如果走正常的路径,会提示成功。
[!] Please close any current Xcode sessions and use `xxxxx.xcworkspace` for this project from now on.
Sending stats
Pod installation complete! There is 1 dependency from the Podfile and 1 total pod installed.
特别注意:
1、pod install 还是update要在网络好的情况下进行,否则可能出现莫名的坑。
2、如果不想进行repo更新,可以添加如下参数,
pod install --verbose --no-repo-update(首次安装)
pod update --verbose --no-repo-update(更新)
特别注意install,verbose以及update后面都包含一个空格,不可缺少。
第二次学习:
互联网笔记:
1、因为Podfile.lock会锁定当前各依赖库的版本,之后如果多次执行pod install 不会更改版本
2、pod spec create nimdemo_spec_name
床架一个初始化的podspec文件
3、pod repo update master
更新本地三方库的描述文件
4、pod search query列出所有可用的第三方库
5、所有的项目Podspec 文件都托管在https://github.com/CocoaPods/Specs
6、Type here to search by name ,version,author,keywords,summay,and dependencies
7、target 允许你在工程中限定依赖项只在你指定的targets中生效
8、>0.1 高于0.1的任何版本
9、>=0.1 版本0.1和任何更高版本
10、<0.1 低于0.1的任何版本
11、<=0.1 版本0.1和任何较低的版本
12、你可以使用表示:head来指定版本,这意味着工程会使用指定spec下该pod的最新可以用版本,不过会强制下下载务必小心使用,因为spec可能导致不兼容。
pod ‘Objction’,:head
13、subspecs:当你用你一个名字装pod的时候,它将安装所有定义在podspec里面的默认的subspec
pod ‘QueryKit/Attribute’
也可以像一个集合
pod ‘QueryKit’,: subspes =>[‘Attribute’,’QuerySet’]
14、pod 'AFNetworking', :path => '~/Documents/AFNetworking'
使用这个选项后,Cocoapods 会将给定的文件夹认为是Pod的源,并且在工程中引用这些文件。
15、pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git'
pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :branch => 'dev'
有的时候,你可能想要使用一个最新的开发版本,或者某一个二次开发版本。如果是这样,你可以在pod声明中特别标明。
16、Pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :tag => '0.7.0'
使用仓库的某个tag
17、Pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :commit => '082f8319af'
还能指定一个提交记录
18、target
在target块里面定义依赖项,如果对应的target不想添加依赖可以用:exclusive =>ture参数
Podfile 文件将会创建一个全局的target名叫:default
19、xcodeproj
指定包含引用pod库的target 的xcode工程会被链接到,如果没有任何一个target指定目标,那么就会使用和Podefile在同一目录下的project
20、inhibit_all_warning!
屏蔽所有来自于cocoaPods依赖库的警告。你可以全局定义,也能在子target里面定义,也可以指定某一个库。
21、定义一种abstract_target包含多个target
22、abstract!和 inherit!
abstract! 指示当前的target是抽像的,因此不会直接链接Xcode target
inherit! 设置当前target的继承模式
参考文章:
你真的会写podfile吗
http://www.jianshu.com/p/8af475c4f717
Podfile语法参考
http://www.jianshu.com/p/8af475c4f717
Podfile 官方
https://guides.cocoapods.org/using/faq.html
云信更新遇到一个问题解决方案:
[!] The version of CocoaPods used to generate the lockfile (1.3.1) is higher than the version of the current executable (1.2.1). Incompatibility issues may arise.
[!] Unable to find host target(s) for NIMDemo-NIMKit. Please add the host targets for the embedded targets to the Podfile.
Certain kinds of targets require a host target. A host target is a "parent" target which embeds a "child" target. These are example types of targets that need a host target:
- Framework
- App Extension
- Watch OS 1 Extension
- Messages Extension (except when used with a Messages Application)
解决方法:sudo gem install -n /usr/local/bin cocoapods --pre
参考地方:
建立一个自己的pod
http://www.jianshu.com/p/89605e02bf18
第三次学习
博文从0到1实现组件化架构
文章地址:https://www.jianshu.com/p/7b4667cde80b
1、podFile文件:指定主工程加载哪些组件库,里面描述好组件库对应的podspec文件在哪,就知道去哪加载组件代码。
2、cocoapods可以加载远程仓库也可以加载本地仓库,一般加载远程仓库。
3、Podfile:指定podspec文件在哪,回到Podfile上一级目录,进入HttpManager就能找到。
4、../HttpManager:回到Podfile上一级目录,进入HttpManager就能找到。
5、本地仓库代码搞一个podspec文件描述去哪加载组件代码。
6、谁需要引入本地仓库代码,就创建Podfile。
7、以上的代码仓库都在本地,没有远程管理,也就意味着只能自己使用,别人不能使用,如果想把自己的代码仓库开源,让所有的开发人员都可以弄,应该怎么做?
8、给自己代码仓库,创建podspec,其实本质是把自己代码仓库的podspec索引文件上传上去就好了,可以直接使用pod lib create命令
9、podspec文件注意点:s.source_files仅仅描述组件代码就好,不要描述整个工程名文件,会把所有文件集成上去,错误写法:s.source_files = "HttpManager"
10、**:表示所有文件:因为*表示通配符,可有可无.
11、s.source_files = "HttpManager/Classes/**/*.{h,m}",表示组件代码在podspec目录下HttpManager/Classes中的所有文件,默认会自动追踪到到podspec文件的目录路径下,因为当前处于podspec文件中,处于哪个文件,就自动追踪哪个文件。
12、谁需要引入本地仓库代码,就创建Podfile
13、创建组件工程
(1)直接创建工程,把组件代码放在Class中,只要spec描述好,就会自动加载Class中组件代码,生成spec描述文件,指定加载组件工程的组件代码在哪。
(2)使用cocoapods命令:pod lib create组件代码名称
14、还会生成podspec,描述好组件代码在哪就好.
15、需要把自己的组件代码放在Class中对应文件,还不够,发现根本没法引入组件代码.h文件.
16、需要重新pod install,因为不重新pod install,Example工程根本不知道Pod更新了,pod install的作用:重新让pod库与所依赖的工程文件产生关联。
17、我们之前安装cocoapods时,有一步骤pod setup,这一步其实就是去下载cocoapods中公共的所有代码仓库索引,保存到本地
18、 通过pod repo 指令就能查看cocoapods的索引库
19、注册trunk,不是任何人都能推送,因为cocoapods依赖trunk服务器管理,所以需要通过trunk推送自己的podspec
20、命令:pod trunk register EMAIL [NAME]
21、pod trunk register [email protected] yuanzheng
22、用pod init 能代替vim Podfile
23、重要命令:
(1)pod init (pod初始化)
(2)pod spec create spec 文件名 (创建组件工程)
(3)pod lib create 组件代码名称
(4)pod trunk register EMAIL [NAME]注册trunk
(5)pod trunk push ****.podspec —allow-warnings推送自己的podspec到cocoapods的索引库
第四次学习:
1、pod update
听云已经出现最新版2.9
但是我通过pod update --verbose --no-repo-update这个不能更新,但是通过pod update却能
为什么呢:因为pod update --verbose --no-repo-update只是在本地更新,只有pod update才更新线上的,pod update 有个缺点就是慢,优点就是更新完全,因此在网络好的时候,我们应用pod update
2、如果我么写了固定的版本号,即使更新我们也会发现最新的不会下来,我们在pod库里面做的修改仍在。
3、pod update :
-bash: /usr/local/bin/pod: /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby:bad interpreter: No such file or directory
sudo gem install -n /usr/local/bin cocoapods
解决问题