激情六月丁香婷婷|亚洲色图AV二区|丝袜AV日韩AV|久草视频在线分类|伊人九九精品视频|国产精品一级电影|久草视频在线99|在线看的av网址|伊人99精品无码|午夜无码视频在线

高校合作1:010-59833514 ?咨詢(xún)電話:400-810-1418 服務(wù)與監(jiān)督電話:400-810-1418轉(zhuǎn)接2

ios 游戲sdk開(kāi)發(fā)(「SDK」iOS端SDK開(kāi)發(fā)總結(jié)和注意點(diǎn))

發(fā)布時(shí)間:2023-11-27 17:47:35 瀏覽量:118次

?「SDK」iOS端SDK開(kāi)發(fā)總結(jié)和注意點(diǎn)

ios 游戲sdk開(kāi)發(fā)(「SDK」iOS端SDK開(kāi)發(fā)總結(jié)和注意點(diǎn))

一、概念

    靜態(tài)庫(kù):以.a.framework為文件后綴名。

    動(dòng)態(tài)庫(kù):以.tbd(之前叫.dylib) 和 .framework 為文件后綴名。

二、區(qū)別

    靜態(tài)庫(kù):鏈接時(shí)會(huì)被完整的復(fù)制到可執(zhí)行文件中,被多次使用就有多份拷貝。

    動(dòng)態(tài)庫(kù):鏈接時(shí)不復(fù)制,程序運(yùn)行時(shí)由系統(tǒng)動(dòng)態(tài)加載到內(nèi)存,系統(tǒng)只加載一次,多個(gè)程序共用(如系統(tǒng)的UIKit.framework等),節(jié)省內(nèi)存。

  注意:但是蘋(píng)果不讓使用自己的動(dòng)態(tài)庫(kù),否則審核就無(wú)法通過(guò)。所有我們制作SDK通常都是指靜態(tài)庫(kù)

注意點(diǎn)

1、項(xiàng)目名、里面的各種類(lèi)名、文件名和方法名最好都 帶上自己的前綴。

2、SDK的文件分層要以模塊和功能進(jìn)行劃分。

3、在進(jìn)行資源操作如圖片加載、文件讀取時(shí),要對(duì)對(duì)應(yīng)的方法進(jìn)行封裝處理,方便對(duì)資源的統(tǒng)一處理,如對(duì)UIImageView 設(shè)置圖片的方法進(jìn)行二次封裝。

4、能不使用第三方類(lèi)庫(kù)就不使用,假如真的需要就最好是對(duì)第三方類(lèi)庫(kù)進(jìn)行重命名和方法名修改,以防止SDK使用方的項(xiàng)目中類(lèi)庫(kù)文件和方法沖突。

5、要對(duì)SDK中需要用到的依賴(lài)文件進(jìn)行記錄以方便做文檔。

6、SDK中盡量不要使用分類(lèi)Category,因?yàn)闀?huì)涉及到一個(gè)資源加載的問(wèn)題,會(huì)使得SDK包變大。使用起來(lái)當(dāng)然也是沒(méi)有任何問(wèn)題,只需要添加-all_load或-ObjC就可以。

7、制作的SDK需要注意debug模式和Realease模式,debug模式只是一般的測(cè)試,Realease才可進(jìn)行上商店。

關(guān)于-ObjC

    這個(gè)flag告訴鏈接器把庫(kù)中定義的Objective-C類(lèi)和Category都加載進(jìn)來(lái),這樣編譯之后的app會(huì)變大(因?yàn)榧虞d了其他的objc代碼進(jìn)來(lái))但是如果靜態(tài)庫(kù)中有類(lèi)和category的話只有加入這個(gè)flag才行

關(guān)于-all_load

    這個(gè)flag是專(zhuān)門(mén)處理-ObjC的一個(gè)bug的。用了-ObjC以后,如果類(lèi)庫(kù)中只有category沒(méi)有類(lèi)的時(shí)候這些category還是加載不進(jìn)來(lái)。變通方法就是加入-all_load或者-force-load。-all_load會(huì)強(qiáng)制鏈接器把目標(biāo)文件都加載進(jìn)來(lái),即使沒(méi)有objc代碼。-force_loadxcode3.2后可用。但是-force_load后面必須跟一個(gè)只想靜態(tài)庫(kù)的路徑。

關(guān)于-force_load

    如果有多個(gè)三方庫(kù),有的需要加,有的不需要,用-all_load到最后duplicate symbol錯(cuò)誤此時(shí)可以用-force_load + 路徑方式

1、SDK庫(kù)的含義:

