创建pod库
在GitHub上创建一个空仓库,不要初始化。`PrivatePods 是你的私有库名字。如果已经初始化,下面创建lib要在对应的目录里执行。
1
| https://github.com/your_github_name/PrivatePods.git
|
- 打开终端,进入到要建立私有库工程的目录,执行下面的命令 。执行命令过程中会询问几个问题,按自己所需回答。
1
| pod lib create PrivatePods
|
创建完成后,会自动打开项目。
- 删除
ReplaceMe.m
文件。 - 添加一个测试类,写一个测试方法。注意,文件要放到 PrivatePods/PrivatePods/Classes 目录中。
例如:
1
2
3
4
5
6
7
| ATest.h
+(void)testMethod;
ATest.m
+(void)testMethod {
NSLog(@"%s", __func__);
}
如果有已存在源码,文件也放入 /Classes 文件下。
|
- 打开终端,进入
Example
文件夹,执行pod install
,安装依赖项。
1
| 这里需要注意的是,只要新增加类、资源文件或依赖的第三方库都需要重新运行`pod install`来进行更新。
|
- 在
XXViewController.m
中引用测试类 #import "ATest.h"
,运行看是否符合预期结果. +[ATest testMethod]
提交推送到远端
提交源码到GitHub,并打tag,不使用tag会出现问题。这里尽量使用命令行,一些软件是不支持添加tag的。0.1.0
版本号保持和DCPrivatePods.podspec
的s.version = '0.1.0'
保持一致。
1
2
3
4
5
6
7
8
9
10
| $ git add -A
$ git commit -m "0.1.0 发布"
$ git tag 0.1.0
$ git push remote origin master --tag
其他命令
$ git remote add origin https://github.com/your_github_name/repo_name.git
$ git pull origin master
$ git push -u origin master
$ git tag push
|
打开终端,执行命令,验证podspec
文件。
1
2
3
4
5
| pod spec lint
PrivatePods.podspec passed validation.
# 注意
pod lib lint 是验证pod库。
pod spec lint 是验证podspec文件。
|
直到验证成功,如果有任何的error,都需要解决掉。warn 可以使用下面的命令忽略。
私有库可能出现URL警告,可增加 --allow-warnings
忽略警告。
1
| - WARN | url: The URL (https://github.com/your_github_name/repo_name.git) is not reachable.
|
发布私有库
在github上创建一个新的仓库。例如:
1
| https://github.com/your_git_name/MyPrivateSpecs.git
|
注意:创建时勾选初始化,空仓库是没有master分支的。会提示如下错误
1
2
| 您的配置中指定要合并远程的引用 'refs/heads/master',
但是没有获取到这个引用。
|
创建完成后执行命令。
1
| $ pod repo add MyPrivateSpecs https://github.com/your_github_name/MyPrivateSpecs.git
|
执行成功后,可以进入目录查看 ~./cocoapods/repos/
,看到MyPrivateSpecs
文件夹是说明成功了。
这个仓库是管理你的私有库,你可能创建一个或多个代码库,每个代码库又会不断的迭代发布新的版本。那么这个Spec就像记录表一样,记录你的所有代码私有库,以及每个版本。使用时,在你的项目Podfile文件中添加source 'spec仓库地址'
,然后pod '私有库的名字'
,就可以使用了。
发布你的私有库,如果没通过可以尝试加--allow-warnings
忽略警告.
1
| $ pod repo push MyPrivateSpecs DCPrivatePods.podspec
|
在自己项目中引用私有库,执行pod install
完成!
1
2
3
4
5
6
7
| source 'https://github.com/CocoaPods/Specs.git'
source 'https://github.com/your_github_name/MyPrivateSpecs.git'
platform :ios, ‘8.0’
target “your_target_name” do
pod 'DCPrivatePods'
end
|
私有库依赖另一个私有库时, lint
、push
操作可能需要增加--sources
参数。用法如下:
1
| pod lib lint --sources=https://github.com/dsencheng/DCSpecs.git,https://cdn.cocoapods.org/ --use-libraries --allow-warnings --verbose
|
问题记录
在私有库中,引入第三方framework报如下错误
1
| ld: framework not found AliRTCSdk
|
解决办法:写完整路径。
1
| s.vendored_frameworks = 'AliModule/Classes/AliRTCSdk.framework'`
|
验证私有库时报错
1
| ERROR | [iOS] xcodebuild: Returned an unsuccessful exit code. You can use `--verbose` for more information.
|
解决办法
报错信息
1
2
3
4
| Showing All Messages
:-1: Multiple commands produce '/Users/dsen/Library/Developer/Xcode/DerivedData/Ali-dufrvubbsfygbsfskqpkqsmffkhv/Build/Products/Debug-iphonesimulator/Ali/Ali.framework/Info.plist':
1) Target 'Ali' (project 'Pods') has copy command from '/Users/dsen/GitHub/Ali/Ali/Classes/UTDID.framework/Info.plist' to '/Users/dsen/Library/Developer/Xcode/DerivedData/Ali-dufrvubbsfygbsfskqpkqsmffkhv/Build/Products/Debug-iphonesimulator/Ali/Ali.framework/Info.plist'
2) Target 'Ali' (project 'Pods') has process command with output '/Users/dsen/Library/Developer/Xcode/DerivedData/Ali-dufrvubbsfygbsfskqpkqsmffkhv/Build/Products/Debug-iphonesimulator/Ali/Ali.framework/Info.plist'
|
解决办法
1
| 去掉 Pods > Project > Build Setting > Valid Architectures > x86_64
|
报错信息
1
| does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE)
|
解决办法
1
| 在xxx_Example 中修改 enable bitcode = false
|
报错信息
1
| no rule to process file
|
解决办法
1
2
3
4
| s.source_files = 'AliModule/Classes/**/*'
修改为
s.source_files = 'AliModule/Classes/**/*.{h,m}'
忽略其他类型文件
|
报错信息
1
| ERROR | [iOS] file patterns: The `vendored_frameworks` pattern did not match any file.
|
解决办法:暂无
报错信息
1
2
3
4
5
6
| [!] Unable to find a specification for `DCView` depended upon by `DCLib`
You have either:
* out-of-date source repos which you can update with `pod repo update` or with `pod install --repo-update`.
* mistyped the name or version.
* not added the source repo that hosts the Podspec to your Podfile.
|
解决办法
写错了 source
,应该写Spec的地址,错写了lib库的地址。
pod lib lint
出现i386 x86_64模拟器问题
1 加命令参数pod lib lint --skip-import-validation
2 podspec添加参数
s.pod_target_xcconfig = { 'VALID_ARCHS[sdk=iphonesimulator*]' => '' }
s.pod_target_xcconfig = { 'ARCHS[sdk=iphonesimulator*]' => '$(ARCHS_STANDARD_64_BIT)' }