【问题标题】:iOS : Universal framework is creating issue while submitting to app storeiOS:通用框架在提交到应用商店时产生问题
【发布时间】:2015-12-06 17:12:56
【问题描述】:

我们创建了一个框架并将其集成到我的一个应用程序中。我可以使用此框架运行和调试应用程序,但在提交到应用程序商店时收到以下错误。

请注意,我使用的是 xcode 6.3。

错误:“不支持的架构”,XYZ 的可执行文件包含不支持的架构“[x86_64, i386]”。

我在创建框架代码时在设置中添加了以下脚本
框架(静态库)使其通用。

 **Options**


REVEAL_ARCHIVE_IN_FINDER=true

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 -project ${PROJECT_NAME}.xcodeproj -sdk iphonesimulator -target ${PROJECT_NAME} -configuration ${CONFIGURATION} clean build CONFIGURATION_BUILD_DIR=${BUILD_DIR}/${CONFIGURATION}-iphonesimulator | echo

 xcodebuild -project ${PROJECT_NAME}.xcodeproj -sdk iphoneos -target ${PROJECT_NAME} -configuration ${CONFIGURATION} clean build CONFIGURATION_BUILD_DIR=${BUILD_DIR}/${CONFIGURATION}-iphoneos | echo

 #xcodebuild -target ${PROJECT_NAME} ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos  BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" | echo

#xcodebuild -target ${PROJECT_NAME} ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphonesimulator  BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" | echo



 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 fat universal binary


lipo "${SIMULATOR_LIBRARY_PATH}/${FRAMEWORK_NAME}"     "${DEVICE_LIBRARY_PATH}/${FRAMEWORK_NAME}" -create -output     "${FRAMEWORK}/${FRAMEWORK_NAME}" | echo



 On Release, copy the result to desktop folder


if [ "${CONFIGURATION}" == "Release" ]; then
mkdir "${HOME}/Desktop/${FRAMEWORK_NAME}-${CONFIGURATION}-iphoneuniversal/"
cp -r "${FRAMEWORK}" "${HOME}/Desktop/${FRAMEWORK_NAME}-${CONFIGURATION}-    iphoneuniversal/"
fi



 If needed, open the Framework folder


if [ ${REVEAL_ARCHIVE_IN_FINDER} = true ]; then
if [ "${CONFIGURATION}" == "Release" ]; then
open "${HOME}/Desktop/${FRAMEWORK_NAME}-${CONFIGURATION}-iphoneuniversal/"
else
open "${UNIVERSAL_LIBRARY_DIR}/"
fi
fi

谁能帮我创建可以调试(意味着在模拟器中运行)、运行(在设备中)并提交到应用商店的框架。

提前致谢。

【问题讨论】:

    标签: ios static-libraries universal


    【解决方案1】:

    您仍然可以使用通用框架,但必须去除不需要的架构。我还没有尝试过,但是,我在这里找到了相同问题的示例,其中包含关于剥离不需要的架构的解决方案。 here

    【讨论】:

      【解决方案2】:

      您不能将通用胖二进制文件用于上传到 AppStore 的应用程序。如果你想用你的框架上传,只为设备构建它。

      【讨论】:

      • 如果我想像其他人一样发布一个在设备、应用商店和模拟器上工作的通用框架怎么办?
      • 通用框架从未与应提交到 AppStore 的应用程序捆绑在一起。您可以尝试在脚本中使用lipo -remove arch_type,该脚本应该准备应用程序以上传到 AppStore 以删除模拟器的二进制切片(Apple 不会将具有冗余架构切片的二进制文件传递到 AppStore)
      • 那么像 Parse.framework 这样的框架是如何成功构建它的?
      • 这是个好问题,我也想知道。根据我自己在框架分发方面的经验,我可以说一些客户试图使用通用二进制文件,而 Application Loader 明确指出了我的框架二进制文件。通常,要添加动态框架,它应该放在Embedded Frameworks 部分,但是 Parse 在他们的简单项目中没有这样做,所以我很好奇他们是否使用包装到@987654323 中的静态库@ 与否(如果是,则意味着 Apple 传递了胖静态库——这也很奇怪)。
      • 是的,真的不知道。所以这个问题仍然悬而未决。我见过很多其他框架都是这样工作的,所以我想有一种方法可以避免让框架用户运行 lipo 命令。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-01
      • 1970-01-01
      • 2014-11-15
      • 2016-11-03
      • 2015-06-28
      • 2015-04-12
      • 1970-01-01
      相关资源
      最近更新 更多