1. 程式人生 > >iOS Framework製作

iOS Framework製作

建立工程

File->New->project->Cocoa Touch Static Library

然後要求你輸入Product Name

Product Name 為你framework的名字,例如以後你的framework叫Example.framework,那麼Product Name 就叫 Example

工程設定

選中TARGETS 中的Example(小房子圖示)

切換到Build Settings,設定
- Dead Code Stripping -> NO
- Strip Debug Symbols During Copy -> NO
- Strip Style -> Non-Clobal Symbols

新增檔案

然後切換到 Build Phases,點一下選項卡中的空白處

然後選擇工具欄中的Editor->Add Build Phase->Add Copy Header Build Phase(如果是灰色的不能點選,那麼點一下 Build Phases選項卡中的空白處就出來了)

這時候Build Phases 中會出現Headers 下拉列表

將你需要的.h和.m檔案複製、新增到你的Framework工程

這時候你會發現Headers 中的Project 出現了你剛剛新增的.h檔案

將想暴露出來的.h檔案拉到Public

設定靜態庫指令碼

Editor->Add Build Phase -> Add Run Script Build Phase
(如果是灰色的不能點選,那麼點一下 Build Phases選項卡中的空白處就出來了)

雙擊標題Run Script ,重新命名為 Build Framework

然後在文字框中貼上以下指令碼

set -e

export FRAMEWORK_LOCN="${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.framework"

# Create the path to the real Headers die
mkdir -p "${FRAMEWORK_LOCN}/Versions/A/Headers"

# Create the required symlinks
/bin/ln -sfh A "${FRAMEWORK_LOCN}/Versions/Current"
/bin/ln -sfh Versions/Current/Headers "${FRAMEWORK_LOCN}/Headers" /bin/ln -sfh "Versions/Current/${PRODUCT_NAME}" \ "${FRAMEWORK_LOCN}/${PRODUCT_NAME}" # Copy the public headers into the framework /bin/cp -a "${TARGET_BUILD_DIR}/${PUBLIC_HEADERS_FOLDER_PATH}/" \ "${FRAMEWORK_LOCN}/Versions/A/Headers"

建立Aggregate

選中TARGETS ,點選+號,找到iOS->Other->Aggregate,點選Next,將目標命名為Framework

選中Framework,展開Target Dependencies,點選+號,選中Example

切換到Build Pheses 選項卡,點選Editor->Add Build Phase->Add Run Script Build Phase,建立一個新的Run Script Build Phase。雙擊Run Script,重新命名指令碼的名字,這次命名為MultiPlatform Build,貼上Bash指令碼

set -e

# If we're already inside this script then die
if [ -n "$RW_MULTIPLATFORM_BUILD_IN_PROGRESS" ]; then
exit 0
fi
export RW_MULTIPLATFORM_BUILD_IN_PROGRESS=1

RW_FRAMEWORK_NAME=${PROJECT_NAME}
RW_INPUT_STATIC_LIB="lib${PROJECT_NAME}.a"
RW_FRAMEWORK_LOCATION="${BUILT_PRODUCTS_DIR}/${RW_FRAMEWORK_NAME}.framework"
function build_static_library {
    # Will rebuild the static library as specified
    #     build_static_library sdk
    xcrun xcodebuild -project "${PROJECT_FILE_PATH}" \
    -target "${TARGET_NAME}" \
    -configuration "${CONFIGURATION}" \
    -sdk "${1}" \
    ONLY_ACTIVE_ARCH=NO \
    BUILD_DIR="${BUILD_DIR}" \
    OBJROOT="${OBJROOT}" \
    BUILD_ROOT="${BUILD_ROOT}" \
    SYMROOT="${SYMROOT}" $ACTION
}

function make_fat_library {
    # Will smash 2 static libs together
    #     make_fat_library in1 in2 out
    xcrun lipo -create "${1}" "${2}" -output "${3}"
}
# 1 - Extract the platform (iphoneos/iphonesimulator) from the SDK name
if [[ "$SDK_NAME" =~ ([A-Za-z]+) ]]; then
RW_SDK_PLATFORM=${BASH_REMATCH[1]}
else
echo "Could not find platform name from SDK_NAME: $SDK_NAME"
exit 1
fi

# 2 - Extract the version from the SDK
if [[ "$SDK_NAME" =~ ([0-9]+.*$) ]]; then
RW_SDK_VERSION=${BASH_REMATCH[1]}
else
echo "Could not find sdk version from SDK_NAME: $SDK_NAME"
exit 1
fi

