题库基础库,支持富文本,支持多种题型

用法:
Podfile 中添加
source 'https://github.com/CocoaPods/Specs.git' # 官方库
source 'https://github.com/QinKingHan/BX_Podspec_Repo.git' # 私有库

pod 'TiKuBaseModulesRepo', '~> 0.3.0'

最后 pod install

截图:
未命名.gif

私有库创建

1: 创建两个repo 一个放项目 一个放spec

'分别初始化git'
cd TiKuBaseModulesRepo/SL_Specs_Repo
echo "# InitPodFrameWork" >> README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin git@github.com:JeeneDo/InitPodFrameWork.git
git push -u origin master

2: 关联私有源到远端

pod repo add BX_Podspec_Repo https://github.com/JeeneDo/BX_Podspec_Repo.git

此时如果成功的话进入到 ~/.cocoapods/repos 目录下,就可以看到SL_Spec_Repo这个目录了。至此第一步创建私有Spec Repo完成。  这个是私有库的 文件夹 集合,里面放的是你建的各个私有库

3: 在TiKuBaseModuleRepo中初始化, 会生成一个podspec 文件

pod lib create TiKuBasdeModulesRepo
pod lib create BaseClassModulesRepo

4: 编辑/校验podspec

pod lib lint --allow-warnings --use-libraries //验证 pod 和 podspec代码是否编译通过
--use-libraries // 第三方lib 要加上
// podspec
soure:->  http://172.16.117.224/zhangxinxin02/TiKuBaseModulesRepo.git

5: 将配置完代码仓库 和 podspec 将代码同步Git


git add .

git commit -m '编辑.podspec and Example and Pod Class'

git remote add origin ssh://git@172.16.117.224:39876/zhangxinxin02/TiKuBaseModulesRepo.git

git pull origin master --allow-unrelated-histories

git push origin master

git tag -m "first release" 0.1.0  
<tag 一定要和Spec文件一样,每次改动都要 pod lib lint 进行校验 同时tag加1>

git push --tags

6: 把Spec 推送到远端的私有源仓库


pod repo push BX_Podspec_Repo  TiKuBaseModulesRepo.podspec  --allow-warnings --use-libraries --verbose

执行成功后
pod search TiKuBaseModulesRepo
如果发现搜索不到刚才的组件 rm ~/Library/Caches/CocoaPods/search_index.json
'同时也会推送到 spec 的repo'

以上流程要分清 spec 和 repo. 同时注意名字不要混

7: 使用

source 'https://github.com/CocoaPods/Specs.git'  # 官方库
source 'https://github.com/JeeneDo/BX_Podspec_Repo.git'   # 私有库
platform :ios, '7.0'

8: 日常更新维护

1:   代码更新:

1.1: 修改Sepc 并
pod lib lint --allow-warnings --use-libraries // 确认

//引入第三私有 
pod lib lint --allow-warnings --use-libraries --sources='https://github.com/JeeneDo/BX_Podspec_Repo.git,https://github.com/CocoaPods/Specs.git'

//OC Swift 混编去掉--use-libraries 但这样会引起其他问题
pod lib lint --verbose --allow-warnings --swift-version=4.0 --sources='https://github.com/JeeneDo/BX_Podspec_Repo.git,https://github.com/CocoaPods/Specs.git'

//d.同时依赖了第三方静态库和第三方非静态私有库
pod lib lint XGCommonView.podspec --sources='http://git.ops.com/XGN-IOS/xgn.git,https://github.com/CocoaPods/Specs.git' --use-libraries --allow-warnings --no-clean

//依赖了第三方非静态私有库
pod lib lint XGCommonView.podspec --sources='http://git.ops.com/XGN-IOS/xgn.git,https://github.com/CocoaPods/Specs.git'  --allow-warnings --no-clean

//b.依赖了第三方静态库
pod lib lint XGCommonView.podspec --use-libraries --allow-warnings --no-clean


打开你的xx.podspec文件,将原本的版本号改为0.2.0,与刚刚的tag保持一致。
(如果代码确定没有问题的话,就不需要pod lib lint,直接执行第4步)


1.2 
git add .
git commit -m '更新描述'


2: 代码库版本更新
git tag -a '新版本号' -m '注释'
git push --tags


3: 私有库更新索引库
pod repo push 索引库名称 xxx.podspec --allow-warnings
pod repo push BX_Podspec_Repo  TiKuBaseModulesRepo.podspec  --allow-warnings --use-libraries --verbose 
pod repo push BX_Podspec_Repo  BaseClassModulesRepo.podspec  --allow-warnings --use-libraries --verbose



