cocoapods 私有库创建时遇到的问题

        在创建 cocoapods 私有库时遇到很多坑,在网上找来找去超级麻烦,毕竟每个人遇到的问题都不一样。现在将我做的流程与遇到的坑整体都列出来,一是防止以后再遇到,二是希望能对遇到相同问题的有个帮助。很多具体的内容

主要参考:

1. https://www.jianshu.com/p/0c640821b36f

2.http://www.cocoachina.com/ios/20150228/11206.html

3.http://guides.cocoapods.org/syntax/podspec.html#specification

解决问题的主要途径:

stackoverflow

创建流程:

1. 创建私有Spec Repo

        1.1 首先创建一个 git 仓库(gitHub,Bitbucket,gitLab,coding,gitee,CSDN Code),权限选择私有仓库。如果有MIT选项,选中。

        1.2 将远程版本库添加到本地:pod repo add MyRepo https://xxx.git (创建好的Repo仓库)

        repo 是 repository (仓库)的缩写。其中 MyRepo 就是个人的私有版本库,名称可以自己定义。

        1.3 成功执行完上一步后, 在 finder 跳转到 ~/.cocoapods/repos 目录下可以看到MyRepo版本库。可以看到与 MyRepo 同级有一个 Master 版本库,这个是git默认的开源版本库。

2. 创建代码库

        2.1 同1.1

        2.2 可以使用常规创建项目方法, 将远程代码库添加到本地:git clone xxx.git TestCode,切换到该文件夹路径下

            2.2.1 创建项目 

            2.2.2 创建 .podspec 文件:$ pod spec create 项目名

            2.2.3 创建 .swift-version:  $ echo"2.3"> .swift-version

        2.3 也可以使用 $ pod lib create TestCode 创建

            2.3.1 创建项目

            2.3.2 选择相关信息:平台 、 语言 、 Demo 、 测试框架 、 界面测试 、 类前缀,根据需求选择。

            2.3.3 添加git :$ git remote add origin http://xxx.git

            2.3.4 拉取更新:$ git pull origin master --allow-unrelated-histories 也是与远程库产生联系

        2.4 修改 .podspec 文件: 

        Pod::Spec.new do |s|

          s.name        = "TestCode" # 项目名称

          s.version      = "0.0.1"        # 版本号 与 你仓库的 标签号 对应

          s.license      = { :type => "MIT", :file => "LICENSE" } # 开源许可证

          s.summary      = "desc" # 项目简介

          s.homepage    = "http://git.com/xxx" # 仓库的主页

          s.source      = { :git => "http://git.com/xxx.git", :branch => 'master', :tag => "#{s.version}" } #你的仓库地址,不能用SSH地址

          s.source_files = "TestCode/*.{h,m}" #  代码的位置

          s.requires_arc = true # 是否启用ARC

          s.platform    = :ios, "7.0" #平台及支持的最低版本

          # s.xcconfig = { 'OTHER_LDFLAGS' => '-Objc -all_load -fobjc-arc' ,'ENABLE_BITCODE'  => 'NO'} # target的相关设置

          s.author            = { "author" => "xxx.com" } # 作者信息, 开源上线后可能发送邮件

          # s.frameworks  = "UIKit", "Foundation" #支持的框架

          # s.resources    = "*.bundle" # 资源文件

          # s.dependency  = "AFNetworking"  # 依赖库,有多少依赖库就写多少 s.dependency

          # s.dependency 'AFNetworking',  '~> 3.0'  # 可以指定版本

        2.5 需要添加resource 则取消 s.resources 注释,在Assets加入资源并执行 pod install

        2.6 验证 .podspec 是否正确  pod lib lint 

        如果报警告而不是错误,可以使用  pod lib lint  --allow-warnings

        2.7 通过后显示 TestCode passed validation.

3. 上传代码

        3.1 修改代码完成后,修改项目中的版本与.podspec中的s.version版本

        3.2 pod lib lint  // 检查.podspec及代码是否有错误,如果有错误不能提交

               git add .  // 缓存修改

               git commit -m "desc" // 标记

               git tag "新的版本号" // 打标签

               git push --tags // 推送到远程仓库 (git push origin master --tags)

               pod repo push MyRepo TestCode.podspec // 修改版本仓库

        3.3 如果没有报错则全部提交成功

