Xcode 7 Framework製做流程詳情整理

1、打包Framework
xcode

一、新建iOS->Framework & Library->Cocoa Touch Framework架構

二、選擇next進入下一步iphone

三、在PROJECT->Deployment Target->iOS Deployment Target選擇你須要支持的最低系統。測試

一樣的操做在TARGETS中,Deployment Info->Deployment Targetui

四、因爲個人framework須要支持iOS7,因此在第二、3步中進行了相應的設置。Build時會發現有️ld: warning: embedded dylibs/frameworks only run on iOS 8 or later警告,這是由於工程默認編譯設置的是Dynamic Framework。這種編譯只有在iOS8之後才能使用。spa

五、針對第4步中所出現的問題,根據需求個人工程不須要使用動態framework,以使用其動態更新的功能。動態庫能夠分開發布,在運行時查找並存入內存,但蘋果只容許他本身用,到iOS8之後纔開放給開發者。所以,我須要將Dynamic Framework更換爲Static Library靜態模式。設置路徑爲Build Settings->Linking->Mach-O Type->Static Librarycode

六、這裏要注意,在編譯時,不要將圖片文件放在工程裏面,不然編譯後framework中會出現大量的零散圖片文件在裏面。這時須要將圖片等資源放在.bundle文件中。orm

七、這樣打包的framework依然有問題,若是你用了Category,別人在用你的framework時會發生崩潰。這時別人在引用時須要在工程中other linker flags中添加-objC若是依然有問題,再添加-all_load。圖片

八、終於編譯成功,但發現不少關於符號表的警告,這時須要將Generate Debug Symbols設置爲NO便可關閉符號表警告。ip

九、可是我須要支持bitcode,以上設置後並不能使framework支持bitcode,所以還須要進行額外的設置一個命令讓其支持bit code。在TAGETS的Build setting中搜索Other C Flags,添加命令「-fembed-bitcode」。一樣的設置在PROJECT中。若是不進行以上操做。別人在集成你的framework時能夠編譯,亦能夠真機測試。惟獨在打包時會發出警告並打包失敗。警告爲framework不支持bitcode!

十、不管SDK仍是Framework都須要暴露公共的頭文件以供使用者讀取和。在TARGETS->Build Phases->Headers裏面,有三種類別。Public(公共的),這裏存放供其餘人查看的header。Private(私有的)這裏存放私有的Header,以上兩個Headers存放位置都會暴露出來,全部人能夠查看。有些Header是不想給別人看到的。這種header放在第三個類Project中。

十一、打包。Edit Scheme->Build Configuration->選爲Release而後Run.

直接導出方法:

    1.添加 target --> other -->aggregate

    2.在新建的Target裏邊添加一個腳本:Build Phases -->new Run Script Phase

    3.填入下面腳本到 Run Script 

**查詢framewo支持架構:打開終端 lipo -info +路徑

# begin =============================================

# Sets the target folders and the final framework product.

# 若是工程名稱和FrameworkTarget名稱不同的話,要自定義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 -arch armv7 -arch armv7s -arch arm64 clean build

xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphonesimulator -arch x86_64 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 "${SRCROOT}/Products/"

# end ===============================================

相關文章
相關標籤/搜索