日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iOS项目功能模块封装SDK使用总结

發布時間:2025/3/15 编程问答 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS项目功能模块封装SDK使用总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、功能模塊SDK封裝步驟:

1、創建IOS Framework工程

先我們需要創建一個iOS的CocoaTouch工程,點擊Next,輸入我們Framework的名字即可。下方我們暫且將該Framework的名字命名為“CreateLoginSDKFramework”。操作如下所示:

Xcode ——》File\New\Project ——》iOS\Framework and Library\Cocoa Touch Framework ——》命名項目工程

?

2、設置兼容版本:

創建完工程后,我們要選擇“Deployment Target”, 此處我們選擇的是8.0。也就是說此處我們封裝的SDK所支持的iOS系統版本是iOS8.0+。操作所示:

Xcode ——》Project ——》Targets ——》General ——》Deployment Info ——》iOS8.0(最低支持的兼容版本)

?

3.1、配置動態庫:

創建的framework默認是動態庫,操作如下所示:

Xcode ——》Project ——》Targets ——》Build Settings ——》Msch-O Type——》Dynamic Library

Xcode ——》Project ——》Targets ——》Build Settings ——》Build active Architecture only——》NO

?

3.2、配置靜態庫:

由于創建的framework默認是動態庫,所以我們要講Mach-O Type設置為靜態庫“Static Library”。操作如下所示:

Xcode ——》Project ——》Targets ——》Build Settings ——》Msch-O Type——》Static Library

Xcode ——》Project ——》Targets ——》Build Settings ——》Build active Architecture only——》NO

Xcode ——》Project ——》Targets ——》Build Settings ——》Dead Code Stripping——》NO

Xcode ——》Project ——》Targets ——》Build Settings ——》Link With Standard Libraries——》NO

?

4、設置支持所有架構(armv7/armv7s/arm64):

Xcode ——》Project ——》Targets ——》Build Settings ——》Build Active Architecture Only——》NO

?

5、導入源代碼文件,設置要公開的所有頭文件:

將事先準備好的SDK源代碼引入到我們的Framework的工程中進行編譯了,在編譯之前我們要選擇SDK用戶可以看到的文件。在Build Phases下的Headers中進行設置的。將用戶可以看到的頭文件放在Public中,用戶看不到的放在Project中。操作如下所示:

Xcode ——》Project ——》Targets ——》Build Phases ——》Headers——》Public/Private/Project

?

6、編譯工程:

設置和配置完畢后,我們就要對我們的Framework程進行編譯了。先選擇模擬器進行編譯,然后選擇真機進行編譯。編譯完后,在Products下會生成相應的Framework, 然后通過Show in Finder進行查看即可。查看時,如果想看“模擬器”和“真機”的framework的話,在Show in finder后,需要前往上層文件夾查看。

?

7、第一種方式(使用命令行合并模擬器和真機Framework庫):

因為在模擬器下編譯會生成模擬器下使用的Framework,在真機下編譯會生成真機使用的Framework。如果想我們生成的Framework既可以在真機下使用,也可以在模擬器下使用,那么我們需要將兩個Framework進行合并。使用終端命令將上述兩個文件進行合并。下方就是合并上述兩個文件的執行命令, 執行完下方命令后會生成合并后的新文件。操作如下所示:

打開終端 ——》lipo -create 模擬器framework路徑 ?真機framework路徑 -output 新的文件

注意事項:

1、編譯Framework工程前,需要設置Edit Scheme, 選擇run->將Debug模式改成Release模式,選擇Close。

2、合并Framework出現error:can't map input file: xxxFramework.framework/ (Invalid argument),原因是如果工程名稱和Framework的Target名稱不一樣的話,要自定義FrameworkName。

lipo -info xxxFramework.framework/xxxFramework

?或者

cd xxxFramework.framework

lipo -info xxxFramework

完整命令如下:

