iOS开发之Xcode多工程联编,打包静态库

最近项目要加快开发速度,所以想到了把一大堆第三方库打成静态包的方法,以下记录一下流程,以防以后用到忘记了

1.创建一个静态库工程,不多讲,百度都有

2.将静态库文件拉进项目的主工程,因为我主项目用的cocoapods管理,所以在podfile文件里面需要修改以下,使cocoapods管理两个工程文件


platform :ios,'8.0'

inhibit_all_warnings!

#use_frameworks!  使用这行以后makeframework工程打不了静态库文件

source 'https://github.com/CocoaPods/Specs.git'

workspace 'xxx.xcworkspace'

defshared_pods

pod 'a'

pod'b'

end

target'主工程名称'do

    shared_pods

end

target '项目名称' do

   project'MakeFrameWork/MakeFrameWork.xcodeproj' //项目静态库工程,写上路径,不然cocoapods找不到的

  pod'YYKit'

  pod'SDWebImage'

  pod'FMDB', '~> 2.6.2' # 为了兼容GYDataCenter

end


3.接下来 pod install 

4.为静态库工程弄一个编译的脚本,打出来的包就可以自动合并了(选中progect  在targets下的+号添加一个aggregate的 target,然后复制下面的脚本就可以了) 注意,用脚本编译的话如果出错是不会报错的,而是直接显示success 所以要看弹出的文件夹里的framework里面有没有 真的静态库文件,如果只是一个header,那就是有错误。



#!/bin/sh

#要build的target名

TARGET_NAME=${PROJECT_NAME}

if[[ $1]]

then

TARGET_NAME=$1

fi

UNIVERSAL_OUTPUT_FOLDER="${SRCROOT}/${PROJECT_NAME}_Products/"

#创建输出目录,并删除之前的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/"

forfileinls $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}"

5.编译中会遇到一个 lpods-framework xxx not a library 的问题,记不太得了,把build phases下的Link Binary with Library 下的a包删除就可以解决了

6.编译通过以后在主工程的general里把生成的a包拉进去就可以直接关联了,然后运行 OK,节约生命,从我做起

你可能感兴趣的:(iOS开发之Xcode多工程联编,打包静态库)