[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
这是一个中心化的代码仓库, 比较流行的库都放在上面.
在这里可以搜索任何你想要的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的配置.
- 这个网站可以搜搜不同的项目通常的配置: https://www.toptal.com/developers/gitignore/, 比如: https://www.toptal.com/developers/gitignore/api/swift,cocoapods,xcode
- 这里也有一个: https://github.com/github/gitignore/blob/main/Swift.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
- Swift Package Manager vs CocoaPods vs Carthage for All Platforms
- The Podfile
- Create useful .gitignore files for your project
[Android开发学iOS系列] iOS项目环境搭建和依赖管理的更多相关文章
- Android开发-eclipse+phonegap(Cordova)环境搭建
搭建步骤: 一.安装java [官网下载].eclipse+ADT+Android SDK [点我下载x86(android-22)] | [adt-bundle-windows-x86_64-201 ...
- [Android开发学iOS系列] 工具篇: Xcode使用和快捷键
[Android开发学iOS系列] 工具篇: Xcode使用和快捷键 工欲善其事必先利其器. 编辑 Cmd + N: 新建文件 Option + Cmd + N: 新建文件夹 Cmd + / : 注释 ...
- [Android开发学iOS系列] iOS写UI的几种方式
[Android开发学iOS系列] iOS写UI的几种方式 作为一个现代化的平台, iOS的发展也经历了好几个时代. 本文讲讲iOS写UI的几种主要方式和各自的特点. iOS写UI的方式 在iOS中写 ...
- [Android开发学iOS系列] Auto Layout
[Android开发学iOS系列] Auto Layout 内容: 介绍什么是Auto Layout. 基本使用方法 在代码中写约束的方法 Auto Layout的原理 尺寸和优先级 Auto Lay ...
- appium ios真机自动化环境搭建&运行(送源码)
appium ios真机自动化环境搭建&运行(送源码) 原创: f i n 测试开发社区 6天前 Appium测试环境的搭建相对比较烦琐,不少初学者在此走过不少弯路 首先是熟悉Mac的使用 ...
- appium ios真机自动化环境搭建&运行(送源码)
appium ios真机自动化环境搭建&运行(送源码) 原创: f i n 测试开发社区 6天前 Appium测试环境的搭建相对比较烦琐,不少初学者在此走过不少弯路 首先是熟悉Mac的使用 ...
- Android开发—智能家居系列】(二):用手机对WIFI模块进行配置
在实际开发中,我开发的这款APP是用来连接温控器,并对温控器进行控制的.有图为证,哈哈. 上一篇文章[Android开发—智能家居系列](一):智能家居原理的文末总结中写到: 手机APP控制智能温控器 ...
- react 开发 PC 端项目(一)项目环境搭建 及 处理 IE8 兼容问题
步骤一:项目环境搭建 首先,你不应该使用 React v15 或更高版本.使用仍然支持 IE8 的 React v0.14 即可. 技术选型: 1.react@0.14 2.bootstrap3 3. ...
- 微信公众号开发系统入门教程(公众号注册、开发环境搭建、access_token管理、Demo实现、natapp外网穿透)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/a1786223749/article/ ...
- 第一周博客之二---OA项目环境搭建及开发包部署
OA项目环境搭建 一个项目想要能够在开发人员打包好项目包之后进行测试,就必须进行项目测试环境的搭建,要根据开发工程师的开发环境采用不同的测试环境,以下只是浅谈下Java项目OA(办公自动化平台)的环境 ...
随机推荐
- Redis 缓存过期删除/淘汰策略分析
Redis 缓存过期删除/淘汰策略分析 Redis 缓存删除 Redis 键过期删除,定期删除(主动)和惰性删除(被动) Redis 内存不足时,缓存淘汰策略 key 键过期删除 我们用 redis ...
- FPGA MCS文件为什么比BIN文件烧录快
原因 Xilinx FPGA固化FPGA程序到FLASH时,可以选择使用MCS或者BIN格式,BIN是纯二进制文件,MCS是ASCII格式的文本文件. MCS是Intel早期为MCS系列 II ISI ...
- 【Azure 应用服务】App Service 通过 wardeploy 部署 war 包,如何指定到 root目录为wwwroot
问题描述 在部署War包到App Service时,参考文档:(使用 ZIP 或 WAR 文件将应用部署到 Azure 应用服务 : https://docs.azure.cn/zh-cn/app-s ...
- 【Azure Redis 缓存】VM 里的 Redis 能直接迁移到 Azure Cache for Redis ? 需要改动代码吗?
问题描述 原来部署在VM 里的 Redis 能直接迁移到 Azure Cache for Redis? 需要改动代码吗? 问题解答 以上问题需要从两个方面来解答. 第一:VM中Redis的数据转移到 ...
- 【Azure API 管理】API Management service (APIM) 如何实现禁止外网访问
问题描述 API Management service 设置禁止外网访问,请求通过外网(Internet)将无法解析到APIM的网关地址,只能通过APIM所集成的内网(Virtual Network) ...
- electron暴露配置文件(用户可随时修改)
配置文件 一般web前端项目配置文件,写死的放在src/config下,需要打包配置的放在.env文件中.但在electron项目中,如果配置数据更改,需要每次给用户打包升级肯定是行不通的.于是外部配 ...
- Mac根目录下无法创建文件或目录
无法创建目录 最近小伙伴经常反馈Mac根目录下创建文件或目录一直失败,并且尝试了各种姿势. 常见错误如下: # 常见错误1, 直接创建目录 mkdir -p /test mkdir: /data: R ...
- [VueJsDev] 其他知识 - NestJS 学习内容
[VueJsDev] 目录列表 https://www.cnblogs.com/pengchenggang/p/17037320.html NestJS 学习内容 NestJS 学习总结 Step. ...
- vscode 提取扩展时出错 XHR failed
vscode 提取扩展时出错 XHR failed 起因 vscode 安装 Bracket Pair Color DLW 插件,商店打不开了 解决方案 打开 hosts 添加 13.107.42.1 ...
- 手把手的使用Toolkit插件在诗情画意中完成AI诗朗诵
本文分享自华为云社区<[云驻共创]手把手的使用Toolkit插件在诗情画意中完成AI诗朗诵>,作者: 红目香薰. 云原生时代,开发者们的编程方式.编程习惯都发生了天翻地覆的变化,大家逐渐地 ...