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.
# 若是工程名称和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 -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 ===============================================