- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
自从升级到 Xcode 和 iOS8 后,我在构建胖静态库时遇到了麻烦。有一些很好的说明here和 here但我认为第一条指令的部分内容和所有第二条指令都已过时。第一条说明使用Static iOS Framework,第二条说明使用Cocoa Touch Static Library。在 Xcode6 之前,我会使用 Static iOS Framework 但现在他们已将其重命名为 Cocoa Touch Framework 我不确定。
那么,对于初学者来说,我应该使用哪个来创建一个胖静态库?是 Cocoa Touch Framework 吗?还是 Cocoa Touch 静态库?
然后我创建一个新的聚合目标:
然后我创建一个运行脚本:
这是我正在使用的运行脚本(完整):
# 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 不存在。
这是我在升级之前习惯看到的:
这是我现在拥有的:
根据脚本,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/
我很好奇针对包含 armv7 和 i386 代码(用于模拟器)的通用(胖)库构建是否会增加应用程序分发包的大小,或者设备的构建过程是否会删除 i386 内容并进行调试信息? 最佳答案 如果我没记错的话
我正在尝试将我的对象打包为 64 字节(自行开发的属性),并且我需要保存 getter 和 setter 成员函数。 我真的很喜欢 std::function 但太大了: sizeof(std::fu
如果传递库不是 packaged使用 JAR 任务: By default, jar task in gradle builds an executable jar file from your pr
在Sublime Text编辑器中无法有效搜索问题。当前正在使用该编辑器的最新版本。 在用这些大块命中Ctrl + Shift + FI后,我想导航到下一个文件(在图像1/138中),但我不知道如何操
我正在重新设计旧应用程序——更确切地说是设计新应用程序,我想利用旧应用程序的某些部分在未来变得更有用和可扩展。 旧应用程序是一个厚桌面应用程序,用于处理在文件服务器上共享的数据。 (它使用 DBF 数
我无法为使用 Xcode 10.2+ 构建的通用(胖)框架的模拟器(设备编译成功)编译应用程序。应用程序使用来自 Objective-C 代码的框架。当从为设备构建切换到为模拟器构建时,Xcode 停
我有一个 fat jar 子,我试图在其中获取 Kotlin 的实例 ScriptEngine . 出于调试目的,我遍历可用的脚本引擎工厂并获取引擎。 val scriptEngineManager
我是一名优秀的程序员,十分优秀!