• Cocoa Pod使用总结


    1. 背景

    CocoaPod是Swift,Objective-C语言编写的Cocoa项目的依赖管理工具。简单点说就是它管理了很多的Swift和Objective-C的库,然后通过CocoaPod可以比较容易的在自己的项目中引用与管理它所提供的各种库。CocoaPod本身是用Ruby开发的,可以在Mac默认的Ruby环境下运行(官方也推荐用Mac默认环境运行)。它本身也是被Ruby的包管理工具Gem所管理。这里其实有点绕,Ruby下面的包管理工具Gem下管理了CocoaPod包,而CocoaPod自身可以认为是一个Swift/Objective-C依赖包管理工具,它管理了很多Swift/Objective-C的库。

    2. 安装

    我们可以通过Gem install命令来安装Cocoa Pod,但是受国内防火墙影响,可能访问不了Gem国外的源。因此我们需要更改Gem的源为国内的提供商。可选提供商如下:

    1. https://ruby.taobao.org

    2. https://gems.ruby-china.org

    可以通过gem source add {source uri}来添加

    添加好源后,我们即可通过sudo gem install cocoapods来安装cocoapod.

    安装好后,我们即可使用cocoapod来管理我们的依赖库

    3. Podfile

    cocoapod是通过podfile来描述项目所以依赖的库,具体文件内容如下:

    # Uncomment this line to define a global platform for your project
    platform :ios, '9.0'
    use_frameworks!//使用framework的方式来引用依赖库
    
    target ‘CocoaPodTest’ do//为项目的该targe定义依赖
        pod ‘SwiftyJSON’//为项目添加SwiftJSON的依赖,版本为最新版
    end
    

    可以在project所在目录执行pod init命令,来让pod为我们创建podfile文件,也可以自己手动创建,然后添加自己所依赖的库。

    4. 拉取依赖库

    podfile准备好后,通过命令pod install命令(在podfile所在目录执行)来安装项目所以来的库。

    注意:当后续添加/删除了库的依赖后,依然是通过pod install来拉取,只有当需要更行所依赖的库的版本的时候才执行pod update命令来更新依赖库的版本

    5. pod install后生成的文件分析以及cocoa pod的工作原理

    先来看一下整体结构:

    CocoaPodTest project
    -Depended on
    --Pods_CocoaPodTest.framework

    Pod project
    -Target
    --Pods_CocoaPodTest
    --SwiftJSON

    新生成了一个Pod project,它有两个targets:Pods_CocoaPodTest,SwiftJSON,依赖于SwiftJSON
    我们的项目CocoaPodTest依赖与Pod project的Pods_CocoaPodTest target的产出Pods_CocoaPodTest.framework
    这样我们自己的项目就只依赖与Pods_CocoaPodTest.framework,然后其它所有引入的库由Pod_CocoaPodTest target触发编译。减少对我们自己Project的修改。

    除了这些target的配置外,从上面的图可以看出在Support文件夹里面生成了很多文件。主要是三类文件:

    1. Module定义文件

    为了让我们引入的每个库的我们的项目代码中能以Module的形式应用,CocoaPod将每一个库输出为一个framework,这些Module定义文件定义了framework的module.

    2. target的编译配置文件*.xcconfig
    这些定义每一个target的xcode编译配置。

    3. 编译脚本
    我们如果查看CocoaPodTest project的的build phase,可以看到

    cocoa pod为我们添加了三个build phase:

    1. Check Pods Manifest.lock

    这个环节利用根目录里面的manifest.lock文件和上级目录中的podfile.lock,来确保多人协同开发时,每个人本地的库版本一致。具体原理如下:

    1)pod install或者pod update后,cocoa pod会更新manifest.lock和podfile.lock,根文件保存了所依赖库的版本信息

    2)将podfile.lock提交至源码管理系统

    3)其他人拿到代码后,如果本地的库版本与提交至源码管理系统的podfile.lock所描述的不一样。编译会失败,报告本地需要通过pod install/pod update来更新库文件。达到保证多人开发时版本一致的目的。

    2. Embed Pods Frameworks

    这个环节会去执行Pod所生成的编译脚本Pods-CocoaPodTest-frameworks.sh,主要是对所生成的依赖库的framework进行签名等。

    3. Copy Pods Resource

    这个环节会去执行Pod所生成的编译脚本Pods-CocoaPodTest-resources.sh,来拷贝所依赖库中的资源文件。

  • 相关阅读:
    深度学习文献代码阅读-超分辨(ESRGAN)
    缺陷检测-5.Learning to Detect Multiple Photographic Defects(学习去检测多种摄像缺陷)
    缺陷检测-4.Semi-supervised Anomaly Detection using AutoEncoders(半监督缺陷检测使用自动的编码器)
    缺陷检测-3.CutPaste: Self-Supervised Learning for Anomaly Detection and Localization(剪切粘贴:自监督学习对于异常检测和定位)
    缺陷检测-2.Mixed supervision for surface-defect detection: from weakly to fully supervised learning(对于表面缺陷检测的混合监督:从弱到完全监督学习)
    缺陷检测-1.End-to-end training of a two-stage neural network for defect detection(端到端的两步神经网络的缺陷检测)(论文和代码讲解)
    Mac Docker 中运行 Linux 0.12
    Sharding-JDBC 学习
    编译型语言&解释型语言
    vnc客户端远程登录无显示器Apple macOS 主机修改分辨率的方法
  • 原文地址:https://www.cnblogs.com/Code-life/p/6793162.html
Copyright © 2020-2023  润新知