lipo -create /Users/yh/Library/Developer/Xcode/DerivedData/YouHone_SDK-dchvyxjtxmxejegowpxcteqnerux/Build/Products/Release-iphonesimulator/YouHone_SDK.framework/YouHone_SDK? /Users/yh/Library/Developer/Xcode/DerivedData/YouHone_SDK-dchvyxjtxmxejegowpxcteqnerux/Build/Products/Release-iphoneos/YouHone_SDK.framework/YouHone_SDK -output /Users/yh/Desktop/NewSDK/YouHone_SDK

?

注意:記得將新合成的YouHone_SDK文件,替換成發布模式的真機里面YouHone_SDK文件

Debug-iphonesos(測試模式真機)

Debug-iphonesimulator(測試模式模擬器)

Release-iphonesos(發布模式真機)

Release-iphonesimulator(發布模式模擬器)

?

3、如果需要隱藏文件中的分類創建的類,需要在工程添加

Xcode ——》Project ——》Targets ——》Build Phases ——》?Other Linker Flags ——》-all_load

?

8、第二種方式(使用腳本合并模擬器和真機Framework庫):

1、編譯framework的shell腳本

#buildtarget TARGET_NAME=${PROJECT_NAME} if [[ $1 ]] then TARGET_NAME=$1 fi UNIVERSAL_OUTPUT_FOLDER="${SRCROOT}/${PROJECT_NAME}_Products/" #創建輸出目錄,并刪除之前的framework文件 mkdir -p "${UNIVERSAL_OUTPUT_FOLDER}" rm -rf "${UNIVERSAL_OUTPUT_FOLDER}/${TARGET_NAME}.framework" #分別編譯模擬器和真機的Framework xcodebuild -target "${TARGET_NAME}" ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build xcodebuild -target "${TARGET_NAME}" ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphonesimulator BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build #拷貝frameworkuniver目錄 cp -R "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${TARGET_NAME}.framework" "${UNIVERSAL_OUTPUT_FOLDER}" #合并framework,輸出最終的frameworkbuild目錄 lipo -create -output "${UNIVERSAL_OUTPUT_FOLDER}/${TARGET_NAME}.framework/${TARGET_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${TARGET_NAME}.framework/${TARGET_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphoneos/${TARGET_NAME}.framework/${TARGET_NAME}" #刪除編譯之后生成的無關的配置文件 dir_path="${UNIVERSAL_OUTPUT_FOLDER}/${TARGET_NAME}.framework/" for file in ls $dir_path do if [[ ${file} =~ ".xcconfig" ]] then rm -f "${dir_path}/${file}" fi done #判斷build文件夾是否存在,存在則刪除 if [ -d "${SRCROOT}/build" ] then rm -rf "${SRCROOT}/build" fi rm -rf "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator" "${BUILD_DIR}/${CONFIGURATION}-iphoneos" #打開合并后的文件夾 open "${UNIVERSAL_OUTPUT_FOLDER}"

2、編譯library(靜態庫.a文件)的腳本

#要build的target名 target_Name=${PROJECT_NAME} if [[ $1 ]] then target_Name=$1 fi UNIVERSAL_OUTPUT_FOLDER="${SRCROOT}/${PROJECT_NAME}_Products" # 創建輸出目錄,并刪除之前的文件 rm -rf "${UNIVERSAL_OUTPUT_FOLDER}" mkdir -p "${UNIVERSAL_OUTPUT_FOLDER}" # 分別編譯真機和模擬器版本 xcodebuild -target "${target_Name}" ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build xcodebuild -target "${target_Name}" ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphonesimulator BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build #復制頭文件到目標文件夾 HEADER_FOLDER="${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/include/${target_Name}" if [[ -d "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/usr/local/include" ]] then HEADER_FOLDER="${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/usr/local/include" fi cp -R "${HEADER_FOLDER}" "${UNIVERSAL_OUTPUT_FOLDER}" #合成模擬器和真機.a包 lipo -create "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/lib${target_Name}.a" "${BUILD_DIR}/${CONFIGURATION}-iphoneos/lib${target_Name}.a" -output "${UNIVERSAL_OUTPUT_FOLDER}/lib${target_Name}.a" # 判斷build文件夾是否存在,存在則刪除 if [ -d "${SRCROOT}/build" ] then rm -rf "${SRCROOT}/build" fi #打開目標文件夾 open "${UNIVERSAL_OUTPUT_FOLDER}"

