通用框架二进制文件:为什么要构建模拟器和存档设备?

时间:2017-12-08 16:07:55

标签: ios xcode

我正在使用script provided by Greg Brown来成功构建通用框架二进制文件。以下是调用xcodebuild的两行:

  

xcodebuild archive -project $ FRAMEWORK_DIR / $ FRAMEWORK.xcodeproj -scheme $ FRAMEWORK -sdk iphoneos SYMROOT = $ BUILD

     

xcodebuild build -project $ FRAMEWORK_DIR / $ FRAMEWORK.xcodeproj -target $ FRAMEWORK -sdk iphonesimulator SYMROOT = $ BUILD

请注意,归档操作用于生成设备(arm64体系结构),而 build 操作用于生成模拟器(x86_64体系结构)。 / p>

在另一篇名为iOS 9 Universal Cocoa Touch Frameworks的文章中,作者评论说:“请注意,您必须使用模拟器进行构建,并使用存档进行设备获取普遍的。“

那么,构建存档的关系是什么?为什么不建两个?

1 个答案:

答案 0 :(得分:2)

  

那么,构建与存档有什么关系?为什么不建两个?

它的工作方式是Apple不允许将模拟器二进制文件(x86_64和i386)上传到应用商店。如果您的框架包含这些二进制文件,那么您将无法将包含的应用程序上载到应用商店。

您将使用所有可能的二进制文件分发框架,以便它可以在模拟器和设备上运行。但是想在上传到应用程序商店之前剥离那些模拟器二进制文件。

P.S。我在另一个答案here中详细解释了这一点。答案还解释了为什么在通过Cocoapods使用框架时不存在该问题。

编辑:

构建与归档之间的区别在于归档接受要运行的方案。

An Xcode scheme defines a collection of targets to build, a configuration to use when building, and a collection of tests to execute.

此外,

You cannot use archive option for the iOS Simulator platform.

您基本上可以为两个平台使用xcodebuild构建。你基本上会得到相同的结果。我用来构建框架的命令如下(两个命令都使用构建操作):

xcodebuild -target ${PROJECT_NAME} ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build
xcodebuild -target ${PROJECT_NAME} ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphonesimulator BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build
相关问题