# 3 - Determine the other platform
if [ "$RW_SDK_PLATFORM" == "iphoneos" ]; then
RW_OTHER_PLATFORM=iphonesimulator
else
RW_OTHER_PLATFORM=iphoneos
fi

# 4 - Find the build directory
if [[ "$BUILT_PRODUCTS_DIR" =~ (.*)$RW_SDK_PLATFORM$ ]]; then
RW_OTHER_BUILT_PRODUCTS_DIR="${BASH_REMATCH[1]}${RW_OTHER_PLATFORM}"
else
echo "Could not find other platform build directory."
exit 1
fi
# Build the other platform.
build_static_library "${RW_OTHER_PLATFORM}${RW_SDK_VERSION}"

# If we're currently building for iphonesimulator, then need to rebuild
#   to ensure that we get both i386 and x86_64
if [ "$RW_SDK_PLATFORM" == "iphonesimulator" ]; then
build_static_library "${SDK_NAME}"
fi

# Join the 2 static libs into 1 and push into the .framework
make_fat_library "${BUILT_PRODUCTS_DIR}/${RW_INPUT_STATIC_LIB}" \
"${RW_OTHER_BUILT_PRODUCTS_DIR}/${RW_INPUT_STATIC_LIB}" \
"${RW_FRAMEWORK_LOCATION}/Versions/A/${RW_FRAMEWORK_NAME}"
# Ensure that the framework is present in both platform's build directories
cp -a "${RW_FRAMEWORK_LOCATION}/Versions/A/${RW_FRAMEWORK_NAME}" \
"${RW_OTHER_BUILT_PRODUCTS_DIR}/${RW_FRAMEWORK_NAME}.framework/Versions/A/${RW_FRAMEWORK_NAME}"

# Copy the framework to the user's desktop
ditto "${RW_FRAMEWORK_LOCATION}" "${HOME}/Desktop/${RW_FRAMEWORK_NAME}.framework"

編譯

選擇編譯目標 Example -> Generic iOS Device,鍵盤command+B 編譯

然後選擇編譯目標Framework -> Generic iOS Device,鍵盤command+B 編譯

切換到桌面看下,你要的framework 是不是躺在桌面等你了

驗證

驗證framework架構是否正確,開啟終端,cd到你的framework裡面,執行命令

xcrun lipo -info Example

輸出

Architectures in the fat file: Example are: armv7 i386 x86_64 arm64

恭喜您framework製作成功!

後記

如果有用到category,要在Build Setting 裡面設定 Other Linker Flags -> -ObjC -all_load

如果要重新編譯,記得先Clean一下工程,確保編譯成功

相關推薦

iOS Framework製作流程

新建工程選擇iOS —> Cocoa Touch Framework   361510885491_.pic_hd.jpg 進入建立好的工程刪除掉自帶的工程同名標頭檔案   371510885576_.pic_hd.jpg

iOS Framework製作

建立工程 File->New->project->Cocoa Touch Static Library 然後要求你輸入Product Name Product Name 為你framework的名字,例如以後你的framework叫E

iOS framework製作 帶你走出那些坑

iOS framework製作  帶你走出那些坑  Xcode8 補充知識: 模擬器:iphone4s-5 : i386, iphone5s-6plus : x86_64。 真機:iphone3gs

iOS 靜態庫製作Framework製作,Bundle製作

在上一篇教程(中譯版)中,你學到了怎麼樣建立一個可複用的圓形旋鈕控制元件。然而你可能不清楚怎樣讓其他開發者更方便地去複用它。 如果你想將你開發的控制元件與別人分享,一種方法是直接提供原始碼檔案。然而,這種方法並不是很優雅。它會暴露所有的實現細節,而這些實現你可能並不想開源出

iOS製作動態連結庫Framework

這幾天在做個SDK遇到了很多問題,現在做完了想把製作Framework的過程分享出來(我這個SDK中也包含了其他的第三方很多Framework,所以踩了很多坑) 首先需要建立個Framework工程: 然後會有個“工程名.h”檔案,有這麼一句話: In this hea

