关于发布github开源框架

iOS github 框架


当用CocoaPods管理iOS工程内部第三方开源框架时,不仅为开发带来了很大方便,而且也让组件化开发成为了一种不错的开发方式,即把所有组件以框架的方式交由CocoaPods管理,再统一集成进项目,不仅提高了开发效率,而且项目架构也十分清晰明了。
这里先说说使用CocoaPods发布开源框架的步骤,和一些出现的问题。

准备

首先,让自己的电脑具备在github上具备开发框架的能力,终端输入以下命令:

// 这里输入的邮箱是你注册**github**的邮箱,当然如果没有注册github就先注册一个
// 后面是开发者昵称,最好也跟注册**github**的名字是一样的,否则后面上传的时候找不到
pod trunk register 你的邮箱 "你的名字"

注册完成往后,会收到邮件,复制链接,打开后,会出现一个注册成功的图片,如果不成功,则重新检查注册即可。然后,终端输入以下命令:

pod trunk me

这一步终端就会打印你注册的信息。

创建远程代码仓库

然后,打开github,点击+,点击New repository,如下图,其中标记内容为必填:

创建仓库.png

如此,远程代码仓库创建完成,copy链接:

copy地址.png

并打开终端,在存放框架的目录下,输入以下命令:

git clone 链接

创建工程

然后打开Xcode创建新工程,在工程文件夹目录下创建与框架同名的的文件夹,用来存放框架源文件,与工程文件同级,并创建测试代码文件,OC就创建xx.h和xx.m,Swift就创建xx.swift即可。
返回上级目录,即工程目录同级,先提交代码仓库,命令如下:

git add .
git status
git commit -m "创建测试工程"
git push origin master
git tag "0.0.1"
git push --tags

生成spec文件,输入以下命令:

pod spec create https://工程地址(或者是框架名称)

配置spec文件

配置spec.png

用Xcode打开spec文件,配置spec文件比较容易出错,配置文件如下:

Pod::Spec.new do |s|
# 如果是开源框架的话,以下保留属性就足够了
  s.name         = "TCPageView"
  s.version      = "0.0.2"
  s.summary      = "一个功能不错的选项视图"
  s.homepage     = "https://github.com/TardisCXX/TCPageView"
  s.license      = "MIT"
  s.author             = { "TardisCXX" => "email@address.com" }
  s.platform     = :ios, "8.0"
# 这里的tag是远程仓库工程标签,可以直接修改,但应该和提交的标签一致,也可以不要"",直接写s.version
  s.source       = { :git => "https://github.com/TardisCXX/TCPageView.git", :tag => "#{s.version}" }
# 源文件路径,在本地话,就是源文件文件层次,下面是Swift框架,如果是OC就应该是s.source_files  = "TCPageView", "TCPageViewProject/TCPageView/*.{h,m}"
  s.source_files  = "TCPageView", "TCPageViewProject/TCPageView/*.swift"
  s.requires_arc = true
# 如果是Swift这一句要加上,如果是OC这一句就不需要了,当然如果还有使用的库,就用s.frameworks = "", "",...
  s.framework  = "UIKit"
# 如果有依赖库的话,还得加上s.dependency "JSONKit"
end

command + s保存,然后验证spec文件,命令如下:

pod spec lint 或者 pod lib lint

如果验证成功,则执行下面命令:

pod trunk push

可能出现的问题1

如果提交成功,,然后执行命令:

pod search 框架名

如果搜索到,那么恭喜你,你可以开发框架了,如果没搜索到,那么如下:

pod setup

如果还不能search到,那么找到以下路径:

~/Library/Caches/CocoaPods 

然后删除目录下的search_index.json文件,然后继续输入命令:

pod search 框架名

可能出现的问题2

在生成spec文件的时候,会出现以下一个问题:

[!] Unable to fetch data for `TardisCXX/TCNewFeatureView`

重新删除创建的工程,然后推送到远程仓库,再生成spec文件

可能出现的问题3

1. 验证spec文件的时候,出现一个问题:

- ERROR | [iOS] xcodebuild: Returned an unsuccessful exit code. You can use `--verbose` for more information.

解决办法,那么就输入:

pod spec lint --verbose

2. 验证spec文件的时候,出现一个问题2:

- ERROR | [iOS] xcodebuild: Returned an unsuccessful exit code.

解决办法,那么就输入:

pod spec lint --no-clean

如果还是解决不了,不防输入:

echo "3.0" > .swift-version

3. 验证spec文件的时候,出现一个问题3:

- ERROR | license: Sample license type.

解决办法,删除license属性的(example)

4. 验证spec文件的时候,出现一个问题4:

- WARN  | source: Git sources should specify a tag.

解决办法,有一个没有打标签的错误,这个只是一个警告,如果没有打标签,就先打个标签

5. 验证spec文件的时候,出现一个问题5:

[!] The validator for Swift projects uses Swift 3.0 by default, if you are using a different version of swift you can use a `.swift-version` file to set the version for your Pod. For example to use Swift 2.3, run: 
    `echo "2.3" > .swift-version`:

解决办法,直接运行:

echo "2.3" > .swift-version

6. 验证spec文件的时候,出现一个问题6:

- ERROR | [iOS] file patterns: The `source_files` pattern did not match any file.

解决办法,重新检查下s.source_files源文件目录层次,修改后再次运行,如果还是报错,那么 open 或者 手动打开 以下路径:

/Users/电脑名/Library/Caches/CocoaPods/Pods/External/5f222008c0986b8da6c0672944111053-3cfc4

一直到最后文件夹中,就会看到没有源文件,那么我们手动创建,即把已经创建好的源文件按照spec文件配置层次,拖进去即可,当然不需要工程文件!!!然后再次验证:

pod spec lint

就会成功,如果还不成功,重新打标签,或者删除工程文件、删除spec文件,重新来过!!!
当验证成功后,需要把spec推送到github,执行以下命令:

pod trunk push

当然还有一些问题,就是你的ruby版本太低,请更新即可。

最后

以上只是我遇到的一些问题,有所疏漏在所难免,希望大家帮我查缺补漏,谢谢。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,969评论 19 139
  • 目前比较流行的组件化开发,针对多个 app 要用同一套代码,将其做成 pod 仓库是比较好的解决方案。代码只有一份...
    ripperhe阅读 5,450评论 8 39
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,422评论 25 708
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,959评论 6 342
  • Ariel的世界阅读 139评论 0 0