iOS 创建自己的开源库

概要

  1. 创建开源库主要的坑在于编辑.podspec文件,基本正确编辑该文件就没问题了
  2. 如果熟练之后可以继续学习创建私有库
  3. 如果你的开源库依赖其他的非系统库,请参考该文章参考文章

1. 参考文章:


2. 坑

(1) 注意不要出现拼写错误

(2) 如何正确编写.podspec文件,请参考下面的教程

(3) could not remote branch (没有找到远程分支)

可能是tag或者当前分支对应错误

(4) [!] 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就好了

(5) cocoapods There was a problem validating the URL

可以忽略,继续验证就没了

(6) ERROR | [iOS] unknown: Encountered an unknown error (784: unexpected token at '2017-04-04 23:20:32.069 simctl[10414:1077354] CoreSimulator detected Xcode.app relocation or CoreSimulatorService version change. Framework path (/Applications/Xcode.app/Contents/Developer/Library/PrivateFrameworks/CoreSimulator.framework) and version (375.20) does not match existing job path (/Applications/Xcode.app/Contents/Developer/Library/PrivateFrameworks/CoreSimulator.framework/Versions/A/XPCServices/com.apple.CoreSimulator.CoreSimulatorService.xpc) and version (338.16). Attempting to remove the stale service in order to add the expected version.

') during validation.

重新发布一下就好,没有影响

(7) [!] Unable to accept duplicate entry for: openLibraryDemo (2.0.0)

一般是因为podspec中的版本号有问题

(8) 注册时收不到验证邮件

使用163邮箱可能会收不到验证邮件,使用qq邮箱可以避免这个问题

(9)注意无论是第一次发布,还是之后发布更新,最后两步一定验证podspec文件和发布到cocoapods的操作,打tag一定在验证podspec之前,否则很容易出现上面的第三个坑


3. 创建自己的开源库

流程简介
  1. 创建一个framework工程,把需要的代码放到该工程里
  2. 创建一个git库用于托管开源库的代码
  3. 注册cocoapods(trunk)
  4. 创建并编辑.podspec文件
  5. 创建并编辑license文件
  6. 将所有文件上传git
  7. 打tag
  8. 验证.podspec文件
  9. 发布
  10. 验证是否发布成功
详细流程
1. 创建一个framework工程,并复制需要开源的代码放到这里面
  • 目前笔者使用Single View Application项目测试未成功过,不知道是否可以,如果有知晓的读者请告知!!!
  • 这里需要注意要创建的不是Single View Application项目,是cocoa Touch Framework项目
2. 创建一个git仓库用于托管这个开源库的代码
  • 创建方式参考这里
  • 注意第一个Add选Objective-C,第二个Add需要选择MIT License
3. 注册cocoapods(trunk)

(1) 注册trunk需要cocoapods 0.33版本以上

  • 查看当前pod版本

    pod --version

  • 具体如何升级请百度谷歌

(2)查看是否已经注册,如果已经注册就省略注册trunk这步就好,如果已经注册就会显示注册信息,例如名字或者邮箱账号等

pod trunk me

(3)注册trunk,此处注意不要用163邮箱注册,有收不到确认邮件的问题,我用的是qq邮箱,确认邮件收取非常快

  • 不要使用163邮箱注册,否则可能会收不到注册确认的邮件,我使用的qq邮箱,收取确认邮件非常快

  • 使用--verbose可以在终端查看debug信息

    pod trunk register testMail@qq.com "testName" --verbose

(4)然后去邮箱里面的确认邮件里点击一下链接就完成了整个注册流程

4. 创建并编辑.podspec文件

(1) 首先cd到你刚才创建的项目目录中,然后创建.podspec文件

  • testProject是你的开源库项目的名称

    pod spec create testProject

(2)编辑.podspec文件

  • 记得把注释删掉,就是#后面的内容

  • 解释一下每个key的含义

    s.version:版本号
    s.ios.deployment_target:支持的pod最低版本
    s.summary: 简介
    s.homepage:项目主页地址
    s.license:许可证
    s.author:作者
    s.social_media_url:社交网址,这里我写的微博默认是Twitter,如果你写Twitter的话,你的podspec发布成功后会@你
    s.source:项目的地址
    s.source_files:需要包含的源文件
    s.resources: 资源文件
    s.requires_arc: 是否支持ARC
    s.dependency:依赖库,不能依赖未发布的库
    s.dependency:依赖库,如有多个可以这样写

  • 几个特殊key的写法

          s.dependency   'AFNetworking' 
          s.license= { :type => "MIT", :file => "LICENSE" }
          s.source_files  = "threeLibTestDemo2/*"
          或者s.source_files  = "threeLibTestDemo2/\*\*/\*"
          s.source       = { :git => "https://github.com/liquangang/threeLibTestDemo2.git", :tag => "#{s.version}" }
    
  • 注意这个位置是图中的写法

  • 示例文件(threeLibTestDemo2是测试开源库的名字)

    Pod::Spec.new do |s|
            s.name         = "threeLibTestDemo2"
            s.version      = "1.0.3"
            s.ios.deployment_target = '7.0'
            s.summary      = "私有库测试demo"
            s.description  = <<-DESC     
                                   threeLibTestDemo2 是一个用于测试的demo                                     
                                DESC
            s.homepage     = "https://github.com/liquangang/threeLibTestDemo2"
            s.license      = { :type => "MIT", :file => "LICENSE" }
            s.author       = { "liquangang" => "sgliquangang@163.com" }
            s.source       = { :git => "https://github.com/liquangang/threeLibTestDemo2.git", :tag => "#{s.version}" }
            s.source_files  = "threeLibTestDemo2/**/*"
    end
    
5. 创建并编辑license文件

(1) 在创建git仓库的时候如果选择了创建MIT文件的话,这一步就可以跳过了,就是下图中选择了MIT License就需要这一步的操作了

(2) 创建license文件

touch LICENSE

(3) 编辑LICENSE文件

  • 只需要把前面的版权改一下就好,其余的赋值就行

  • 示例文件(threeLibTestDemo2是测试开源库的名字,链接去git里面复制)

       Copyright (c) 2011-2016 threeLibTestDemo2 Software Foundation (https://github.com/liquangang/threeLibTestDemo2/)
    
       Permission is hereby granted, free of charge, to any person obtaining a copy
       of this software and associated documentation files (the "Software"), to deal
       in the Software without restriction, including without limitation the rights
       to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
       copies of the Software, and to permit persons to whom the Software is
       furnished to do so, subject to the following conditions:
    
       The above copyright notice and this permission notice shall be included in
       all copies or substantial portions of the Software.
    
       THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
       IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
       FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
       AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
       LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
       OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
       THE SOFTWARE.
    
6. 将所有文件上传git
7. 打tag
  • 此tag与xcode里面的version无关,跟分支和podspec文件版本号有关

  • 打tag

    git tag 1.0.0

  • 将tag推送到远程仓库

    git push origin 1.0.0

8. 验证.podspec文件
  • --verbose 如果验证失败会报错误信息(threeLibTestDemo2测试开源库名字)

    pod spec lint threeLibTestDemo2.podspec --verbose

  • 这里可能会有很多错误,基本上根据意思就能解决,基本都是.podspec编辑的问题,没有按照官方要求去编写的问题

9. .podspec 验证成功后就可以发布了
  • 发布命令

    pod trunk push YJSettingTableView.podspec

  • 终端里会显示发布成功或者失败,一般上面两个需要编辑的文件验证通过了就会成功,没成功终端也会报错,这里笔者没有遇到坑。

10. 验证是否发布成功
  • 本地新建一个Single View Application项目
  • 然后pod导入自己刚才的开源库
  • 写几个方法进行测试就知道是不是最终彻底陈成功了

4. 更新自己的开源库

具体步骤
1. 第一步有两种选择,可以选择新分支去编写代码,也可以继续在主分支编写代码,下面是详细教程:

1) 创建分支的方法

  • 创建自己的分支并修改podspec文件中的版本号为分支的版本号

    • 注意命名是想更新的版本号的名字
    • 注意要先创建分支然后编写代码,否则无法正确提交
    • 这里只需要修改版本号位新分支的版本号即可(也就是新分支的名字)
    • 参考这篇文章创建分支
  • 编写代码并提交到这个分支然后合并到主分支

2) 依然在主分支进行更新

  • 修改podspec文件中的版本号为需要更新的版本号
  • 编写代码并提交到主分支中
