【问题标题】:Universal Framework Binaries: Why Build Simulator and Archive Device?通用框架二进制文件:为什么要构建模拟器和存档设备?
【发布时间】:2018-05-22 22:03:41
【问题描述】:

我正在使用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

请注意,archive 操作用于生成设备(arm64 架构),而 build 操作用于生成模拟器(x86_64 架构)。


在另一篇题为 iOS 9 Universal Cocoa Touch Frameworks 的文章中,作者评论道:“请注意,您必须使用模拟器构建并使用设备存档才能获得通用。”


那么,buildarchive 有何不同?为什么不两者都建?

【问题讨论】:

    标签: ios xcode


    【解决方案1】:

    那么,构建 vs 归档是怎么回事?为什么不两者都建?

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

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

    附:我已经在另一个答案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
    

    【讨论】:

    • 感谢您的回复,但我认为您没有回答问题。您指出我们无法向应用商店提交通用二进制文件。好的,正确。但我的问题是关于有目的地创建通用二进制文件的过程
    • 我很抱歉。我误读了这个问题。我已经用更多信息更新了答案。
    猜你喜欢
    • 2016-08-31
    • 1970-01-01
    • 2018-07-01
    • 1970-01-01
    • 2019-01-10
    • 2011-11-11
    • 2017-03-23
    • 2021-04-11
    • 1970-01-01
    相关资源
    最近更新 更多