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

[Android开发学iOS系列] iOS项目环境搭建和依赖管理的更多相关文章

  1. Android开发-eclipse+phonegap(Cordova)环境搭建

    搭建步骤: 一.安装java [官网下载].eclipse+ADT+Android SDK [点我下载x86(android-22)] | [adt-bundle-windows-x86_64-201 ...

  2. [Android开发学iOS系列] 工具篇: Xcode使用和快捷键

    [Android开发学iOS系列] 工具篇: Xcode使用和快捷键 工欲善其事必先利其器. 编辑 Cmd + N: 新建文件 Option + Cmd + N: 新建文件夹 Cmd + / : 注释 ...

  3. [Android开发学iOS系列] iOS写UI的几种方式

    [Android开发学iOS系列] iOS写UI的几种方式 作为一个现代化的平台, iOS的发展也经历了好几个时代. 本文讲讲iOS写UI的几种主要方式和各自的特点. iOS写UI的方式 在iOS中写 ...

  4. [Android开发学iOS系列] Auto Layout

    [Android开发学iOS系列] Auto Layout 内容: 介绍什么是Auto Layout. 基本使用方法 在代码中写约束的方法 Auto Layout的原理 尺寸和优先级 Auto Lay ...

  5. appium ios真机自动化环境搭建&运行(送源码)

    appium ios真机自动化环境搭建&运行(送源码) 原创: f i n  测试开发社区  6天前 Appium测试环境的搭建相对比较烦琐,不少初学者在此走过不少弯路 首先是熟悉Mac的使用 ...

  6. appium ios真机自动化环境搭建&运行(送源码)

    appium ios真机自动化环境搭建&运行(送源码) 原创: f i n  测试开发社区  6天前 Appium测试环境的搭建相对比较烦琐,不少初学者在此走过不少弯路 首先是熟悉Mac的使用 ...

  7. Android开发—智能家居系列】(二):用手机对WIFI模块进行配置

    在实际开发中,我开发的这款APP是用来连接温控器,并对温控器进行控制的.有图为证,哈哈. 上一篇文章[Android开发—智能家居系列](一):智能家居原理的文末总结中写到: 手机APP控制智能温控器 ...

  8. react 开发 PC 端项目(一)项目环境搭建 及 处理 IE8 兼容问题

    步骤一:项目环境搭建 首先,你不应该使用 React v15 或更高版本.使用仍然支持 IE8 的 React v0.14 即可. 技术选型: 1.react@0.14 2.bootstrap3 3. ...

  9. 微信公众号开发系统入门教程(公众号注册、开发环境搭建、access_token管理、Demo实现、natapp外网穿透)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/a1786223749/article/ ...

  10. 第一周博客之二---OA项目环境搭建及开发包部署

    OA项目环境搭建 一个项目想要能够在开发人员打包好项目包之后进行测试,就必须进行项目测试环境的搭建,要根据开发工程师的开发环境采用不同的测试环境,以下只是浅谈下Java项目OA(办公自动化平台)的环境 ...

随机推荐

  1. Redis 缓存过期删除/淘汰策略分析

    Redis 缓存过期删除/淘汰策略分析 Redis 缓存删除 Redis 键过期删除,定期删除(主动)和惰性删除(被动) Redis 内存不足时,缓存淘汰策略 key 键过期删除 我们用 redis ...

  2. FPGA MCS文件为什么比BIN文件烧录快

    原因 Xilinx FPGA固化FPGA程序到FLASH时,可以选择使用MCS或者BIN格式,BIN是纯二进制文件,MCS是ASCII格式的文本文件. MCS是Intel早期为MCS系列 II ISI ...

  3. 【Azure 应用服务】App Service 通过 wardeploy 部署 war 包,如何指定到 root目录为wwwroot

    问题描述 在部署War包到App Service时,参考文档:(使用 ZIP 或 WAR 文件将应用部署到 Azure 应用服务 : https://docs.azure.cn/zh-cn/app-s ...

  4. 【Azure Redis 缓存】VM 里的 Redis 能直接迁移到 Azure Cache for Redis ? 需要改动代码吗?

    问题描述 原来部署在VM 里的 Redis 能直接迁移到 Azure Cache for Redis? 需要改动代码吗? 问题解答 以上问题需要从两个方面来解答. 第一:VM中Redis的数据转移到 ...

  5. 【Azure API 管理】API Management service (APIM) 如何实现禁止外网访问

    问题描述 API Management service 设置禁止外网访问,请求通过外网(Internet)将无法解析到APIM的网关地址,只能通过APIM所集成的内网(Virtual Network) ...

  6. electron暴露配置文件(用户可随时修改)

    配置文件 一般web前端项目配置文件,写死的放在src/config下,需要打包配置的放在.env文件中.但在electron项目中,如果配置数据更改,需要每次给用户打包升级肯定是行不通的.于是外部配 ...

  7. Mac根目录下无法创建文件或目录

    无法创建目录 最近小伙伴经常反馈Mac根目录下创建文件或目录一直失败,并且尝试了各种姿势. 常见错误如下: # 常见错误1, 直接创建目录 mkdir -p /test mkdir: /data: R ...

  8. [VueJsDev] 其他知识 - NestJS 学习内容

    [VueJsDev] 目录列表 https://www.cnblogs.com/pengchenggang/p/17037320.html NestJS 学习内容 NestJS 学习总结 Step. ...

  9. vscode 提取扩展时出错 XHR failed

    vscode 提取扩展时出错 XHR failed 起因 vscode 安装 Bracket Pair Color DLW 插件,商店打不开了 解决方案 打开 hosts 添加 13.107.42.1 ...

  10. 手把手的使用Toolkit插件在诗情画意中完成AI诗朗诵

    本文分享自华为云社区<[云驻共创]手把手的使用Toolkit插件在诗情画意中完成AI诗朗诵>,作者: 红目香薰. 云原生时代,开发者们的编程方式.编程习惯都发生了天翻地覆的变化,大家逐渐地 ...