共享程序代碼的方式,可以對(duì)自己的項(xiàng)目進(jìn)行封裝,生成庫(kù),方便別人的使用。

2、SDK庫(kù)的分類(lèi):

A、靜態(tài)庫(kù),鏈接時(shí)完整地拷貝至可執(zhí)行文件中,被多次使用就有多份冗余拷貝。

B、動(dòng)態(tài)庫(kù),鏈接時(shí)不拷貝,程序運(yùn)行時(shí)由系統(tǒng)動(dòng)態(tài)加載到內(nèi)存,供程序調(diào)用,系統(tǒng)只加載一次,多個(gè)程序共用,節(jié)省內(nèi)存。


3、SDK庫(kù)的形式:

A、.a與.framework文件是靜態(tài)庫(kù)(.framework屬于自己創(chuàng)建),自己創(chuàng)建的.framework是靜態(tài)庫(kù)文件。

B、.tbd(Xcode7和iOS9 之前是.dylib文件)與.framework文件是動(dòng)態(tài)庫(kù)(.framework屬于系統(tǒng)自帶),系統(tǒng)自帶的.framework是動(dòng)態(tài)庫(kù)文件。


4、靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)的區(qū)別:

《1》.a是一個(gè)純二進(jìn)制文件,不能直接使用,至少要有.h文件配合

《2》.framework中除了有二進(jìn)制文件之外還有資源文件,可以直接使用。

.framework = .a(二進(jìn)制文件) + .h (頭文件) + resourceFile (資源文件)


5、靜態(tài)庫(kù)的使用優(yōu)點(diǎn):

《1》方便程序共享代碼,便于合理規(guī)范使用。

《2》 可以實(shí)現(xiàn)iOS程序的模塊化,可以把固定的業(yè)務(wù)模塊化成靜態(tài)庫(kù)。

《3》能夠與別人分享你的代碼庫(kù),但又不想讓別人看到你代碼如何實(shí)現(xiàn)。

《4》開(kāi)發(fā)第三方SDK的業(yè)務(wù)模塊需求。


6、靜態(tài)庫(kù)的制作的注意點(diǎn):

《1》.a是二進(jìn)制文件,需要配合.h頭文件和其它文件才能使用,.framework可以直接使用。

《2》圖片資源的處理可以使用.bundle文件,.bundle文件的名字和.a或.framework的名字相同。

《3》.bundle文件的簡(jiǎn)單制作如下:

ios 游戲sdk開(kāi)發(fā)(「SDK」iOS端SDK開(kāi)發(fā)總結(jié)和注意點(diǎn))

首先,新建一個(gè)文件夾;

其次,修改文件夾的后綴名為.bundle ;

最后,點(diǎn)擊右鍵,打開(kāi)顯示包內(nèi)容,就可以向其中添加圖片資源。

《4》category文件打包成靜態(tài)庫(kù)文件再添加到工程,調(diào)用分類(lèi)方法時(shí)會(huì)有找不到該方法的運(yùn)行時(shí)錯(cuò)誤(selector not recognized),解決辦法就是在靜態(tài)庫(kù)的工程中配置other linker flags的值為-ObjC。

《5》如果靜態(tài)庫(kù)很復(fù)雜,需要暴露的.h頭文件比較多,可以在靜態(tài)庫(kù)內(nèi)部創(chuàng)建一個(gè).h文件(一般這個(gè).h文件的名字和靜態(tài)庫(kù)的名字相同),然后把需要暴露的.h頭文件顯示,不需要暴露的.h頭文件集中放在這個(gè)內(nèi)部創(chuàng)建的.h文件。


7、創(chuàng)建.a靜態(tài)庫(kù)文件流程如下:

《1》創(chuàng)建一個(gè).a靜態(tài)庫(kù)工程

Xcode ——》File\New\Project ——》iOS\Framework and Library\Cocoa Touch Static Library ——》命名項(xiàng)目工程 ——》保存目錄

《2》一個(gè)靜態(tài)庫(kù)工程由頭文件和實(shí)現(xiàn)文件組成(TestSDK.h和TestSDK.m),這些文件將被編譯為庫(kù)本身。由于不需要實(shí)現(xiàn)文件,需要右鍵單擊TestSDK.m刪除該文件并移動(dòng)到廢紙簍。

《3》創(chuàng)建一個(gè)自己封裝的控件,然后拷貝到Xcode項(xiàng)目工程目錄里面。注意拷貝的時(shí)候,要勾選3個(gè)選項(xiàng),Copy items id needed、 Create groups和TestSDK。

《4》添加控件的.h頭文件到庫(kù)的主頭文件TestSDK.h中

《5》生成靜態(tài)庫(kù)的形式:

