一、新建一个工程,左边选择iOS-Framework & Library 而后选择Cocoa Touch Framework。 xcode
二、如今能够建立所须要封装的类和方法。 架构
三、选中工程target里面的Build Phases,而后选择Build Phases下的 Headers选项,若没有该选项,则可经过Xcode的Editor-Add Build Phase-Add Headers Build Phase添加(若该项不能选择,请先点击Build Phases下面的空白处,激活该选项)。 iphone
四、把须要对外开放的.h文件从Headers的Project里面拖到Public里面。 测试
五、新工程里面会有一个与工程同名的.h文件,须要在这个文件里面导入对外开放的.h文件(#imporf<工程名/xxx.h>)。 ui
六、选择target里面的Build Settings,在Architectures里面添加Framework支持的架构,默认支持armv七、arm64,如今须要增长armv7s。 code
七、选择模拟器里面的Generic iOS Device ,记得先clean一下在run。 ip
八、点开Xcode左边导航栏的Products,如今能够看到里面的Framework由红色变成了黑色,选中它而后show in Finder, 把它copy到桌面。 get
九、打开终端,咱们来测试一下新建的Framework支持哪些架构。it
cd Desktop lipo -info FFrameworkT.framework/FFrameworkT Architectures in the fat file: FFrameworkT.framework/FFrameworkT are: armv7 armv7s arm64
十、如今新建一个single view 工程,选中target里面的General-Embeded Binaries,点击里面的+号,选择 Add oother... ,找到桌面的新建的Framework,而后照常使用。 io
十一、选择任意一个模拟器,run,这时出现了以下错误:
ld: warning: ignoring file /Users/AZmake/Desktop/testFFFF/FFrameworkT.framework/FFrameworkT, file was built for armv7 which is not the architecture being linked (x86_64): /Users/AZmake/Desktop/testFFFF/FFrameworkT.framework/FFrameworkT
Undefined symbols for architecture x86_64:
"_FFrameworkTVersionNumber", referenced from:
-[ViewController viewDidLoad] in ViewController.o"_FFrameworkTVersionString", referenced from:
-[ViewController viewDidLoad] in ViewController.o"_OBJC_CLASS_$_love", referenced from:
objc-class-ref in ViewController.old: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
这是什么缘由??????
由于新建的Framework不支持模拟器的x86_64架构,如今这个Framework只能在真机上运行。
我想要在模拟器上运行,怎么办??????
一、选中Framework的target,经过Xcode的Editor-Add target... , 而后选择最下面的Other - Aggregate,如何Framework的名字。
二、选中新添加的target(有个靶同样的图标),Build Phases,点击+号添加 Run Script,双击改行把名字 Run Script 改成工程的名字。
三、在脚本编辑区域写入以下命令:
# Sets the target folders and the final framework product. 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}"
四、如今把要编译的项目改成咱们添加的target,选择模拟器里面的Generic iOS Device ,记得先 clean 一下在run。若没有错误,完成后会有Finder弹窗出现,如今一个同时支持模拟器和真机的
Framework就完成了。咱们能够在项目的Products里面找到Framework。
五、把Framework复制到桌面看看它支持哪些架构。
cd Desktop/ lipo -info AZFrameworks.framework/AZFrameworks Architectures in the fat file: AZFrameworks.framework/AZFrameworks are: i386 x86_64 armv7 armv7s arm64
如今能够看到Framework支持i386 x86_64 armv7 armv7s arm64 这些架构。