?

二、資源文件的Bundle封裝步驟:

1、Bundle工程的創建:

首先像創建Framework工程一樣創建一個Bundle工程,因為iOS工程下方沒有Bundle類型的工程,所以我們需要在OS X -> Framework & Library -> Bundle下面來創建我們的Bundle工程。操作如下所示:

Xcode ——》File\New\Project ——》macOS\Framework and Library\Bundle——》命名項目工程

?

2、配置Bundle工程:

創建完Bundle工程后,我們要對其進行相應的配置。因為我們是選擇OS X創建的Bundle,默認的Bundle是不能在iOS中使用的,所以我們得將Base SDK進行設置,選擇相應的iOS樣式即可(默認Mac OS樣式),如下所示。選擇完Base SDK后,我們還要像上面Framework的封裝一樣,設置一下要兼容的iOS版本(iOS Deployment Target)。操作如下所示:

A、Xcode ——》Project ——》Targets ——》Build Settings ——》Base SDK ——》iOS樣式

B、Xcode ——》Project ——》Targets ——》General ——》Deployment Info ——》Deployment Target——》ios8.0(最低支持的兼容版本)

C、Xcode ——》Project ——》Targets ——》Build Settings ——》Installation Directory ——》清空路徑

D、Xcode ——》Project ——》Targets ——》Build Settings ——》Skip Install ——》默認YES,跳過安裝過程

E、Xcode ——》Project ——》Targets ——》Build Settings ——》COMBINE_HIPI_IMAGES ——》設置NO(如果為YES,圖片是TIFF模式)

?

3、導入Bundle資源文件并進行編譯:

進行上述配置完后,接下來就是引入資源文件進行編譯了,下方引入的資源文件就是我們的LoginSDK.storyboard。引入資源后,進行編譯,編譯后會在Products下面生成相應的Bundle資源文件,該文件就可以和我們的Framework進行使用了。

Xcode ——》Project ——》Targets ——》Build Phases——》Copy Bundle Resources ——》添加圖片資源

?

4、項目中Bundle資源的加載:

生成完Bundle資源文件后,我們在SDK的源代碼中,要從Bundle資源文件中進行資源的加載。下方代碼就是加載相應Bundle的代碼。通過下方的宏定義,就可以通過“Bundle”的名字來加載Bundle。

#define LOGIN_SDK_BUNDLE_NAME ? @"LoginSDKResource.bundle"

#define LOGIN_SDK_BUNDLE_PATH ? [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent: LOGIN_SDK_BUNDLE_NAME]

#define LOGIN_SDK_BUNDLE? ? ? ? [NSBundle bundleWithPath: LOGIN_SDK_BUNDLE_PATH]

?

5、注意事項:

如果Bundle工程中中引用了資源文件,工程編譯過后會出現.storyboardc或者.xibc文件才算真正封裝成功。

?

三、封裝后的SDK文件的使用步驟:

1、導入SDK,進行路徑配置

導入SDK到我們的App工程后,我們要對其進行相應的配置。首先我們要對Framework Search Paths進行配置,也就是說告訴編譯器我們的第三方SDK所在的位置。下方這個配置項在引入SDK后就默認存在的,如果沒有的話就進行配置即可。操作如下所示:

Xcode ——》Project ——》Targets ——》Build Settings ——》Search Paths\Framework Search Paths ——》$(PROJECT_DIR)/LoginSDK

?

2、進行編譯配置

配置完路徑后,接下來我們要在Other Linker Flags添加上-Objc和-all_load選項。-Objc這個flag告訴鏈接器把庫中定義的Objective-C類和Category都加載進來。而-all_load會強制鏈接器把目標文件都加載進來,即使沒有objc代碼。操作如下所示:

Xcode ——》Project ——》Targets ——》Build Settings ——》Linking\Other Link Flags——》-Objc和-all_load

?

3、SDK的使用:

配置完畢后,接下來就是在我們App中使用該SDK了。下方代碼就是我們上述LoginSDK的使用方式,首先獲取單例,然后檢查是否登錄,登錄成功后根據Block回調跳轉到首頁,如果未登錄,就通過LoginAPI獲取登錄頁面進行登錄。