A、模擬器,只有在模擬器才能編譯運(yùn)行

Build only Device ——》show in Finder ——》拿到模擬器的.a二進(jìn)制文件和其它所有的.h頭文件

B、真機(jī),只有在手機(jī)端才能編譯運(yùn)行

iOS Simulators ——》show in Finder ——》拿到真機(jī)的.a二進(jìn)制文件和其它所有的.h頭文件

《6》合成真機(jī)與模擬器.a文件,這樣可以在真機(jī)和模擬器都能夠編譯運(yùn)行,終端命令如下:

lipo -create

模擬器.a文件目錄

真機(jī).a文件目錄

-output 輸出目錄/TestSDk.a, 獲取的TestSDk.a文件兼容模擬器和真機(jī)的二進(jìn)制文件。

8、創(chuàng)建.framework靜態(tài)庫(kù)文件流程如下:

《1》創(chuàng)建一個(gè).framework靜態(tài)庫(kù)工程

Xcode ——》File\New\Project ——》iOS\Framework and Library\Cocoa Touch Framework ——》命名項(xiàng)目工程 ——》保存目錄

《2》創(chuàng)建兩個(gè)新的工具類(lèi),或者向項(xiàng)目工程拖入一個(gè)相對(duì)完整的功能模塊。

《3》在項(xiàng)目工程中添加所依賴(lài)的框架

Xcode ——》Project ——》Targets ——》Build Phases ——》Link Binary With Libraries

《4》在項(xiàng)目工程中設(shè)置要暴露的頭文件接口,設(shè)置Public和Private,選擇相應(yīng)的運(yùn)行設(shè)備。

Xcode ——》Project ——》Targets ——》Build Phases ——》Headers

《5》在項(xiàng)目工程中添加腳本

Xcode ——》Project ——》Targets ——》Build Phases ——》New Run Script Phase ——》 添加shell腳本

加入下面的腳本將模擬器和真機(jī)的Framework合并,如下所示:

if [ "${ACTION}" = "build" ]

then

INSTALL_DIR=${SRCROOT}/Products/${PROJECT_NAME}.framework

DEVICE_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework

SIMULATOR_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework

if [ -d "${INSTALL_DIR}" ]

then

rm -rf "${INSTALL_DIR}"

fi

mkdir -p "${INSTALL_DIR}"

cp -R "${DEVICE_DIR}/" "${INSTALL_DIR}/"

#ditto "${DEVICE_DIR}/Headers" "${INSTALL_DIR}/Headers"

lipo -create "${DEVICE_DIR}/${PROJECT_NAME}" "${SIMULATOR_DIR}/${PROJECT_NAME}" -output "${INSTALL_DIR}/${PROJECT_NAME}"

#open "${DEVICE_DIR}"

open "${SRCROOT}/Products"

fi

《6》點(diǎn)擊Xcode左上角的運(yùn)行按鈕,然后腳本就自動(dòng)彈出生成的Framework庫(kù)文件。

《7》如果其他項(xiàng)目工程導(dǎo)入這個(gè)Framework庫(kù),編譯報(bào)錯(cuò),需要讓編譯器提前編譯這個(gè)二進(jìn)制文件,做法是Xcode->General->Embedded Binaries,將系統(tǒng)依賴(lài)的Framework添加上去即可。

《8》最后,F(xiàn)ramework的核心在于內(nèi)部結(jié)構(gòu)的設(shè)計(jì),謹(jǐn)慎設(shè)計(jì)你的每一個(gè)接口,在每個(gè)對(duì)外暴露的方法中需要做好注釋?zhuān)欢环萃ㄓ玫慕涌谖臋n也是必須的。


  • SDK中所有的類(lèi)名都應(yīng)該加前綴
  • 所有Category加前綴

  • 盡量不要引入第三方的庫(kù)、如果引入要添加前綴
  • 比如添加了NSData+Base64,可以把NSData+Base64改成NSData+KYBase64,在前面加KY或者自己公司的縮寫(xiě)、產(chǎn)品縮寫(xiě)
  • 所有的提供的方法有測(cè)試?yán)?/li>
  • 文檔的完整和正確
ios 游戲sdk開(kāi)發(fā)(「SDK」iOS端SDK開(kāi)發(fā)總結(jié)和注意點(diǎn))

熱門(mén)課程推薦

熱門(mén)資訊

請(qǐng)綁定手機(jī)號(hào)

x

同學(xué)您好!

您已成功報(bào)名0元試學(xué)活動(dòng),老師會(huì)在第一時(shí)間與您取得聯(lián)系,請(qǐng)保持電話暢通!
確定