4. 使用私有库

        4.1 使用时需要在Podfile顶部中加入: 

        source 'https://xxx/MyRepo.git'

        source 'https://github.com/CocoaPods/Specs.git'    

        4.2 在podfile中引入需要使用的私有库,然后正常使用

遇到的问题:

验证仓库是否正确时

$ pod lib lint

1. 报错:description: The description is empty.

在 podspec 文件中 s.description 没有内容,如果不需要,那么注释掉

2. 报错:file patterns: The 'source_files' pattern did not match any file.

在 podspec 文件中 s.source_files 文件路径有误,这个路径是相对 .podspec 文件的,如果是与 .podspec 同级别的, 那么只需要写文件夹名称即可

s.source_files = "文件夹"

如果有多级,要完全按照路径来写

s.source_files = "文件夹/*.{h, m}"

s.source_files = "文件夹/**/*.{h, m}"

或者直接使用

s.source_files = "文件夹"

3. 报错:unknown: Encountered an unknown error (/usr/bin/xcrun simctl list -j devices

xcrun: error: unable to find utility "simctl", not a developer tool or in PATH) during validation.

原因是 Xcode 模拟器找不到,需要获取 Xcode 路径。

sudo xcode -select -switch /Applications/Xcode9.app/Contents/Developer

(常规路径是这个,即 Xcode 在应用程序中。如果不在或者有多个 xcode 需要根据修改 xcode 的路径)

4. 报错:license: Unable to find a license file

创建私人仓库时, 在验证时可能会找不到 MIT LICENSE证书。将 s.license ="MIT" 修改为,指定文件s.license = { :type=>"MIT", :file=>"LICENSE"}

如果是本身就没有MIT LICENSE证书,可以创建一个文件,命名为LICENSE。内容为:

Copyright (c) 20XX-20XX TestCode Software Foundation (http://XXX)Permission is hereby granted, free of charge, to any person obtaining a copyof this software and associated documentation files (the "Software"), to dealin the Software without restriction, including without limitation the rightsto use, copy, modify, merge, publish, distribute, sublicense, and/or sellcopies of the Software, and to permit persons to whom the Software isfurnished to do so, subject to the following conditions:The above copyright notice and this permission notice shall be included inall copies or substantial portions of the Software.THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS ORIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THEAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHERLIABILITY, 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 INTHE SOFTWARE.

将文中的时间、项目名与地址替换掉即可。

5. 报错:warning: Could not find remote branch 版本号 to clone. fatal: Remote branch 版本号 not found in upstream origin.

可能是s.version 与git tag版本号不一致、没有上传版本号或者git push 的时候没有添加--tags。

6. 如果报警告错误又不想处理可以使用 $ pod lib lint --allow-warnings 验证

7.报错:[!] The repo `MyRepo` at `../../../../.cocoapods/repos/MyRepo` is not clean

执行:$ pod repo update MyRepo

再次执行更新命令,如果还不可以那么先删除原有的版本库再重新安装版本库,然后执行更新命令

$ pod repo remove MyRepo

$ pod repo add MyRepo https://xxx.git 

$ pod repo push MyRepo XXX.podspec

8.报错:[!] The `xxx.podspec` specification does not validate. 但是没有ERROR

执行:pod repo push MyRepo xxx.podspec --verbose --use-libraries --allow-warnings

9.报错: ERROR | [iOS] unknown: Encountered an unknown error (undefined method `path' for nil:NilClass) during validation.

将 .podspec 中 s.source_files = 'Pod/Classes/**/*’ 改为 s.source_files = 'Pod/Classes/**/*.{c,h,hh,m,mm}'

10. 报错: fatal error: could not build module 'CoreFoundation'

见了鬼了,pod lib lint 检测到 pod spec lint 检测全都正确,结果到pod repo push MyRepo xx.podspec 时遇到了这个问题,还不是在正常的输入里显示,而是在很上面的日志中提示的,有很多,包括 Foundation。

将 .podspec 中 s.frameworks = 'UIKit', 'Foundation', 'CoreFoundation' 再次提交后上传。

需要添加资源

执行 pod install 添加 bundle

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

推荐阅读更多精彩内容