iOS:在提交到应用商店时,通用框架出现问题

3
我们创建了一个框架并将其集成到我们的应用程序中。我能够使用这个框架运行和调试应用程序,但是当我提交到应用商店时,我收到以下错误信息。
请注意,我正在使用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

有没有人可以帮我创建一个框架,可以在模拟器中调试(也就是运行),在设备上运行,并且还可以提交到App Store。

提前感谢。

2个回答

3

如果您想将应用上传到AppStore,则无法使用通用fat二进制文件。如果您想使用自己的框架上传,请仅为设备构建。


1
如果我想发布一个像其他人一样可以在设备、应用商店和模拟器上运行的通用框架,该怎么办? - narek.gevorgyan
通用框架不应与提交到AppStore的应用程序捆绑在一起。您可以尝试在准备上传到AppStore的脚本中使用“lipo -remove arch_type”命令,以删除模拟器二进制切片(苹果公司不会将带有冗余架构切片的二进制文件传递到AppStore)。 - Serhii Mamontov
那么像Parse.framework这样的框架是如何成功构建并使其在任何地方都能正常工作的呢? - narek.gevorgyan
2
这是一个好问题,我也想知道。根据我自己的框架分发经验,我可以说一些客户尝试使用通用二进制文件,并且应用程序加载器明确指向我的框架二进制文件。通常,要添加动态框架,它应该放置在“嵌入式框架”部分中,但_Parse_在他们的简单项目中没有这样做,所以我很好奇他们是否使用静态库包装成.framework(如果是这样,这意味着苹果通过了fat静态库-这也很奇怪)。 - Serhii Mamontov
@Japes 有人向我推荐了这个链接 - niczm25
显示剩余2条评论

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接