如何使用现有的静态库构建可可触控框架

Posted

技术标签:

【中文标题】如何使用现有的静态库构建可可触控框架【英文标题】:How to build cocoa touch frameworks with existing static libraries 【发布时间】:2014-11-26 20:03:15 【问题描述】:

我正在尝试使用 Xcode 6 中的现有静态库构建一个可可触摸框架。我已经在“其他链接器标志”选项中链接了所有必要的静态库,并且框架构建。

但是,框架的大小太小了,所以它看起来肯定没有正确构建。另外,我有很多缺失的符号应该包含在静态库中。

有人知道如何使用现有的静态库构建可可触摸框架吗?我需要哪些设置才能将所有静态库中的所有符号包含到我的框架中?

谢谢!

【问题讨论】:

【参考方案1】:

如果您只有一个库文件 (.a),您必须执行以下操作:

在 Xcode 6 中创建“Cocoa 触控框架”。 添加头文件。 添加库文件 (.a)。 添加聚合目标。 选择“Aggregate target”并在“Build Phases”中添加“New Run Script Phase”。 将此内容发布到脚本:
######################
# Options
######################

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 -scheme $PROJECT_NAME -sdk iphonesimulator -configuration $CONFIGURATION clean build CONFIGURATION_BUILD_DIR=$BUILD_DIR/$CONFIGURATION-iphonesimulator 2>&1

xcodebuild -scheme $PROJECT_NAME -sdk iphoneos -configuration $CONFIGURATION clean build CONFIGURATION_BUILD_DIR=$BUILD_DIR/$CONFIGURATION-iphoneos 2>&1

######################
# 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 an universal binary
######################

lipo "$PROJECT_DIR/YOURFOLDER/YOURLIBRARY.a" -create -output "$FRAMEWORK/$FRAMEWORK_NAME" | echo
open "$UNIVERSAL_LIBRARY_DIR/"
要生成框架,需要为设备编译新目标

【讨论】:

【参考方案2】:

您应该按照上述步骤创建一个聚合目标。

然后选择聚合目标 => Build Settings => Mach-O Type,将 Dynamic Library 改为 Static Library。此选项确定您的框架是否包含静态库的符号。

【讨论】:

【参考方案3】:

动态库仅适用于 ios 8。如果您需要在项目中使用动态库,请在常规选项卡中添加您的框架,包括链接框架和库以及嵌入式二进制文件。它会起作用的。

您可以更改静态库而不是动态库。构建设置 -> Mach-O -> 静态库,以及将部署目标更改为 iOS 7.0。在您的框架中更改这两项后,可以在 iOS 7.0 及更高版本上使用。然后包含您的静态库以将二进制文件与库链接。

【讨论】:

以上是关于如何使用现有的静态库构建可可触控框架的主要内容,如果未能解决你的问题,请参考以下文章

当数据不是静态的时,我应该如何保存大量数据。 iOS、可可触控、Obj-C

是否可以使用现有的第三方框架(如 metaio 框架)创建静态库

在可可触摸框架中隐藏实现

从现有的 python 包创建机器人框架库

如何使用 NSArraycontroller 在可可上创建 NSFetchedresultController?

我可以在自己的静态库项目中包含现有的静态库吗?