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

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

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

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

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

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

一、概念

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

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

二、區(qū)別

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

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

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

注意點

1、項目名、里面的各種類名、文件名和方法名最好都 帶上自己的前綴。

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

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

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

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

6、SDK中盡量不要使用分類Category,因為會涉及到一個資源加載的問題,會使得SDK包變大。使用起來當(dāng)然也是沒有任何問題,只需要添加-all_load或-ObjC就可以。

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

關(guān)于-ObjC

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

關(guān)于-all_load

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

關(guān)于-force_load

    如果有多個三方庫,有的需要加,有的不需要,用-all_load到最后duplicate symbol錯誤此時可以用-force_load + 路徑方式

1、SDK庫的含義:

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

2、SDK庫的分類:

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

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


3、SDK庫的形式:

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

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


4、靜態(tài)庫和動態(tài)庫的區(qū)別:

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

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

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


5、靜態(tài)庫的使用優(yōu)點:

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

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

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

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


6、靜態(tài)庫的制作的注意點:

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

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

《3》.bundle文件的簡單制作如下:

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

首先,新建一個文件夾;

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

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

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

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


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

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

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

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

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

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

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

A、模擬器,只有在模擬器才能編譯運行

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

B、真機,只有在手機端才能編譯運行

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

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

lipo -create

模擬器.a文件目錄

真機.a文件目錄

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

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

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

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

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

《3》在項目工程中添加所依賴的框架

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

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

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

《5》在項目工程中添加腳本

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

加入下面的腳本將模擬器和真機的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》點擊Xcode左上角的運行按鈕,然后腳本就自動彈出生成的Framework庫文件。

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

《8》最后,F(xiàn)ramework的核心在于內(nèi)部結(jié)構(gòu)的設(shè)計,謹(jǐn)慎設(shè)計你的每一個接口,在每個對外暴露的方法中需要做好注釋,然而一份通用的接口文檔也是必須的。


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

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

熱門課程推薦

熱門資訊

請綁定手機號

x

同學(xué)您好!

您已成功報名0元試學(xué)活動,老師會在第一時間與您取得聯(lián)系,請保持電話暢通!
確定