如何使用现有的静态库构建可可触控框架
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 框架)创建静态库