第一步:創(chuàng)建framwork工程
第二步:隨便取個名字:IQEngUI,然后點擊Next误辑,指定一個你要存的位置
第三步:通過前兩步驟會得到如下圖效果
第四步:修改配置,其中有兩處要修改
1、搜索:MACH_O_TYPE
選擇Static Library
2、還有一處是這樣的介杆,如果你的framework里面需要添加一些分類,那么需要在Other Linker Flags 添加-all_load(注意符號不要用中文寫了韭寸,all_load它的作用是加載靜態(tài)庫中所有文件春哨,all_load作用于所有的庫)
第五步 給你的framwork塞東西!棒仍!我就舉個例子添加一個類實現(xiàn)打印效果悲靴。
.H
.M
這時候臭胜,右邊有個選項框莫其,如下圖紅色框出的
我來解釋一下,如果你的文件要暴露出來給別人用的話耸三,選Public乱陡,不想給別人看見和使用的話選Project,(選Private感覺沒差仪壮,反正我沒選過:┑摺)』回到圖中爽彤,我的這個方法要暴露給別人用那么我要選Public。
選完Public之后缚陷,還需要在IQEngUI.h(相對我的framework)添加進去适篙,如圖:(ps:這個需要手動敲進去,沒有提示的s镆H陆凇!?)
第六步 合成
其實到這里framework你就差不多弄好了虎锚,這里如果你run的話:
會生成framwork硫痰,這個可以用。但是但是4芑ぁPО摺!你選模擬器run的只能給模擬器用柱徙,選真機run的只能給真機用缓屠。這里面framwork分4種税娜,模擬器的release和debug,真機的release和debug藏研。為了得到高效又能給真機和模擬用的framework的話敬矩,需要合成!蠢挡!
合成的話我說兩種:
第一種:使用終端合成弧岳,自行百度。哈哈
第二種:腳本合成业踏,本人推薦禽炬,并下面貼出腳本代碼和使用方法
1、首先:新建一個丑家伙出來
2勤家、這個東西何以用來運行腳本腹尖。
3、隨便取個名字伐脖,
热幔。
腳本:
#xcodebuild -project hvui.xcodeproj -target FrameworkMaker_Release;rm -rf build;
productName="${PROJECT_NAME}"
target="${productName}"
tmpDir="${PROJECT_TEMP_DIR}/build"
rm -rf "${tmpDir}"#清除編譯臨時文件
#編譯bundle
xcodebuild -target "${PROJECT_NAME}Bundle" -configuration "Release" -sdk "iphoneos" build SYMROOT="${tmpDir}" ONLY_ACTIVE_ARCH="NO" VALID_ARCHS="arm64 armv7 armv7s i386 x86_64"
function buildLibs(){
? ? sdks=("iphonesimulator" "iphoneos")
? ? configurations=("Debug" "Release")
? ? for configuration in ${configurations[@]}
? ? do
? ? for sdk in ${sdks[@]}
? ? do
? ? xcodebuild -target "${target}" -configuration "${configuration}" -sdk "${sdk}" build SYMROOT="${tmpDir}" ONLY_ACTIVE_ARCH="NO" VALID_ARCHS="arm64 armv7 armv7s i386 x86_64"
? ? done
? ? done
}
function lipoLibs(){
? ? #copy Release-iphoneos到 Frameworks 目錄,然后 lipo -c 一份
? ? ios_libs_dir="${SRCROOT}/../ios_libs"
? ? frameworkDir="${ios_libs_dir}/Frameworks"
? ? [ -d "${frameworkDir}" ] || mkdir -p "${frameworkDir}"
? ? cp -r "${ios_libs_dir}/Release-iphoneos/${productName}.framework" "${frameworkDir}/"
? ? #lipo -c ... -o ..
? ? lipo -c "${ios_libs_dir}/Release-iphoneos/${productName}.framework/${productName}" "${ios_libs_dir}/Release-iphonesimulator/${productName}.framework/${productName}" -o "${frameworkDir}/${productName}.framework/${productName}"
? ? rm -rf "${frameworkDir}/${productName}.framework/_CodeSignature"
}
function rmLibs(){
? ? ios_libs_dir="${SRCROOT}/../ios_libs"
? ? sdks=("iphonesimulator" "iphoneos")
? ? configurations=("Release")
? ? for configuration in ${configurations[@]}
? ? do
? ? for sdk in ${sdks[@]}
? ? do
? ? rm -rf "${ios_libs_dir}/${configuration}-${sdk}/${productName}.framework"
? ? done
? ? done
}
buildLibs
lipoLibs
#rmLibs
#cp to ios_libs
#cp -Rf "${SRCROOT}/ios_libs/Frameworks/${productName}.framework" "${SRCROOT}/../ios_libs/Frameworks/${productName}.framework"
4、把上面的腳本語句直接拷貝到這里面
5讼庇、設置framwork生成路徑
Debug:$(SRCROOT)/../ios_libs/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
Release:$(SRCROOT)/../ios_libs/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
設置原因是因為腳本是去這里找到4個framwork绎巨,然后合成他們,修改后如下圖所示
6蠕啄、現(xiàn)在只要選中這個场勤,然后點擊run就可以看到合并的framwork了。
成功之后(只要你不搞事歼跟,一般都會成功:拖薄!)哈街,會生成這樣
Framworks里面的就是你想要的支持模擬器和真機的留瞳。
到這制作framwork講完了,但是叹卷,這里面還是有很多學問的撼港,比如framwork怎么引用其他framwork,得注意什么骤竹。東西其實不難帝牡,理解了就不難,哈哈C纱А靶溜!
轉(zhuǎn)自知乎:https://zhuanlan.zhihu.com/p/24368343