SPM實現framework自動管理和分發

一、前言

Swift Package Manager (SPM) 是蘋果官方提供的用于管理 Swift 項目的依賴關系和構建過程的工具。它是一個集成在 Swift 編程語言中的包管理器,用于解決在開發過程中管理和構建包依賴項的需求。

那么如何使用SPM管理和分發Objective C編寫的二進制庫呢?下面為你一一解答。

二、先準備好你的web服務

具體請查看我的內網穿透:ngrok使用教程

三、制作OC的framework

如何制作framework自行查看網上教程,這里省略。

注意:

1、圖片資源放在后綴為.xcassets的文件夾里面,這個文件夾放在framework里一起生成framework

加載圖片:

NSBundle *bundle = [NSBundle bundleForClass:[self class]];UIImage *applePic = [UIImage imageNamed:@"圖片名稱" inBundle:bundle compatibleWithTraitCollection:nil];

2、多語言文件也要放在framework里一起生成framework

+(NSString *)systemLanguage
{NSString *languageStr = [NSString stringWithFormat:@"%@",[[NSUserDefaults standardUserDefaults] objectForKey:@"appLanguage"]];return languageStr;
}+(NSString *)funLocalizedString:(NSString *)key
{NSString *lprojPath = [[NSBundle bundleForClass:[self class]] pathForResource:[INDOTool systemLanguage] ofType:@"lproj"];NSString *content = [[NSBundle bundleWithPath:lprojPath] localizedStringForKey:(key) value:nil table:nil];return content;
}

3、在制作framework的時候,在庫文件的build setting - framework search path里面的值清空,如:$(inherited),$(PROJECT_DIR)

四、安裝carthage

Carthage是一個用于管理iOS和Mac項目的依賴關系的分發管理器。它允許你從源代碼倉庫中獲取依賴項,并將它們編譯為可嵌入到你的應用程序中的二進制框架。

用于生成:xcframework

1、在命令行執行:brew install carthage

2、cd到生成庫文件的工程目錄,執行:carthage build --no-skip-current --use-xcframeworks

編譯成功后再跟目錄下會出現 Carthage 文件夾,里面就有我們需要的 XCFramework 了。生產xcframeworks

五、上傳xcframework.zip到web服務

壓縮上面生成的xcframeworks。并且上傳到你的web服務器,這個時候你會得到一條下載這個壓縮包的鏈接,如:https://hhhhhhhhhhhh.xcframework.zip

可以用:curl -O xcframework.zip的鏈接。來下載

在命令行中運行shasum -a 256?hhhh.xcframework.zip。得到這個壓縮包的SHA256 哈希值

六、制作package.swift

1、以下命令行會自動幫你初始化一個package.swift的管理需要的文件

$ mkdir CommandLineTool
$ cd CommandLineTool
$ swift package init --type library

2、編寫package.swift文件

// swift-tools-version:5.8 //這句不可以刪除,指定版本的import PackageDescriptionlet package = Package(name: "MyLibrary",platforms: [.iOS(.v13) // 適用的 iOS 版本],products: [.library(name: "MyLibrary",targets: ["MyLibraryTarget"]),],dependencies: [.package(url: "https://github.com/facebook/facebook-ios-sdk", from: "14.0.0"), // Facebook 登錄庫的依賴.package(url: "https://github.com/adjust/ios_sdk", from: "4.33.6") // Adjust 庫的依賴],targets: [.binaryTarget(name: "MyLibrary", // 二進制庫的名稱url: "", // 二進制庫的下載鏈接 上一步生成的checksum: "" // 二進制庫的校驗和 上一步生成的),.target(name: "MyLibraryTarget",dependencies: [.target(name: "MyLibrary"), // 添加對二進制庫的依賴.product(name: "FacebookLogin", package: "facebook-ios-sdk"), // 添加對 Facebook 登錄庫的依賴.product(name: "Adjust", package: "ios_sdk"), // 添加對Adjust庫的依賴])]
)

七、上傳CommandLineTool文件夾

上傳CommandLineTool文件夾到公司的git倉庫,并且打上tag版本號。git倉庫是公開的,這樣其他人接入我們的framework的時候才可以下載。