iOS 靜態庫製作(Xcode9.0,Framework製作,Bundle製作

基本知識:1. 庫類別靜態庫(.a 和.framework)動態庫(.liby和.framework)2.靜態庫和動態庫的區別2.1靜態庫平時我們用的第三方SDK基本上都是靜態庫。靜態庫在專案編譯時完整地拷貝至可執行檔案中,被多次使用就有多份冗餘拷貝。靜態庫很大的一個優點是減

ios framework 真機和模擬器合併

最近百度地圖的SDK更新了,為了相容IOS 9 ,不得不做更新。 下載SDK後發現,原來的靜態庫.a木有了。現在是framework,而且做了真機和模擬器兩個,顯然需要我們將兩個framework合併成一個。framework不能直接合並,也不需要,只要我們合併目錄下面的BaiduMapA

iOS Framework的建立

環境:Xcode 8 1.建立framework 2.修改相關配置 1)設定SDK適配的iOS系統版本號 2)選擇性新增: armv7s 原因: armv6, armv7, armv7s是ARM CPU的不同指令集, a

ios簡單製作淘搶購活動 滑動效果

最近做專案要做一個類似淘寶淘搶購 的活動效果,就簡單做了一個demo。菜鳥水平~~~~ 直接貼程式碼 - (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor

iOS xib製作開發購物數量加減的按鈕

        一般的製作方法是寫一個自定義的UIView的子類,在View上面進行控制元件的設定。然後在需要的時候 alloc init這個view即可。方法很不錯但不能滿足全部的需求,比如說Xib製作開發方法。下面總結了一下xib如何開發製作來實現此項功能,希望能幫助到

iOS製作一張水印圖片

如果這篇文章幫助到了您,希望您能點選一下喜歡或者評論,你們的支援是我前進的強大動力.謝謝! 我們在很多APP中都會看到水印圖片,例如下面微博中的一張圖片 下面就來分享一下怎麼製作一張水印圖片吧 首先生成水印圖片它最終是生成了一個新的圖片,生成圖片要用到了點陣圖上下文,但是點陣圖上下文需要我們手動

iOS gif製作

1、建立影象目標 CGImageDestinationRef destination;   2、建立輸出路徑(儲存的路徑) /*       path  */ 3、建立CFURLRef物件 CFURLRef url = CFURLCreat

ios製作 framework

xcode--file--new--project ios--framework & library--cocoa touch framework buld phases--header  將檔案拖入public中 把所需要的檔案拷入  buid setting配置

ios開發:Xcode8製作framework及使用

前言 網上關於Framework製作的教程數不勝數,然而都過於陳舊,最新的也是使用Xcode7的教程,而且有些設定也只給出步驟,並沒有給出原因,而且按照有些教程製作出的framework還有些問題,所以我把自己製作framework的過程記錄下來,並且使用

iOS製作framework時框架重複

在製作iOS的SDK供他人使用時,我們一般採用framework靜態庫和.a靜態庫。 這裡只講framework,當framework庫打包好了之後,那麼便會出現一個問題。  問題提出:    即使是我們自己開發SDK時,也不免會用到一些第三方框架。之後如果不做任何處理,

iOS製作framework以及引入到工程

Framework常識 蘋果平臺的連結庫除了靜態庫 .a 和 動態庫.dylib 之外,Mac OS/iOS 平臺還可以使用 Framework。Framework 實際上是一種打包方式,將庫的二進位制檔案,標頭檔案和有關的資原始檔打包到一起,方便管理

iOS 製作自己的FrameWork遇到的一些問題 以及FrameWork通過包合併支援arm64 armv7 i386 架構

前段時間工作上需要建立一個FrameWork,由於是第一次嘗試,所以遇到了一些問題,所以想列舉出來供大家參考。 首先編譯出來的FrameWork你需要檢視它對cpu架構的支援:如下 1.開啟終端,進入到你的FrameWork,cd xxxx/xxx.framework 2.

IOS 靜態庫的和.framework制作

https works select 其它 開源庫 sta cat neo working 什麽是庫? 庫是程序代碼的集合,是共享程序代碼的一種方式 根據源代碼的公開情況,庫可以分為2種類型 開源庫 公開源代碼,能看到具體實現 比如SDWebImage、AFNetwor

iOS封裝功能生成 .framework

source 不知道 creat tar 預處理器 hello 類方法 有一個 不同的 前言 如果你想將你開發的控件與別人分享,一種方法是直接提供源代碼文件。然而,這種方法並不是很優雅。它會暴露所有的實現細節,而這些實現你可能並不想開源出來。此外,開發者也可

iOS庫--.a與.framework

建立 一個 undle 顯示 sel ram 方式 模塊化 問題 一、什麽是庫? 庫是共享程序代碼的方式,一般分為靜態庫和動態庫。 二、靜態庫與動態庫的區別? 靜態庫:鏈接時完整地拷貝至可執行文件中,被多次使用就有多份冗余拷貝。 動態庫:鏈接時不復制,程序運行時由系統動態加