Pat*_*cia 5 frameworks objective-c static-libraries xcode6
自从升级到Xcode和iOS8以来,我一直无法构建胖静态库.这里和这里有一些非常好的说明,但我认为第一条指令的部分内容和所有第二条指令都已过时.第一条说明使用静态iOS框架,第二条说明说使用Cocoa Touch静态库.在Xcode6之前,我会使用静态iOS框架,但现在他们已经将它重命名为Cocoa Touch Framework,我不确定.
那么,对于初学者,我应该用哪个创建胖静态库?它是Cocoa Touch Framework吗?还是可可触摸静态库?


然后我创建一个新的聚合目标:

然后我创建一个运行脚本:

这是我正在使用的运行脚本(完整):
# This script is based on Jacob Van Order's answer on apple dev forums
https://devforums.apple.com/message/971277
# See also http://spin.atomicobject.com/2011/12/13/building-a-universal-framework-for-ios/ for the start
# To get this to work with a Xcode 6 Cocoa Touch Framework, create Framework
# Then create a new Aggregate Target. Throw this script into a Build Script Phrase on the Aggregate
######################
# Options
######################
REVEAL_ARCHIVE_IN_FINDER=true
FRAMEWORK_NAME="${PROJECT_NAME}"
SIMULATOR_LIBRARY_PATH="${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${FRAMEWORK_NAME}.framework"
DEVICE_LIBRARY_PATH="${BUILD_DIR}/${CONFIGURATION}-iphoneos/${FRAMEWORK_NAME}.framework"
UNIVERSAL_LIBRARY_DIR="${BUILD_DIR}/${CONFIGURATION}-iphoneuniversal"
FRAMEWORK="${UNIVERSAL_LIBRARY_DIR}/${FRAMEWORK_NAME}.framework"
######################
# Build Frameworks
######################
xcodebuild -project ${PROJECT_NAME}.xcodeproj -sdk iphonesimulator -target ${PROJECT_NAME} -configuration ${CONFIGURATION} clean build CONFIGURATION_BUILD_DIR=${BUILD_DIR}/${CONFIGURATION}-iphonesimulator | echo
xcodebuild -project ${PROJECT_NAME}.xcodeproj -sdk iphoneos -target ${PROJECT_NAME} -configuration ${CONFIGURATION} clean build CONFIGURATION_BUILD_DIR=${BUILD_DIR}/${CONFIGURATION}-iphoneos | echo
#xcodebuild -target ${PROJECT_NAME} ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" | echo
#xcodebuild -target ${PROJECT_NAME} ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphonesimulator BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" | echo
######################
# Create directory for universal
######################
rm -rf "${UNIVERSAL_LIBRARY_DIR}"
mkdir "${UNIVERSAL_LIBRARY_DIR}"
mkdir "${FRAMEWORK}"
######################
# Copy files Framework
######################
cp -r "${DEVICE_LIBRARY_PATH}/." "${FRAMEWORK}"
######################
# Make fat universal binary
######################
lipo "${SIMULATOR_LIBRARY_PATH}/${FRAMEWORK_NAME}" "${DEVICE_LIBRARY_PATH}/${FRAMEWORK_NAME}" -create -output "${FRAMEWORK}/${FRAMEWORK_NAME}" | echo
######################
# On Release, copy the result to desktop folder
######################
if [ "${CONFIGURATION}" == "Release" ]; then
mkdir "${HOME}/Desktop/${FRAMEWORK_NAME}-${CONFIGURATION}-iphoneuniversal/"
cp -r "${FRAMEWORK}" "${HOME}/Desktop/${FRAMEWORK_NAME}-${CONFIGURATION}-iphoneuniversal/"
fi
######################
# If needed, open the Framework folder
######################
if [ ${REVEAL_ARCHIVE_IN_FINDER} = true ]; then
if [ "${CONFIGURATION}" == "Release" ]; then
open "${HOME}/Desktop/${FRAMEWORK_NAME}-${CONFIGURATION}-iphoneuniversal/"
else
open "${UNIVERSAL_LIBRARY_DIR}/"
fi
fi
Run Code Online (Sandbox Code Playgroud)
但是当我尝试构建时,我会收到以下消息:
fatal error: lipo: can't open input file: /Users/pdl/Library/Developer/Xcode/DerivedData/innerIDMobileLicense-blnxjfvoxnqfelftmzojgdwhvazk/Build/Products/Debug-iphonesimulator/innerIDMobileLicense.framework/innerIDMobileLicense (No such file or directory)
Run Code Online (Sandbox Code Playgroud)
这是正确的,文件不存在!请注意,在下面的第一张图中,有一个Unix可执行文件IdAirOpenCv.然后看第二张图片,注意到IdAirOpenCv不存在.
这是我在升级之前经常看到的:

这就是我现在拥有的:

根据该脚本,Unix可执行文件innerIDMobileLicense应位于与Headers和Modules文件夹相同级别的所有三个框架文件夹中.
有没有人知道我做错了什么?
小智 2
致命错误:lipo:无法打开输入文件:/Users/pdl/Library/Developer/Xcode/DerivedData/innerIDMobileLicense-blnxjfvoxnqfelftmzojgdwhvazk/Build/Products/Debug-iphonesimulator/innerIDMobileLicense.framework/innerIDMobileLicense(没有这样的文件或目录)
您遇到的这个 lipo 错误很可能是由于包含的目录不存在。
该脚本是在xcode没有框架项目时创建的。
Lipo 基本上将不同架构的两个二进制构建链接在一起以构建一个胖架构。
那么,对于初学者来说,我应该使用哪个来创建胖静态库?是Cocoa Touch框架吗?或者 Cocoa Touch 静态库?
任何一个都会起作用。Lipo可以链接框架内的二进制文件和一个简单的静态库
我所做的是创建一个静态库项目和一个框架项目。将静态库目标设置为设备或模拟器(使用 sdk iphoneos 或 iphonesimulator)。将通用框架脚本添加到框架项目中,以使用其他 sdk 构建静态库,并将 fat 二进制文件放入框架中。还将所需的标头复制到框架项目。框架不需要编译任何东西。
| 归档时间: |
|
| 查看次数: |
6209 次 |
| 最近记录: |