• [Android开发学iOS系列] iOS项目环境搭建和依赖管理


    iOS项目环境搭建和依赖管理

    一个项目总是会依赖一些库, 有些是第三方的, 有些可能是项目自身为了复用拆出去的.
    现有主流的iOS依赖有多种形式, 比如CocoaPods, Carthage和swift package.

    本文是一些环境搭建和使用项目依赖相关的笔记.

    全局环境准备

    基本上iOS开发都要准备的环境, 这些设置是全局的, 在每个机器上设置一次就行. (本文为mac环境).

    homebrew: (已有可跳过)

    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

    rbenv

    rbenv是一个管理ruby版本的工具, 如果同一个机器上有多个代码库, 可以用它来灵活切换ruby在不同项目中的版本.

    具体可以看一下项目介绍: https://github.com/rbenv/rbenv

    setup ruby (这里选一个全局的版本号, 可根据具体情况更改):

    brew install rbenv ruby-build
    rbenv install 3.1.3
    echo "export PATH=\"/opt/homebrew/bin/rbenv:\$PATH\"" >> ~/.zshrc
    echo "eval \"\$(/opt/homebrew/bin/rbenv init -)\"" >> ~/.zshrc
    source ~/.zshrc
    rbenv global 3.1.3

    验证安装成功:

    ruby -v
    //得到刚刚指定的版本
    which ruby
    //得到目录: $HOME/.rbenv/shims/ruby

    Bundler和CocoaPods

    Bundler(https://bundler.io/)和CocoaPods(https://cocoapods.org/)都是dependency manager.

    它们管理的依赖种类不同.

    Bundler用来下Ruby gems, 即Gemfile中的依赖.

    CocoaPods用来下pod, 即Podfile中写的pods依赖.

    但cocoapods本身是一个ruby gem, 所以它被bundler管理.

    (可以想象bundler是大经理, cocoapods是小领导, 此处可以画一个树形图表示, 如果我记得的话.) (但是我突然决定不画了, 因为懒.)

    iOS世界中还有一个著名的ruby gem是fastlane, 本文并不涉及就不展开讲了.

    我们先把这两个工具安装到电脑上:

    gem install bundler
    gem install cocoapods
    pod setup

    Optional

    你可能还需要的格式化工具:

    brew install swiftformat

    已有项目的配置

    我们拿到一个新项目后往往需要拉它的依赖.

    如果你的项目中有Gemfile文件

    bundle install

    之后发现还有Podfile文件:

    bundle exec pod install

    这些命令是每个项目都需要执行的, 当项目依赖变更时需要重新执行这些:

    bundle install
    bundle exec pod install

    M1电脑可能需要配置:

    bundle config build.ffi --enable-system-libffi
    bundle config set --local path 'vendor/bundle'
    // 这个命令运行完之后当前目录下会多出一个`.bundle/`文件夹.

    命令行中的工作就基本做完了, 剩下打开xcode, 如果还有swift package xcode会帮你解析的.

    CocoaPod

    这里以CocoaPod为例讲一下如何添加使用一个CocoaPod库, 以及相关的文件.

    安装cocoapods这一步我们在之前setup环境的时候已经跑过了:

    gem install cocoapods
    pod setup

    每一个机器只要跑一次就行, 可以跳过.

    CocoaPods有一个公开的specifications repo:

    https://github.com/CocoaPods/Specs

    这是一个中心化的代码仓库, 比较流行的库都放在上面.

    官网是: https://cocoapods.org/

    在这里可以搜索任何你想要的cocoapods库.

    使用一个公开的库

    让我们拿一个比较流行的库试试: https://github.com/Alamofire/Alamofire

    首先在项目的根目录run:

    pod init

    会创建一个Podfile. (如果项目中已经存在了会报错.)

    这个文件名是固定不变的.

    用xcode打开这个文件:

    open -a Xcode Podfile

    里面的内容是这样: (这里UsePublicCocoaPods是我的项目名)

    # Uncomment the next line to define a global platform for your project
    # platform :ios, '9.0'
    target 'UsePublicCocoaPods' do
    # Comment the next line if you don't want to use dynamic frameworks
    use_frameworks!
    # Pods for UsePublicCocoaPods
    end

    我们在这里加上一行, 用上Alamofire的最新版本:

    target 'UsePublicCocoaPods' do
    # Comment the next line if you don't want to use dynamic frameworks
    use_frameworks!
    # Pods for UsePublicCocoaPods
    pod 'Alamofire', '5.6.4'
    end

    然后:

    bundle exec pod install

    (这里如果遇到问题, 记得在项目目录中跑bundle config set --local path 'vendor/bundle').

    安装完成之后会产生一些diff.

    • 项目下多了Pods文件夹. (应该被ignore)
    • 多了Podfile.lock文件. (不应该被ignore)
    • UsePublicCocoaPods/UsePublicCocoaPods.xcworkspace/UsePublicCocoaPods/UsePublicCocoaPods.xcodeproj/project.pbxproj 都有改变.

    这里需要检查一下.gitignore的配置.

    然后就可以在代码里import Alamofire并使用它的代码了.

    Dependency management tools

    iOS中有多种依赖管理工具类型:

    • CocoaPods
    • Carthage
    • Swift package manager

    CocoaPods

    CocoaPods
    比较老的依赖类型, 但是很多项目仍然在用.

    Carthage

    Carthage
    build出来的是字节码, 一般也叫framework.

    Swift package manager

    swift-package-manager
    比较新的依赖管理类型, 一般在Xcode的UI界面里操作.
    本文就不介绍了.

    项目结构和其他Trouble Shooting

    Files and folders

    Xcode是一个神奇的IDE, 它的文件夹叫”Group”.
    在其中的文件分为”物理上存在”和”引用上存在”两种情况.

    • 删除文件的时候会问你只是删了引用(仅在Xcode里看不见)还是要进一步删了这个文件(物理上也删除).
    • 添加文件的时候仅仅拷贝到文件目录里是不够的, 需要”Add Files”, 打开目录添加一下, 才能在Xcode里也可见.

    Project文件

    ProjectName.xcodeproj/project.pbxproj
    Project文件挺烦人的, 每新增/重命名一个文件它都会有diff.

    有一些脚本工具可以帮忙将文件排序: https://github.com/WebKit/webkit/blob/main/Tools/Scripts/sort-Xcode-project-file

    这样产生diff之后运行一下(可以添加到git hook里), 文件会有序一些, 多人合作的时候不容易产生冲突.

    真机调试

    真机调试需要有证书, 并不是随便抓个机器连上线就能安装应用.
    当设备的OS版本较高但Xcode版本较低时, 可能需要添加一些DeviceSupport文件:

    比如:

    将所缺版本拷贝到这个目录: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/

    重启xcode再试.

    References

  • 相关阅读:
    字符串压缩
    Ubuntu18.04安装LeGO-LOAM保姆级教程
    刷爆力扣之最长连续递增序列
    vue计算属性computed && 侦听器watch
    dashboard报错 错误:无法获取网络列表、dashboard报错 错误:无法获取云主机列表 解决流程
    软考 - 网络工程师考试大纲
    VSCode 推荐插件列表(都安装到Remote SSH上)
    前端工作日常
    基于阿里云oss的文件管理系统
    TDengine小知识-数据文件命名规则
  • 原文地址:https://www.cnblogs.com/mengdd/p/18112556/iOS-environment-setup-and-dependencies