[Android開發學iOS系列] iOS項目環境搭建和依賴管理

来源:https://www.cnblogs.com/mengdd/p/18112556/iOS-environment-setup-and-dependencies
-Advertisement-
Play Games

iOS項目環境搭建和依賴管理 一個項目總是會依賴一些庫, 有些是第三方的, 有些可能是項目自身為了復用拆出去的. 現有主流的iOS依賴有多種形式, 比如CocoaPods, Carthage和swift package. 本文是一些環境搭建和使用項目依賴相關的筆記. 全局環境準備 基本上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

作者: 聖騎士Wind
出處: 博客園: 聖騎士Wind
Github: https://github.com/mengdd
微信公眾號: 聖騎士Wind
微信公眾號: 聖騎士Wind
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Apache DolphinScheduler已支持Apache SeaTunnel任務類型,本文介紹了SeaTunnel任務類型如何創建,任務參數,以及任務樣例。 一、Apache SeaTunnel SeaTunnel 任務類型,用於創建並執行 SeaTunnel 類型任務。worker 執行該 ...
  • 作者 | ALIREZA SADEGHI 翻譯 | Debra Chen 簡介 雖然生成式人工智慧和ChatGPT帶來的沸沸揚揚的炒作令科技界為之一振,但在數據工程領域,2023年仍然是一個令人振奮和充滿活力的一年,數據工程生態系統變得更加多樣化和複雜化,系統中的所有層面都在不斷創新和演進。 隨著各 ...
  • 本文介紹了SEQUENCE的使用場景和相關的函數的使用方法,並對使用SEQUENCE過程中遇到的常見問題及解決方法進行了彙總。 ...
  • 目錄一、 Composable 的生命周期二、 Composable 的副作用2.1 SideEffect2.2 DisposableEffect2.3 LaunchedEffect2.4 rememberCoroutineScope2.5 rememberUpdatedState2.6 deriv ...
  • 目錄一、狀態變化1.1 狀態變化是什麼1.2 mutableStateListOf 和 mutableStateMapOf二、重組的特性2.1 Composable 重組是智能的2.2 Composable 會以任意順序執行2.3 Composable 會併發執行2.4 Composable 會反覆 ...
  • 一、Text/Span 在HarmonyOS中,Text/Span組件是文本控制項中的一個關鍵部分。Text控制項可以用來顯示文本內容,而Span只能作為Text組件的子組件顯示文本內容。 Text/Span組件的用法非常簡單和直觀。我們可以通過Text組件來顯示普通文本,也可以通過Span組件來實 ...
  • 稍微有點 Linux 經驗的人一定會遇到過 “Too many open files” 錯誤,這個錯誤本質是 ulimit 設置不合理導致的。關於 ulimit 設置,有哪些需要註意的點呢?本文給大家做一個介紹,希望對大家有所幫助。 如何確認 ulimit 設置生效了? 很多人設置了 ulimit ...
  • 一、Progress Progress組件是一種用戶界面(UI)元素,用於向用戶顯示某些任務的進度。它通常以進度條的形式出現,顯示任務完成的百分比。Progress組件可以在確定任務持續時間未知的情況下提供有用的反饋,幫助用戶瞭解任務的狀態和進度。 在Web應用程式中,Progress組件通常是 ...
一周排行
    -Advertisement-
    Play Games
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...
  • 目錄前言PostgreSql安裝測試額外Nuget安裝Person.cs模擬運行Navicate連postgresql解決方案Garnet為什麼要選擇Garnet而不是RedisRedis不再開源Windows版的Redis是由微軟維護的Windows Redis版本老舊,後續可能不再更新Garne ...
  • C#TMS系統代碼-聯表報表學習 領導被裁了之後很快就有人上任了,幾乎是無縫銜接,很難讓我不想到這早就決定好了。我的職責沒有任何變化。感受下來這個系統封裝程度很高,我只要會調用方法就行。這個系統交付之後不會有太多問題,更多應該是做小需求,有大的開發任務應該也是第二期的事,嗯?怎麼感覺我變成運維了?而 ...
  • 我在隨筆《EAV模型(實體-屬性-值)的設計和低代碼的處理方案(1)》中介紹了一些基本的EAV模型設計知識和基於Winform場景下低代碼(或者說無代碼)的一些實現思路,在本篇隨筆中,我們來分析一下這種針對通用業務,且只需定義就能構建業務模塊存儲和界面的解決方案,其中的數據查詢處理的操作。 ...
  • 對某個遠程伺服器啟用和設置NTP服務(Windows系統) 打開註冊表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer 將 Enabled 的值設置為 1,這將啟用NTP伺服器功 ...
  • title: Django信號與擴展:深入理解與實踐 date: 2024/5/15 22:40:52 updated: 2024/5/15 22:40:52 categories: 後端開發 tags: Django 信號 松耦合 觀察者 擴展 安全 性能 第一部分:Django信號基礎 Djan ...
  • 使用xadmin2遇到的問題&解決 環境配置: 使用的模塊版本: 關聯的包 Django 3.2.15 mysqlclient 2.2.4 xadmin 2.0.1 django-crispy-forms >= 1.6.0 django-import-export >= 0.5.1 django-r ...
  • 今天我打算整點兒不一樣的內容,通過之前學習的TransformerMap和LazyMap鏈,想搞點不一樣的,所以我關註了另外一條鏈DefaultedMap鏈,主要調用鏈為: 調用鏈詳細描述: ObjectInputStream.readObject() DefaultedMap.readObject ...
  • 後端應用級開發者該如何擁抱 AI GC?就是在這樣的一個大的浪潮下,我們的傳統的應用級開發者。我們該如何選擇職業或者是如何去快速轉型,跟上這樣的一個行業的一個浪潮? 0 AI金字塔模型 越往上它的整個難度就是職業機會也好,或者說是整個的這個運作也好,它的難度會越大,然後越往下機會就會越多,所以這是一 ...
  • @Autowired是Spring框架提供的註解,@Resource是Java EE 5規範提供的註解。 @Autowired預設按照類型自動裝配,而@Resource預設按照名稱自動裝配。 @Autowired支持@Qualifier註解來指定裝配哪一個具有相同類型的bean,而@Resourc... ...