20190314日更新:
還是.framework的打包問題,因為framework中用到第三方庫,第三方庫通過Cocoapods引入,打包時發(fā)現(xiàn)在Xcode中編譯和通過xcodebuild -target xxx命令編譯效果不同,通過-target命令會報錯,如圖,我這里時找不到依賴的protobuf的文件。

屏幕快照 2019-03-14 17.55.27.png
多方嘗試之后,發(fā)現(xiàn)在項目依賴中把libPods-xxx.a的link移除。通過命令行可以編譯成功。目前不明白原理,先將方法記錄在此。
以下是原文:
先說下我遇到的情況,需求是將一個包含cocoapods的framework打成混合的framework,這里用到lipo -create,有很多優(yōu)秀的博客都提到了如何打包的問題,同時還提到了一種更加方便的方式,使用Aggregate(我的坑也就是這里來的)。
- 坑
填坑過程不再贅述,這里貼一下報錯信息。標(biāo)題里是我通過百度搜索的關(guān)鍵字,但是我運(yùn)氣不太好,沒能找到有效的答案。

屏幕快照 2017-10-08 14.41.33.png
原因
說起來其實很簡單,還記得在做xcodebuild打包的時候有一句話,如果項目包含workspace,請使用-workspace關(guān)鍵字替代-target。是的,問題就是這么簡單,前文博客里提供的腳本是針對一般的framework打包的,并沒有使用workspace,而我的項目因為用到了cocoapods,所以悲劇了。后記
后面在build過程中還有遇到一個路徑不對導(dǎo)致的報錯問題,修改路徑成有效路徑就好。貼一下修改之后的腳本,適用于帶有.xcworkspace的項目。
# 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=${SRCROOT}/build
DEVICE_DIR=${WRK_DIR}/Release-iphoneos/${FMK_NAME}.framework
SIMULATOR_DIR=${WRK_DIR}/Release-iphonesimulator/${FMK_NAME}.framework
# -configuration ${CONFIGURATION}
# CONFIGURATION_BUILD_DIR=xxx
# Clean and Building both architectures.
# 適用于帶有.xcworkspace ,否則請查看:(http://yzlyty.github.io/2016/11/22/create-a-framework-and-bundle-containing-resources-for-ios-oc/)
xcodebuild -configuration "Release" -workspace "${FMK_NAME}".xcworkspace -scheme "${FMK_NAME}" -sdk iphoneos clean build CONFIGURATION_BUILD_DIR=${WRK_DIR}/Release-iphoneos
xcodebuild -configuration "Release" -workspace "${FMK_NAME}".xcworkspace -scheme "${FMK_NAME}" -sdk iphonesimulator clean build CONFIGURATION_BUILD_DIR=${WRK_DIR}/Release-iphonesimulator
# 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}"