gpt4 book ai didi

objective-c - Xcode6 创建胖静态库 iOS 通用框架

转载 作者:太空狗 更新时间:2023-10-30 03:53:57 25 4
gpt4 key购买 nike

自从升级到 Xcode 和 iOS8 后,我在构建胖静态库时遇到了麻烦。有一些很好的说明herehere但我认为第一条指令的部分内容和所有第二条指令都已过时。第一条说明使用Static iOS Framework,第二条说明使用Cocoa Touch Static Library。在 Xcode6 之前,我会使用 Static iOS Framework 但现在他们已将其重命名为 Cocoa Touch Framework 我不确定。

那么,对于初学者来说,我应该使用哪个来创建一个胖静态库?是 Cocoa Touch Framework 吗?还是 Cocoa Touch 静态库

Cocoa Touch Framework

Cocoa Touch Static Library

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

Aggregate Target

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


Run Script


这是我正在使用的运行脚本(完整):

# 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

但是当我尝试构建时,我收到了这条消息:

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)

没错,文件不存在!请注意,在下面的第一张图片中,有一个 Unix 可执行文件 IdAirOpenCv。然后查看第二张图片,注意 IdAirOpenCv 不存在。

这是我在升级之前习惯看到的:

Old folder structure

这是我现在拥有的:

New folder structure

根据脚本,Unix 可执行文件 innerIDMobileLicense 应该位于所有三个框架文件夹中,与 Headers 和 Modules 文件夹处于同一级别。

有人知道我做错了什么吗?

最佳答案

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)

您遇到的这个 lipo 错误很可能是由于包含的目录不存在。

脚本是在xcode没有framework项目的时候创建的。

Lipo 基本上将不同架构的两个二进制构建链接在一起以构建一个胖版本。

So, for starters, which should I use to create a fat static library? Is it Cocoa Touch Framework? Or Cocoa Touch Static Library?

两者都行。 Lipo 可以链接框架内部的二进制文件和一个简单的静态库

我所做的是创建一个静态库项目和一个框架项目。将静态库目标设置为设备或模拟器(使用 sdk iphoneos 或 iphonesimulator。将 Universal Framework 脚本添加到框架项目中以使用其他 sdk 构建静态库并将 fat 二进制文件放入框架中。还将所需的 header 复制到框架项目。框架不需要编译任何东西。

关于objective-c - Xcode6 创建胖静态库 iOS 通用框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27284192/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com