4:  别的电脑可以用pod repo update命令来使用仓库 (也可以用pod repo update 仓库名来更新指定仓库)

  • 遇到的问题

    • 找不到 libxml2.dylib

      • 按照网上流程引入libxml2

        • 注意这个import <libxml/tree.h> 只能在项目中编程,直接拖到Pod中编译会报错。真坑

        • 在 .xcconfig 设置环境 虽然编译通过了,但是pod lib lint 失败。

          • 原因是.xcconfig 是不会push到远端的。解决方法在Podspec 中添加

            s.xcconfig = { 'HEADER_SEARCH_PATHS' => "$(SDKROOT)/usr/include/libxml2" }

            • Podspec 的配置
          # ――― 代码文件 ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #  
            # 代码文件匹配,**指匹配任意文件夹,*.{h,m}指匹配任意.h和.m文件
            s.source_files  = "Classes", "Classes/**/*.{h,m}"  
            s.exclude_files = "Classes/Exclude"  
            # SDK需要暴露的.h文件,默认暴露所有
            # s.public_header_files = "Classes/**/*.h"  
                
          # ――― 资源路径 ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #  
             #s.source           = { :git => 'http://172.16.117.224/zhangxinxin02/TiKuBaseModulesRepo.git', :tag => s.version.to_s }
          
            # 指定资源,比如xib,图片等资源都是
            # s.resource_bundles = {
              'XXXKit' => ['XXXKit/Classes/**/*.{storyboard,xib,cer,json,plist}','XXXKit/Assets/*.{bundle,xcassets,imageset,png}']
            }
          
            # s.resource_bundles = {
              'LazyTableViewModel' => ['Assets/*.png']
            }
          
           # ――― 系统库依赖以及静态库―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― 
            # s.framework  = "UIKit"  
            # s.frameworks = "UIKit", "AnotherFramework"  
            # s.library   = "iconv"  
            # s.libraries = "iconv", "xml2" , 'c++' < 用于.mm 文件>
          
          # ――― 其他三方库依赖 ――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #  
          
            # Pod 引入的
            # 比如你的SDK依赖AFNetworking,注意这里和podfile中的语法不同在于,这里无法指定其他依赖的具体路径
            # 比如这种写法就不支持 s.dependency 'XMPPFramework', :git => "https://github.com/robbiehanson/XMPPFramework.git", :branch => 'master'
            # s.dependency "AFNetworking", "~> 3.0"  
          
            # 手动引入的第三方framework
            # s.vendored_frameworks = 'vendors/IJKMediaFramework.framework'
            # s.vendored_libraries = 'ProtocolBuffNetWorking/StaticLib/*.a'
          
            # swift 要指定版本
            s.swift_version = '5.1'
            s.pod_target_xcconfig = { 'SWIFT_VERSION' => '5.1' }
                
           # ――― Xcode配置相关 ――――――――――――――――――――――――――――――――――――――――――――――――――――――――― 
            # s.xcconfig = { 'HEADER_SEARCH_PATHS' => "$(SDKROOT)/usr/include/libxml2" }
                
            # spec.user_target_xcconfig = { # 'CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES' => 'YES' }
                
            # s.pod_target_xcconfig = { 'ENABLE_BITCODE' => 'NO' }
          
          
  • 文件结构问题处理

    • TiKuBaseModulesRepo/Classes 放实体文件,在 Example 引用这些文件进行编译(在pod也可以但是Example 可以建几个文件夹进行分类。便于理解)
      • 上面两种创建方式不同 Target 也不同。避免踩坑 还是在Pod建立吧
  • fatal: 远程分支 0.1.8 在上游 origin 未发现

    • 这个一般就是tag 打错了。重新打一个就行
  • 不能在项目·中直接改动POD 改动后调试有异常。无法正确调试

  • 本地私有库 ** (一般用到打包私有静态库**)

    • podFile 改为

          pod 'TiKuBaseModulesRepo', :path => File.expand_path("../..", Dir.pwd)+'/TiKuGit/TiKuBaseModulesRepo'
      
          pod 'BaseClassModulesRepo', :path => File.expand_path("../..", Dir.pwd)+'/TiKuGit/BKX_BaseClassModule'
      
    • 将处理好的文件夹放到和项目同一个目录下

    • 基本完成了,这时引入文件会报错。在 Build Setting — Header Search Paths 中将Development Pods下面的文件家拖入即可

    • pod 打包静态库/动态库

      pod package POPModulesRepo.podspec --force --no-mangle --exclude-deps --spec-sources=https://github.com/JeeneDo/InitPodFrameWork.git,https://github.com/CocoaPods/Specs.git
      
      pod package YYKitModulesRepo.podspec --force --no-mangle --exclude-deps --spec-sources=https://github.com/JeeneDo/YYKitModulesRepo.git,https://github.com/CocoaPods/Specs.git
      
      '遇到的问题
      
      '打包出来的framework 引入后报错找不到'
      解决: 将framwork 目录结构和正常的弄成 一样。特别是'modules.modulemap 里面的东西 才是主要
      这里加入引入的头文件
      
      '引入问题
      'swift 
      - 单个文件 引入 import YYKitModulesRepo, 
      - '全局'引入在 XXX-Bridging-Header.h 加入#import <AfnAndSDWebRepo/AfnAndSDWebImageHeader.h>
      
      OC中  
      - #import <YYKitModulesRepo/YYModel.h>
      
      '最好自己创建一个 头文件来引入各个类', 这样打成framework后只用在modules.modulemap 添加引入就可以了
      
      'duplicate symbol _OBJC_CLASS_$_PodsDummy_Pods_packager'
      Fixed by appending --no-mangle --exclude-deps
      
      
      • 测试步骤
        • 修改引入afn 代码 查看编译时间 记录下来,并记录当前包大小

        • 将afn 封入自己创建的私有pod库中,并进行打包成动态库

        • 删除项目中afn代码,引入afn-framework。

        • 重复第一步,并比较编译时间和包大小

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

推荐阅读更多精彩内容