组件化

cocoapods本地私有库的使用

就是创建一个仓库, 存储在本地, 在本地的其他工程中直接使用

  • 创建仓库描述文件
    • pod spec create xxx
    • 修改描述文件字段
  • podfile需要指明安装本地库的路径
    • pod spec create xxx
    • 修改描述文件字段


      1@2x.png
2@2x.png
指定路径@2x.png
配置私钥公钥
//查看ssh是否存在
cd ~/.ssh
cat id_rsa //查看私钥内容
ssh-keygen //生成私钥公钥命令 或下面一句
ssh- keygen -t rsa -b 4096 -C " git2019@163. com" 
命令
生成路径
cocoapods远程私有库的使用
//允许拉去没有关联的文件
git pull origin main --allow-unrelated-histories
git remote -v //远程地址信息

//添加本地仓库,专门存放podspec文件
pod repo add ZRBase https://github.com/TangGeV587/ZRBaseSpec.git 

cd /Users/tangge/Desktop/privateLib
//自动生成Pod模板
pod lib create ZRBase
git add .
git commit -m '初始化代码' //podspec文件记得一起修改
git branch -M main 
git remote add origin https://github.com/TangGeV587/ZRBase.git
git push origin main 
git tag '0.1.0'
git push --tags

//验证私有库
pod spec lint --private  --sources='https://github.com/CocoaPods/Specs.git'
//将podspec 推送到本地仓库 ,自动关联到远程的私有库中
pod repo push ZRBase ZRBaseSpec.podspec 
//清除缓存
pod cache clean --all

操作流程
cocoapods原理.png

子组件

# 将所有文件全部安装
  #s.source_files = 'ZRBase/Classes/**/*'
  #s.dependency 'AFNetworking'

  #分模块安装
  s.subspec 'Base' do |b|
  b.source_files = 'ZRBase/Classes/Base/**/*'
  end

组件二进制化

静态库制作参照这里👉👉

方式一

二进制化

方式二
cocoapods-packager 快速完成类库的打包

sudo gem install cocoapods-packager
pod package ZRSegmentBar.podspec //⚠️⚠️⚠️必须是已经上传代码到远程仓库


遇到下面错误❌❌❌
have the same architectures (arm64) and can't be in the same fat output file

解决方式👉👉👉
/Library/Ruby/Gems/2.6.0/gems/cocoapods-packager-1.5.0/lib/cocoapods-packager/pod_utils.rb
打开pod_utils.rb文件,32行添加下面这句
config.build_settings['EXCLUDED_ARCHS[sdk=iphonesimulator*]'] = 'arm64' 

二进制&源码之间切换

//podsepc 部分源码
  if ENV['IS_SOURCE'] || ENV['ZRDownLoad']
    s.source_files = 'ZRDownLoad/Classes/**/*'
  else
  s.vendored_frameworks = 'ZRDownLoad/Products/ZRDownLoad.framework'
  s.source_files = 'ZRDownLoad/Classes/**/*.h'
  end

组件自动化

什么是自动化?
通过命令, 去自动执行一组固定操作
自动化使用场景?
测试、打包上传审核、分发等等

Fastlane
// fastlane安装
sudo gem install -n /usr/local/bin fastlane
// 进入项目根目录,执行下面命令初始化Fastfile
fastlane init
//展示fastfile中的所有lane
fastlane lanes
//执行fastlane 
fastlane ManagerLib tag:0.1.0 target:ZRSegmentBar

fastlane 遇到的问题

can't find executable pod for gem cocoapods,cocoapods is not currently included in the bundle, perhaps you meant to add it to your Gemfile?
解决方式→➡️➡️➡️ 在Gemfile 中添加 gem "cocoapods"

操作流程
 //1.生成pod模板
pod lib create ZRSegmentBar
//2.编写源码
//3.关联远程仓库
git remote add origin https://github.com/TangGeV587/ZRSegmentBar.git
//4. 修改spec文件

#制作fastfile文件,实现以下命令
//5. Pod install
// 6.提交代码至远程仓库(git add . & git commit & git push)
//7. 打标签提交至远程仓库
//8. 验证spec文件 (pod spec lint)
//9. 把库索引文件提交至远程私有仓库(pod repo push ZRSpec ZRSegmentBar.podspec)
// 执行脚本文件
fastlane ManagerLib tag:0.1.0 target:ZRSegmentBar
fastlane自定义action

