[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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...