八、Xcode中自動下載庫

打開Xcode的file - add Packages

點擊完成就會下載自己的庫和第三方的庫

最后就可以愉快的使用啦?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/35454.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/35454.shtml
英文地址,請注明出處:http://en.pswp.cn/news/35454.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

HOT86-單詞拆分

leetcode原題鏈接:單詞拆分 題目描述 給你一個字符串 s 和一個字符串列表 wordDict 作為字典。請你判斷是否可以利用字典中出現的單詞拼接出 s 。注意:不要求字典中出現的單詞全部都使用,并且字典中的單詞可以重復使用。 示例 1&#xff1a…

不同路徑 II——力扣63

class Solution {public:int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {int n=

一鍵登錄是如何在登錄方式中脫穎而出的?

首先&#xff0c;我們先了解一下登錄方式的演變過程&#xff0c;大致可以分為三個階段。分別是賬號密碼登錄、短信驗證碼登錄和一鍵登錄。 階段一&#xff1a;賬號密碼登錄 賬號密碼登錄是一種常見的用戶身份驗證方式&#xff0c;用戶需要輸入一個唯一的賬號和對應的密碼來登…

【APITable】教程:創建并運行一個自建小程序

1.進入APITable&#xff0c;在想要創建小程序的看板頁面點擊右上角的【小程序】&#xff0c;進入小程序編輯頁面。 2.創建一個新的小程序區。 點擊【 添加小程序】 點擊創建小程序&#xff0c;選擇模板&#xff0c;輸入名字。 3.確定后進入小程序部署引導頁面。 4.打開Xshell 7…

初識鴻蒙跨平臺開發框架ArkUI-X

HarmonyOS是一款面向萬物互聯時代的、全新的分布式操作系統。在傳統的單設備系統能力基礎上&#xff0c;HarmonyOS提出了基于同一套系統能力、適配多種終端形態的分布式理念&#xff0c;能夠支持手機、平板、智能穿戴、智慧屏、車機等多種終端設備&#xff0c;提供全場景&#…

99. for循環練習題-3種方式輸出0-9

【目錄】 文章目錄 99. for循環練習題-3種方式輸出0-91. for循環和while循環的區別2. 輸出 0~(n-1)的數字2.1 基礎代碼2.2 自定義函數代碼2.3 異常處理語句代碼 【正文】 99. for循環練習題-3種方式輸出0-9 1. for循環和while循環的區別 for循環和while循環都用于重復執行特定…

Linux一些常見的命令

1. 基礎命令 1. ls&#xff1a; 列出目錄內容。- 例如&#xff1a;ls -l 以長格式列出文件和目錄。2. cd&#xff1a; 切換工作目錄。- 例如&#xff1a;cd /home/user 進入 /home/user 目錄。3. pwd&#xff1a; 顯示當前工作目錄的路徑。4. mkdir&#xff1a; 創建新目錄。-…

flink-對齊和不對齊,精準一次和至少一次

精準一次怎么保證&#xff1f;可以設置為以下2個 對齊 當有一個barrier比較快時&#xff0c;輸入緩沖區阻塞&#xff0c;當另外一個barrier到來時&#xff0c;才進行備份&#xff0c;所以數據不會重復。優點&#xff1a;不會造成數據重復缺點&#xff1a;會造成數據積壓&#x…

ChatGPT Plus和ChatGPT對比

模型規模更大&#xff0c;參數數量超過6萬億&#xff0c;比ChatGPT大很多訓練數據更豐富&#xff0c;包括不同語言、領域和類型的數據語言理解和生成能力更強&#xff0c;能夠更準確地理解和生成文本可解釋性和可控性更好&#xff0c;支持更多的調參和控制參數&#xff0c;生成…

uni-app和springboot完成前端后端對稱加密解密流程

概述 使用對稱加密的方式實現。前端基于crypto-js。uni-app框架中是在uni.request的基礎上&#xff0c;在攔截器中處理的。springboot在Filter中完成解密工作。 uni-app 項目中引入crypto-js。 npm install crypto-js加密方法 const SECRET_KEY CryptoJS.enc.Utf8.parse(…

最強自動化測試框架Playwright(20)- iframe

一個頁面可以附加一個或多個 Frame 對象。每個頁面都有一個主框架&#xff0c;并且假定頁面級交互&#xff08;如&#xff09;在主框架中運行。click frame_locator 使用 iframe 時&#xff0c;可以創建一個框架定位器&#xff0c;該定位器將進入 iframe 并允許選擇該 iframe…

idea模板的使用(配置xml文件模板)

1. 問題的引出 我們在日常項目中可以發現&#xff0c;sql映射文件和mybatis主配置文件&#xff0c;以及application.yml文件中有很多固定不變的內容&#xff0c;為了方面使用&#xff0c;所以可以把這些xml文件設置為模板 2. 創建模板的步驟 按照圖片一步一步進行即可 點擊…

gcc編譯選項之預處理向源碼傳參和條件編譯

一、是什么? 預處理:是指在進行加工前準備工作. gcc 選項 文件名字 二、使用步驟 1.向源碼傳參 gcc -save-temps -DSENSOR_TYPE=SONY_IMX477_MIPI_8M_30FPS_12BIT hello.c -o hello 代碼如下(示例): #include <stdio.h> #include <stdlib.h>typedef enum …

acwing 平衡括號字符串 貪心 括號序列

&#x1f468;?&#x1f3eb; 平衡括號字符串 給定一個字符串 s s s&#xff0c;該字符串的每個字符都是 (、) 或 # 之一。 你的任務是將 s s s 中的每個 # 變換為一個或多個 )&#xff0c;從而得到一個平衡括號字符串。 不同 # 變換的 ) 的數量可以不同。 請你輸出為了…

數據容器——元組(tuple)

1、元組與列表的不同點 列表是可以修改的。如果想要傳遞的信息&#xff0c;不被算改&#xff0c;列表就不合適了。 元組同列表一樣&#xff0c;都是可以封裝多個、不同類型的元素在內。 但最大的不同點在于&#xff1a;元組一旦定義完成&#xff0c;就不可修改 所以&#xff…

2023河南萌新聯賽第(五)場:鄭州輕工業大學 --01分數規劃

題目描述 給定一個字符串 s&#xff0c;僅含 0, 1, ? 三種字符&#xff0c;你必須將所有 ? 替換為 1 或 0 。 定義 s 的美好值為將所有?進行替換后&#xff0c;s的最長連續 1 或 0 的子串的長度。請你進行所有替換后&#xff0c;使得字符串 s 的美好值最大&#xff0c;請輸…

(二)結構型模式:1、適配器模式(Adapter Pattern)(C++實現示例)

目錄 1、適配器模式&#xff08;Adapter Pattern&#xff09;含義 2、適配器模式應用場景 3、適配器模式的UML圖學習 4、C實現適配器模式的示例 1、適配器模式&#xff08;Adapter Pattern&#xff09;含義 將一個接口轉換為客戶端所期待的接口&#xff0c;從而使兩個接口…

CompletableFuture

java8中新引入了批量線程處理類CompletableFuture CompletableFuture.allOf是與的關系, 每個都要執行完 CompletableFuture.anyOf是或的關系, 其中一個執行完 以下示例代碼: CompletableFuture.allOf(CompletableFuture.runAsync(() -> {Thread.currentThread().setName(&q…

js常用的方法函數

JavaScript 中有許多常用的內置方法和函數&#xff0c;用于處理字符串、數組、對象、日期等不同類型的數據。以下是一些常見的 JavaScript 方法和函數&#xff1a; 字符串操作&#xff1a; str.length: 返回字符串的長度。 str.charAt(index): 返回指定位置的字符。 str.indexO…

Mac安裝nvm教程及使用

nvm 是 node 版本管理器&#xff0c;也就是說一個 nvm 可以管理多個 node 版本&#xff08;包含 npm 與 npx&#xff09;&#xff0c;可以方便快捷的安裝、切換 不同版本的 node。 1、直接通過brew安裝 執行命令&#xff1a;brew install nvm PS&#xff1a; 如果沒有安裝br…