3. 然后创建一个新的git tag
  • 步骤与上面的打tag相同
  • 新的tag就是新分支的版本号(新分支的名字)
4. 验证.podspec文件,命令同上面
5. 然后发布自己的修改到cocoapods, 发布命令同上面
6. 更新使用这个库的项目就可以正常使用了
相关推荐
热爱跑步的恒川5 小时前
【论文复现】基于图卷积网络的轻量化推荐模型
网络·人工智能·开源·aigc·ai编程
ClkLog-开源埋点用户分析9 小时前
ClkLog企业版(CDP)预售开启,更有鸿蒙SDK前来助力
华为·开源·开源软件·harmonyos
2401_8658548810 小时前
iOS应用想要下载到手机上只能苹果签名吗?
后端·ios·iphone
funnyZpC11 小时前
quartz集群增强版🎉
java·分布式·开源·集群·定时任务
vvw&18 小时前
如何使用Netdata部署高性能的服务器监控平台
linux·运维·服务器·docker·开源·服务器监控·netdata
HackerTom1 天前
iOS用rime且导入自制输入方案
ios·iphone·rime
良技漫谈1 天前
Rust移动开发:Rust在iOS端集成使用介绍
后端·程序人生·ios·rust·objective-c·swift
2401_852403551 天前
高效管理iPhone存储:苹果手机怎么删除相似照片
ios·智能手机·iphone