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
你可能还必要的格式化工具:已有项目的配置
我们拿到一个新项目后往往必要拉它的依赖.
如果你的项目中有Gemfile文件之后发现还有Podfile文件:这些命令是每个项目都必要执行的, 当项目依赖变更时必要重新执行这些: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:会创建一个Podfile. (如果项目中已经存在了会报错.)
这个文件名是固定稳定的.
用xcode打开这个文件:里面的内容是这样: (这里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 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
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |