iOS 创建framework·bundler ·多个proje
2019-05-24 本文已影响0人
Mr__Peng__
创建framework
-
Xcode新建Test工程 选择 Cocoa Touch Framework
-
创建功能类,并实现功能
-
选中Target,在buildSetting更改参数
a) Link With Standard Libraries -> NO
b) Mach-O Type -> Static Library -
设置Build Phases -> Headers
公开的文件拖到public,隐藏的放到Private 或 Project -
在Test.h(必须公开),导入公开的.h
-
打包.framework
a) 新建一个Target ->选择Cross-platform选项卡中的Aggregate
b) 选中新建Target -> Build Phases -> + -> Run Script,添加以下脚本
#!/bin/sh
#要build的target名
TARGET_NAME=${PROJECT_NAME}
if [[ $1 ]]
then
TARGET_NAME=$1
fi
UNIVERSAL_OUTPUT_FOLDER="${SRCROOT}/${PROJECT_NAME}/"
#创建输出目录,并删除之前的framework文件
mkdir -p "${UNIVERSAL_OUTPUT_FOLDER}"
rm -rf "${UNIVERSAL_OUTPUT_FOLDER}/${TARGET_NAME}.framework"
#分别编译模拟器和真机的Framework
xcodebuild -target "${TARGET_NAME}" ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build
xcodebuild -target "${TARGET_NAME}" ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphonesimulator BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build
#拷贝framework到univer目录
cp -R "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${TARGET_NAME}.framework" "${UNIVERSAL_OUTPUT_FOLDER}"
#合并framework,输出最终的framework到build目录
lipo -create -output "${UNIVERSAL_OUTPUT_FOLDER}/${TARGET_NAME}.framework/${TARGET_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${TARGET_NAME}.framework/${TARGET_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphoneos/${TARGET_NAME}.framework/${TARGET_NAME}"
#删除编译之后生成的无关的配置文件
dir_path="${UNIVERSAL_OUTPUT_FOLDER}/${TARGET_NAME}.framework/"
for file in ls $dir_path
do
if [[ ${file} =~ ".xcconfig" ]]
then
rm -f "${dir_path}/${file}"
fi
done
#判断build文件夹是否存在,存在则删除
if [ -d "${SRCROOT}/build" ]
then
rm -rf "${SRCROOT}/build"
fi
rm -rf "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator" "${BUILD_DIR}/${CONFIGURATION}-iphoneos"
#打开合并后的文件夹
open "${UNIVERSAL_OUTPUT_FOLDER}"
c) Framework -> target,分别在真机和模拟器上运行一次
d) 新建target 运行一次,选中打开文件中的frame
e) 其他人可以开始使用制作framework
注意:1.如果使用了category,使用framework的程序运行时会crash,需要工程中 other linker flags添加两个参数 -ObjC -all_load
2.一个静态库要有自己独有的前缀,所有类名、常量等都要加同样的前缀
3.注意命名冲突
bundle文件制作
新建一个文件夹,添加.bundle后缀,显示包内容,直接拖进去就行
多个Project
- 新建文件夹
- Xcode -> File New -> Workspace(建在新建文件夹下)
- 在新建文件夹下创建多个项目工程
- 打开workspace,左下角添加project
- 创建Podfile文件,
# Uncomment the next line to define a global platform for your project
# platform :ios, '8.0'
workspace 'New.xcworkspace' //workspace文件名
project 'Test/Test.xcodeproj' //主工程路径
target 'Test' do
platform :ios, '8.0'
project 'Test/Test.xcodeproj' //工程路径
pod 'Masonry'
end
target 'Test1' do
platform :ios, '8.0'
project 'Test1/Test1.xcodeproj' //工程路径
pod 'Masonry'
pod 'AFNetworking'
end