iOS - 组件化开发

零、一些小命令

    git tag -a 0.0.1 -m “Release version 0.1.3″
    -a 0.0.1是增加 名为0.0.1的标签
    -m 后面跟着的是标签的注释

    git push origin --tags
     提交标签到远程服务器上

    pod init ///创建podfile

    pod lib create JHCSpec /// 创建私有库
    pod repo add GGSpec https://gitee.com/XXX  ///创建私有库并关联地址
    pod repo update XXXXXmerios-cocoapods  更新私有源
    pod update --no-repo-update      

    pod lib lint --allow-warnings          ///验证本地 pod 配置是否正确        
    pod spec lint --allow-warnings      ///验证远端 pod 配置是否正确
    ///其中--allow-warnings 参数代表忽略警告,如果你的代码在编译时有警告,如果不加这个参数就会报错。

    .ruby文件里面打印 :
        puts '哈哈哈'
        print '哈哈哈'        
        puts "#{LOTUS_TARGET.name}哈哈"

一、组件架构(待更新)

  1. 创建本地私有库

    1)查看本地私有库

     pod repo
    

    2)创建远程spec私有仓库<github,ggitlab等,要选择readme初始化>,此步不做表述,复制链接https://gitee.com/zhugemo/GGSpec.git

    3)创建私有的repo仓库,并通过pod repo查看是否生成

     pod repo add GGSpec https://gitee.com/zhugemo/GGSpec.git
    
图片.png

二、创建单独组件

  1. 创建仓库:在github或者gitlab上创建仓库


    图片.png
  2. 创建对应的本地文件LCGeneral<不用到壳工程目录>:

     pod  lib create LCGeneral
    
  3. cd到本地文件目录下,将仓库和本地文件A关联起来:

     <进到子组件下> git remote add origin 本地文件clone地址链接 
    
  4. 将本地文件推到仓库中去:

     git push --set-upstream origin master
       或者   
     git push --set-upstream origin main
    
  5. 到此步时候,组件已经创建好,可以进行后续的大操作(例:关联到壳工程、镜像到cocoapods等)

1)在壳工程里面的Pods - Podfile 里面Module部分把新增组件添加进去

2)更改子组件内容 ,改完提交修改内容

3)提交壳工程

三、关联到壳工程

  1. 创建一个项目,pod init 一个Podfile,接着随意导入个三方库,然后破的install,我们称之为壳工程

  2. 修改组件里面的.podspec文件的source地址和homepage地址,修改完后,cd到组件目录将其push到组件对应的远程仓库

  3. 在组件目录中,将组件的.podspec推送到第一步创建的私有库中,

     如果此命令找不到私有库的话,用下面指令<通过上面指令找到所有的source私有库并复制>
    
       pod repo push GGSpec 'GGGeneral.podspec' --sources='https://gitee.com/zhugemo/GGSpec.git,https://gitee.com/zhugemo/HHSpec.git,http://47.97.230.127:18080/LotusCustomeriOS/cocoapods.git,https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git,https://cdn.cocoapods.org/' --use-libraries --allow-warnings
    
     swift版本要特殊一些,新增 s.swift_version = '5.0', --use-modular-headers等
     如果因为文件路径问题,可调整目录地址顺序,例如:
       s.source_files = 'NNGeneral/Classes/**/*'
       s.prefix_header_file = "NNGeneral/Classes/Header/NNGeneral.h"
    
图片.png
  1. 在壳工程里面的Pods - Podfile文件里面,关联下自己的私有库地址方便pod install;
图片.png
图片.png
  1. 更改子组件重的相关代码<例:实现相关组件需求功能>,改完后提交该组件<add、commit、pull、push等操作>;

  2. 提交壳工程<add、commit、pull、push等操作>

四、组件打tag

旧版
     0)迁入fastlane命令文件
     1)注意Example里面的Scheme是否正确(非Tests)
     2)pod install 编译看下是否成功
     3)打tag  :fastlane release_pod version:0.1.5
新版:
  0)迁入Scripts命令文件
  1)python3 ../scripts/pod_publish.py <单个的,需要进入对应目录下>
     python3 ../scripts/project_pods_publish.py <工程的>

五、同一个git地址下多个spec

案例:https://github.com/dvlproad/CJUIKit.git

六、.podspec文件

image.png

七、.subspec管理功能模块

1.屏蔽s.source_files
image.png
1、s.version  设置该组件版本tag

2、s.source  设置该组件的指向路径

3、s.prefix_header_file  创建设置该组件的全局文件(例如 .pch 或者 .h )

4、s.resource_bundles  创建设置该组件的资源库(例如 .xcassets 或者 .json文件)

5、s.source_files  设置该组件的文件目录

6、s.framworks  设置该组件需要引用的系统framework (例如  s.frameworks='CoreLocation','CFNetwork' ,注意后缀需要去掉)

7、s.libraries  设置该组件需要引用的系统静态库 (例如 导入libz.tbd和libresolv.tbd 只需要导入 s.libraries = 'resolv','z')

8、s.ios.vendored_frameworks  设置引用导入到本组件中的三方framework

9、s.public_header_files 设置引用导入本组件中的三方库的头文件(例:s.public_header_files = 'LCLogin/Classes/JiYan/GTCaptcha4.framework/Headers/*.h')

10、s.ios.vendored_libraries  设置引用导入到本组件中的三方静态库 (例如 s.ios.vendored_libraries ='LCJiguang/libjverification-ios-8.1.2.a',命名注意需要增加前缀lib)

11、s.resource_bundles 设置生成ipa包里面的bundle文件;   
      在ipa根目录文件下生成LCLogin.bundle和GTCaptcha4.bundle    
     s.resource_bundles = {
          'LCLogin' => ['LCLogin/LCLogin/Assets/LCLogin.xcassets'],
          'GTCaptcha4' => 
         ['LCLogin/LCLogin/Assets/Resources/GTCaptcha4.bundle/*']
     }

12、s.ios.deployment_target  设置该组件的最低iOS版本支持

13、s.dependency 设置该组件需要依赖的三方组件/库

14、s.static_framework  设置该组件支持静态库 (例如 s.static_framework = true)

15、s.pod_target_xcconfig 设置该组件支持的指令集 (例如 s.pod_target_xcconfig = { 'VALID_ARCHS' => 'x86_64 armv7 arm64' })

16、s.subspec 设置该组件子组件

17、s.preserve_paths = 'YourComponent/**/*.h'  组件内混编

八、 cocoaPods hook方法

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

推荐阅读更多精彩内容