编辑remove_tag.rb文件

module Fastlane
  module Actions
    module SharedValues
      REMOVE_TAG_CUSTOM_VALUE = :REMOVE_TAG_CUSTOM_VALUE
    end

    class RemoveTagAction < Action
      def self.run(params)
   
        tagName = params[:tag]
        isDeleteLocalTag = params[:dL]
        isDeleteRemoteTag = params[:dR]
        cmds = []
        # 删除本地标签 git tag -d 标签名称
        if isDeleteLocalTag
            cmds << "git tag -d #{tagName} "
        end
        #删除远程标签 git push origin main:标签名称
        if isDeleteRemoteTag
            cmds << "git push origin main:#{tagName} "
        end
        #执行数组里所有命令
        result = Actions.sh(cmds.join('$'))
        return result
      end

      def self.description
        "自定义删除标签"
      end

      def self.details
        "删除远程或者本地的标签"
      end

      def self.available_options
        # 参数

        # Below a few examples
        [
         FastlaneCore::ConfigItem.new(key: :tag,
                                       description: "标签名称",
                                       optional:false,
                                       is_string: true, # 是否是字符串
                                       default_value: false), # 默认值
         FastlaneCore::ConfigItem.new(key: :dL,
                                       description: "是否删除本地标签",
                                       optional:true,
                                       is_string: false, # 是否是字符串
                                       default_value: true), # 默认值
         FastlaneCore::ConfigItem.new(key: :dR,
                                        description: "是否远程标签",
                                        optional:true,
                                        is_string: false, # 是否是字符串
                                        default_value: true) # 默认值
        ]
      end

      def self.output
        # 输出内容
      end

      def self.return_value
        #返回值
      end

      def self.authors
        # 作者
        ["三刀流索隆"]
      end

      def self.is_supported?(platform)
        # 支持平台的描述
        #
        #  true
        #
        #  platform == :iOS
        #
        #  [:ios, :mac].include?(platform)
        #

        platform == :iOS
      end
    end
  end
end

//创建action 
fastlane new_action 

//校验action
fastlane action remove_tag

//打印如下表示成功
+------------------------+
|       remove_tag       |
+------------------------+
| 自定义删除标签         |
|                        |
| 删除远程或者本地的标签 |
|                        |
| Created by 三刀流索隆  |
+------------------------+

+-----+------------------+------------+---------+
|              remove_tag Options               |
+-----+------------------+------------+---------+
| Key | Description      | Env Var(s) | Default |
+-----+------------------+------------+---------+
| tag | 标签名称         |            | false   |
| dL  | 是否删除本地标签 |            | true    |
| dR  | 是否远程标签     |            | true    |
+-----+------------------+------------+---------+

//执行action 
remove_tag(tagName: target_version, dR:true, dL:true)

fastfile文件
default_platform(:iOS)
platform :iOS do
desc "ManagerLib 可以快速创建私有库,进行升级维护"
lane :ManagerLib do |options|
#定义参数
tagName = options[:tag]
targetName = options[:target]

# 航道行为
#pod install
cocoapods(
clean_install: true,
podfile: "./Example/Podfile"
)

# git add .
git_add(path: ".")

#git commit -m 'xxxx'
git_commit(path: ".", message: "版本升级维护")

# git push -u origin main
push_to_git_remote(
remote: "origin",
local_branch: "main",
remote_branch: "main" //⚠️⚠️⚠️⚠️后面千万不要加逗号
)

# 验证tag是否存在,如果存在, 应该删除本地标签和远程标签
#if 判断标签是否存在
#    执行删除本地/远程标签
#end

if git_tag_exists(tag: tagName ,remote:true)
    UI.message("发现tag:#{tagName} 已经存在, 即将执行, 删除动作 🚀")
    remove_tag(tag:tagName)
end

# git tag
add_git_tag(
tag: tagName
)

# git push --tags
push_git_tags

#pod lib lint
pod_lib_lint(allow_warnings: true,private:true)

#pod repo push xxxx xxxx.podspec
pod_push(path: "#{targetName}.podspec", repo: "ZRBaseSpec")
end
end


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

推荐阅读更多精彩内容