iOS制作通用靜態庫和動態庫

前言

前面的兩遍文章分別介紹了制作真機上面的靜態庫和動態庫,但是問題又來了,真機上面的庫是不能在模擬器上面運行的,是直接編譯不過的,那么有沒有一種辦法,既可以在真機上面運行也能在模擬器上面運行?那我可以肯定的告訴你,是絕對可以的。下面我就帶你一步一步的制作。? 制作真機上面的靜態庫? 制作真機上面的動態庫

制作通用靜態庫

在我制作真機上面的靜態庫的基礎上,我這邊新建了一個StaticLibrary來演示制作。

在之前的基礎上分別選擇真機和模擬器運行,然后Show in Finder 以此生成兩種類型的.a文件。如下截圖

接下來就是:合并模擬器(release-iphonesimulator)和真機(release-iphoneos)下的.a,以便支持真機和模擬器,合并后的.a大小大約是不合并的2倍左右。

首先我新建一個文件夾,命名為SDK,將上截圖中的 Debug-iphoneos 和 Debug-iphonesimulator文件拷貝進SDK文件夾中,然后打開終端應用,準備執行如下命令

一、在終端輸入:lipo? -create? ? ?

二、將debug-iphonesimulator下的.a拖進終端,打個空格

三、繼續將debug-iphoneos 下.a 拖進終端,打個空格

四、繼續輸入:-output ,打個空格

五、輸入合并后的.a所要放的文件路徑,并且命名.a文件(我這里是Static.a),最后回車

最終的命令如下:

lipo? -create? /Users/lengqiuhui/Desktop/SDK/Debug-iphonesimulator/libStaticLibrary.a? /Users/lengqiuhui/Desktop/SDK/Debug-iphoneos/libStaticLibrary.a? -output? /Users/lengqiuhui/Desktop/Value/Static.a? 回車

截圖如下:

PS:我這里的 /Users/lengqiuhui/Desktop/SDK/Debug-iphonesimulator/libStaticLibrary.a 是模擬器.a文件在本機的路徑

/Users/lengqiuhui/Desktop/SDK/Debug-iphoneos/libStaticLibrary.a 是真機.a文件在本機的路徑? /Users/lengqiuhui/Desktop/Value是生成最終合并的文件路徑,Static.a 是合并后的.a文件名字

合并后的最終的結果如下:

最后檢查合并后的Static.a文件是不是滿足所有要求,依然在終端進行以下操作:

一、在終端輸入:lipo? -info?

二、將合并后的.a拖進終端 ,回車

最終的命名如下:lipo-info? /Users/lengqiuhui/Desktop/Value/Static.a? 回車

從終端信息可以看出:只支持 i386 和 arm64 處理器的指令集,

最后只需要將制作的 Static.a 文件和之前漏出的頭文件放入到項目中既可,再也不用擔心源碼暴漏或別人隨意修改你的代碼了,不過如果有圖片資源,圖片資源是不能打進.a的,需要在外面添加的哦。

最終效果如下截圖:

模擬器:

真機:


制作通用動態庫

在我制作真機上面的動態庫的基礎上,首先新建一個Aggregate Target? 我這里命名為:GeneralWithDynamic。 File——New——Target——Cross-platform——Aggregate? 如下截圖

添加script到新建的Target,然后在script中添加如下信息


# Sets the target folders and the final framework product.

#如果工程名稱和Framework的Target名稱不一樣的話,要自定義FMKNAME

#例如: FMK_NAME = "MyFramework"

FMK_NAME=${PROJECT_NAME}

# Install dir will be the final output to the framework.

# The following line create it in the root folder of the current project.

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

# Working dir will be deleted after the framework creation.

WRK_DIR=build

DEVICE_DIR=${WRK_DIR}/Release-iphoneos/${FMK_NAME}.framework

SIMULATOR_DIR=${WRK_DIR}/Release-iphonesimulator/${FMK_NAME}.framework

# -configuration ${CONFIGURATION}

# Clean and Building both architectures.

xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphoneos clean build

xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphonesimulator clean build

# Cleaning the oldest.

if [ -d "${INSTALL_DIR}" ]

then

rm -rf "${INSTALL_DIR}"

fi

mkdir -p "${INSTALL_DIR}"

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

# Uses the Lipo Tool to merge both binary files (i386 + armv6/armv7) into one Universal final product.

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

rm -r "${WRK_DIR}"

open "${INSTALL_DIR}"

添加信息之后,點擊運行剛剛新建的GeneralWithDynamic,如果沒有異常的話,會自動彈出生成的Framework文件, 然后查看Framework支持哪些架構,在終端輸入:lipo? -info? 然后將生成后的Framework拖進終端 ,回車(和上面查看靜態庫支持哪些架構是一樣的),最后將這個Framework添加到項目中運行即可,如下截圖

最后就是測試使用動態庫,我已經在上一篇文章中寫明,地址如下:制作和使用動態庫

最后:上面所訴的就是制作Debug(調試)下的通用靜態庫和動態庫,如果需要制作Release(發布)下的,只需要通過下面截圖將Debug改為Release,運行后生成對應的Release文件,其他步驟和上面一致即可。

制作發布后的靜態庫中的.a文件支持命令集如下:

PS:有問題可以通過QQ:1205632644聯系本人!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容