iOS項(xiàng)目環(huán)境搭建和依賴管理
一個(gè)項(xiàng)目總是會(huì)依賴一些庫, 有些是第三方的, 有些可能是項(xiàng)目自身為了復(fù)用拆出去的.
現(xiàn)有主流的iOS依賴有多種形式, 比如CocoaPods, Carthage和swift package.
本文是一些環(huán)境搭建和使用項(xiàng)目依賴相關(guān)的筆記.
全局環(huán)境準(zhǔn)備
基本上iOS開發(fā)都要準(zhǔn)備的環(huán)境, 這些設(shè)置是全局的, 在每個(gè)機(jī)器上設(shè)置一次就行. (本文為mac環(huán)境).
homebrew: (已有可跳過)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
rbenv
rbenv是一個(gè)管理ruby版本的工具, 如果同一個(gè)機(jī)器上有多個(gè)代碼庫, 可以用它來靈活切換ruby在不同項(xiàng)目中的版本.
具體可以看一下項(xiàng)目介紹: https://github.com/rbenv/rbenv
setup ruby (這里選一個(gè)全局的版本號(hào), 可根據(jù)具體情況更改):
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
驗(yàn)證安裝成功:
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本身是一個(gè)ruby gem, 所以它被bundler管理.
(可以想象bundler是大經(jīng)理, cocoapods是小領(lǐng)導(dǎo), 此處可以畫一個(gè)樹形圖表示, 如果我記得的話.) (但是我突然決定不畫了, 因?yàn)閼?)
iOS世界中還有一個(gè)著名的ruby gem是fastlane, 本文并不涉及就不展開講了.
我們先把這兩個(gè)工具安裝到電腦上:
gem install bundler
gem install cocoapods
pod setup
Optional
你可能還需要的格式化工具:
brew install swiftformat
已有項(xiàng)目的配置
我們拿到一個(gè)新項(xiàng)目后往往需要拉它的依賴.
如果你的項(xiàng)目中有Gemfile
文件
bundle install
之后發(fā)現(xiàn)還有Podfile文件:
bundle exec pod install
這些命令是每個(gè)項(xiàng)目都需要執(zhí)行的, 當(dāng)項(xiàng)目依賴變更時(shí)需要重新執(zhí)行這些:
bundle install
bundle exec pod install
M1電腦可能需要配置:
bundle config build.ffi --enable-system-libffi
bundle config set --local path 'vendor/bundle'
// 這個(gè)命令運(yùn)行完之后當(dāng)前目錄下會(huì)多出一個(gè)`.bundle/`文件夾.
命令行中的工作就基本做完了, 剩下打開xcode, 如果還有swift package xcode會(huì)幫你解析的.
CocoaPod
這里以CocoaPod為例講一下如何添加使用一個(gè)CocoaPod庫, 以及相關(guān)的文件.
安裝cocoapods這一步我們?cè)谥皊etup環(huán)境的時(shí)候已經(jīng)跑過了:
gem install cocoapods
pod setup
每一個(gè)機(jī)器只要跑一次就行, 可以跳過.
CocoaPods有一個(gè)公開的specifications repo:
https://github.com/CocoaPods/Specs
這是一個(gè)中心化的代碼倉(cāng)庫, 比較流行的庫都放在上面.
官網(wǎng)是: https://cocoapods.org/
在這里可以搜索任何你想要的cocoapods庫.
使用一個(gè)公開的庫
讓我們拿一個(gè)比較流行的庫試試: https://github.com/Alamofire/Alamofire
首先在項(xiàng)目的根目錄run:
pod init
會(huì)創(chuàng)建一個(gè)Podfile
. (如果項(xiàng)目中已經(jīng)存在了會(huì)報(bào)錯(cuò).)
這個(gè)文件名是固定不變的.
用xcode打開這個(gè)文件:
open -a Xcode Podfile
里面的內(nèi)容是這樣: (這里UsePublicCocoaPods
是我的項(xiàng)目名)
# 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
我們?cè)谶@里加上一行, 用上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
(這里如果遇到問題, 記得在項(xiàng)目目錄中跑bundle config set --local path 'vendor/bundle'
).
安裝完成之后會(huì)產(chǎn)生一些diff.
- 項(xiàng)目下多了Pods文件夾. (應(yīng)該被ignore)
- 多了
Podfile.lock
文件. (不應(yīng)該被ignore) -
UsePublicCocoaPods/UsePublicCocoaPods.xcworkspace/
和UsePublicCocoaPods/UsePublicCocoaPods.xcodeproj/project.pbxproj
都有改變.
這里需要檢查一下.gitignore
的配置.
- 這個(gè)網(wǎng)站可以搜搜不同的項(xiàng)目通常的配置: https://www.toptal.com/developers/gitignore/, 比如: https://www.toptal.com/developers/gitignore/api/swift,cocoapods,xcode
- 這里也有一個(gè): https://github.com/github/gitignore/blob/main/Swift.gitignore
然后就可以在代碼里import Alamofire
并使用它的代碼了.
Dependency management tools
iOS中有多種依賴管理工具類型:
- CocoaPods
- Carthage
- Swift package manager
CocoaPods
CocoaPods
比較老的依賴類型, 但是很多項(xiàng)目仍然在用.
Carthage
Carthage
build出來的是字節(jié)碼, 一般也叫framework.
Swift package manager
swift-package-manager
比較新的依賴管理類型, 一般在Xcode的UI界面里操作.
本文就不介紹了.
項(xiàng)目結(jié)構(gòu)和其他Trouble Shooting
Files and folders
Xcode是一個(gè)神奇的IDE, 它的文件夾叫”Group”.
在其中的文件分為”物理上存在”和”引用上存在”兩種情況.
- 刪除文件的時(shí)候會(huì)問你只是刪了引用(僅在Xcode里看不見)還是要進(jìn)一步刪了這個(gè)文件(物理上也刪除).
- 添加文件的時(shí)候僅僅拷貝到文件目錄里是不夠的, 需要”Add Files”, 打開目錄添加一下, 才能在Xcode里也可見.
Project文件
ProjectName.xcodeproj/project.pbxproj
Project文件挺煩人的, 每新增/重命名一個(gè)文件它都會(huì)有diff.
有一些腳本工具可以幫忙將文件排序: https://github.com/WebKit/webkit/blob/main/Tools/Scripts/sort-Xcode-project-file
這樣產(chǎn)生diff之后運(yùn)行一下(可以添加到git hook里), 文件會(huì)有序一些, 多人合作的時(shí)候不容易產(chǎn)生沖突.
真機(jī)調(diào)試
真機(jī)調(diào)試需要有證書, 并不是隨便抓個(gè)機(jī)器連上線就能安裝應(yīng)用.
當(dāng)設(shè)備的OS版本較高但Xcode版本較低時(shí), 可能需要添加一些DeviceSupport文件:
比如:
- https://github.com/filsv/iOSDeviceSupport
- https://github.com/iGhibli/iOS-DeviceSupport
將所缺版本拷貝到這個(gè)目錄: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/
文章來源:http://www.zghlxwxcb.cn/news/detail-844286.html
重啟xcode再試.文章來源地址http://www.zghlxwxcb.cn/news/detail-844286.html
References
- Swift Package Manager vs CocoaPods vs Carthage for All Platforms
- The Podfile
- Create useful .gitignore files for your project
到了這里,關(guān)于[Android開發(fā)學(xué)iOS系列] iOS項(xiàng)目環(huán)境搭建和依賴管理的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!