?

4、 注意事項:

《A》如果打包導出的是動態庫,需要在新的工程

Xcode ——》Project ——》Targets ——》General ——》Embedded Binaries ——》添加導入Framework庫

?

《B》如果打包導出的是態庫,需要在新的工程

Xcode ——》Project ——》Targets ——》General ——》Link Binary With Libraries ——》添加導入Framework庫

如果是態庫,那么在新的工程還需要額外的配置:

Xcode ——》Project ——》Targets ——》Build Phases ——》New Copy Files phase ——》添加導入Framework庫

如果是態庫,資源打包進Framework是讀取不了的。靜態Framework和.a文件都是編譯進可執行文件里面的。只有動態Framework能在.app的Framework文件夾下看到,并讀取.framework里的資源文件。

?

轉載于:https://www.cnblogs.com/yuhao309/p/8960730.html

總結

以上是生活随笔為你收集整理的iOS项目功能模块封装SDK使用总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 尹人久久 | 国产丝袜在线视频 | 最近最新中文字幕 | 国产原创在线视频 | 日韩xx视频 | 欧美一页 | 日日爱网站 | 日本泡妞xxxx免费视频软件 | 玉足调教丨vk24分钟 | 91在线公开视频 | 丝袜在线一区 | 91精品国产高清一区二区三蜜臀 | 国产乱码精品一区二三赶尸艳谈 | 一区二区三区高清在线观看 | 国产成人精品免费看视频 | 特黄一级片 | 他揉捏她两乳不停呻吟动态图 | 九九资源网| 好色艳妇小说 | 精品视频大全 | 日韩午夜伦 | 日韩视频 中文字幕 | 国产精品入口久久 | 免费一级毛片麻豆精品 | 亚洲黄网av | 国产精品久久久久久久久免费桃花 | 一级伦理农村妇女愉情 | 成人无码www在线看免费 | 黄色avav| 都市激情国产精品 | 国产综合精品视频 | 亚洲aav | 国内一区二区视频 | 久久久久久激情 | 国产女无套免费视频 | 风韵多水的老熟妇 | 成人精品视频在线观看 | 激情欧美亚洲 | 苍井空亚洲精品aa片在线播放 | 一级做a爱片久久 | 国产丝袜一区二区三区 | 日韩一卡 | 偷拍第一页 | 精品人伦一区二区三 | 淫视频网站| 少妇做爰免费理伦电影 | 成人黄色短视频在线观看 | 久久爱影视 | 亚洲成人第一网站 | 毛片一二三区 | 中文字幕素人 | 久久久久久国产精品视频 | 亚洲精品在线观看免费 | 成人人伦一区二区三区 | 91久久精品国产91性色69 | 日韩成人精品一区二区 | 日本一区二区三区在线观看 | freesex性hd公交车上 | 中文无码精品一区二区三区 | 黄色三级图片 | 桃色视频在线 | 日韩av免费在线看 | 美女黄色av| 亚洲男女av | zzji欧美大片 | 国产乱了高清露脸对白 | 秋霞久久精品 | 一级特黄a| 伊人情人综合网 | 日本va在线 | 午夜88| 你懂的亚洲 | 亚洲熟女少妇一区二区 | 天天看片天天爽 | 看一级片| 亚洲精品白浆高清久久久久久 | 中国女人内96xxxxx | 4438x在线观看 | 午夜三级在线 | 51嘿嘿嘿国产精品伦理 | 啪啪网站大全 | 久久大香焦 | 久久网国产 | 色一情一乱一伦一区二区三区 | 在线碰 | 国内精品毛片 | av不卡在线免费观看 | 国产精品久久久久久久裸模 | 爱情岛论语亚洲入口 | 高清在线一区二区三区 | 六月激情| 农村妇女精品一区二区 | 91丨porny丨中文| 涩涩亚洲 | 黄色片网战 | 可以直接观看的av | 无码少妇精品一区二区免费动态 | 成人3d动漫一区二区三区91 | 国产日韩欧美日韩大片 |