微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ios – 如何存档包含自定义框架的应用程序?

我有一个我创建的 xcode框架项目,我可以编译成一个myframework.framework文件.编译之后,我将这个框架拖到我应用程序的Frameworks项目文件夹中,然后利用框架中的类,将适当的import语句添加到需要它的任何类;这允许我的应用程序成功编译与在框架中定义的类的引用.要使应用程序成功部署到我的设备,我还将我的自定义框架添加到我的目标的“嵌入式二进制文件”部分.有了这一切,我可以从xcode构建我的应用程序,并在我的设备上运行它.

当我尝试存档我的应​​用程序商店的应用程序时,我的问题出现.当我尝试这样做时,我会收到大量编译器错误,其中xcode表示它无法找到我自定义框架中定义的任何类的声明.

如何在xcode中设置存档,以便正确引用和嵌入我的自定义框架?

解决方法

您实际上不需要将其放在“嵌入式​​二进制文件”部分中.您只需要在“链接的框架和库”部分中.确保您的框架是通用框架(意味着可以为所有体系结构编译),并确保您具有正确的编译器标志集(-ObjC,如果您的框架有任何类别等)如果您的框架包含任何c代码,并且要在客户端应用程序中启用位代码,那么您可能还需要设置其他一些“Other C Flags”,您应该将“-fembed-bitcode”放在框架其他C标志这些是我需要做的事情来让我的框架应用程序到商店,我认为这只是一个误解,你需要把它放在嵌入式二进制文件中,以使其存档.

这是我用来生成通用框架的构建脚本.它建立在我的桌面上.如果您的框架在Swift中,您可以取消注释第8节.您要创建一个聚合目标,并在构建阶段将其添加为运行脚本.

# Merge Script

# 1
# Set bash script to exit immediately if any commands fail.
set -e

# 2
# Setup some constants for use later on.
FRAMEWORK_NAME="MyFramework"

# 3
# If remnants from a prevIoUs build exist,delete them.
if [ -d "${SRCROOT}/build" ]; then
rm -rf "${SRCROOT}/build"
fi

# 4
# Build the framework for device and for simulator (using
# all needed architectures).
xcodebuild -target "${FRAMEWORK_NAME}" -configuration Release -arch arm64 -arch armv7 -arch armv7s only_active_arch=no defines_module=yes -sdk "iphoneos"
xcodebuild -target "${FRAMEWORK_NAME}" -configuration Release -arch x86_64 -arch i386 only_active_arch=no defines_module=yes -sdk "iphonesimulator"

# 5
# Remove .framework file if exists on Desktop from prevIoUs run.
if [ -d "${HOME}/Desktop/${FRAMEWORK_NAME}.framework" ]; then
rm -rf "${HOME}/Desktop/${FRAMEWORK_NAME}.framework"
fi

# 6
# copy the device version of framework to Desktop.
cp -r "${SRCROOT}/build/Release-iphoneos/${FRAMEWORK_NAME}.framework" "${HOME}/Desktop/${FRAMEWORK_NAME}.framework"

# 7
# Replace the framework executable within the framework with
# a new version created by merging the device and simulator
# frameworks' executables with lipo.
lipo -create -output "${HOME}/Desktop/${FRAMEWORK_NAME}.framework/${FRAMEWORK_NAME}" "${SRCROOT}/build/Release-iphoneos/${FRAMEWORK_NAME}.framework/${FRAMEWORK_NAME}" "${SRCROOT}/build/Release-iphonesimulator/${FRAMEWORK_NAME}.framework/${FRAMEWORK_NAME}"

# 8
# copy the Swift module mappings for the simulator into the
# framework.  The device mappings already exist from step 6.
#cp -r "${SRCROOT}/build/Release-iphonesimulator/${FRAMEWORK_NAME}.framework/Modules/${FRAMEWORK_NAME}.swiftmodule/" "${HOME}/Desktop/${FRAMEWORK_NAME}.framework/Modules/${FRAMEWORK_NAME}.swiftmodule"

# 9
# Delete the most recent build.
if [ -d "${SRCROOT}/build" ]; then
rm -rf "${SRCROOT}/build"
fi

一旦你的框架在桌面上,如果你进入它的内部,就会有一个与你的框架名称相同的文本文档.如果您导航到它,并在终端上运行命令“lipo -info”,您应该得到以下输出

Architectures in the fat file: MyFramework are: armv7 armv7s i386 x86_64 arm64

原文地址:https://www.jb51.cc/iOS/330430.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