2017-09-25 25 views
3

应用。无法验证位码​​而临时发布出口存档 - 尝试的Xcode 8.3.3及Xcode中包含我们的框架中抱怨缺少位码而特设分配出口存档9

我已经浏览了苹果在这方面提供的文档 Technical Note TN2432。文件列出的可能的根本原因并不像我们的情况。 (我们不使用汇编指令或有畸形Info.plist文件)

我已经通过下面张贴在SO

Error while exporting with Bitcode enabled (symbol not found for architecture armv7)

Is it possible to create a universal iOS framework using bitcode?

New warnings in iOS 9

但类似的问题了提供的解决方案似乎不起作用。

我试图在用户定义的构建设置添加BITCODE_GENERATION_MODE标志。我也试过在框架目标将-fembed-bitcode -marker & -fembed-bitcode在其他C标志。

我检查位码段使用suggested命令

otool -l -arch arm64 <framework_name> | grep __LLVM 

它显示了2个段

segname的__LLVM

segname的__LLVM

存在于我的产生框架但是,当出口在存档中,Xcode仍然抱怨缺少位代码。

我试着上传的App Store应用来验证,如果这个问题是由于版本的Xcode(我试过8.3.3和9.0),但我得到以下有关来自iTunes Store构建导入错误的电子邮件。

在处理您的iOS应用程序APP_NAME 1.0(4)时,应用程序细化过程中发生错误,您的应用程序无法细化。如果您的应用包含位码,则位码处理可能失败。由于这些错误,您的应用程序的这种构建将无法提交审查或放置在App Store上。有关可能有助于解决此问题的信息,请参阅技术说明2432.

PS:由于主机应用程序需要支持位代码,因此禁用位代码不适用于我们。

Error while exporting the Archieve

回答

9

错误描述了我在错误的方向,以找到解决方案。

此错误与位码无关。 当框架包含模拟器切片时出现(i386 x86_64

在归档之前删除它们可以解决问题。

使用以下代码添加运行脚本阶段以构建目标阶段有助于消除错误。

APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}" 

# This script loops through the frameworks embedded in the application and 
# removes unused architectures. 
find "$APP_PATH" -name '*.framework' -type d | while read -r FRAMEWORK 
do 
FRAMEWORK_EXECUTABLE_NAME=$(defaults read "$FRAMEWORK/Info.plist" CFBundleExecutable) 
FRAMEWORK_EXECUTABLE_PATH="$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME" 
echo "Executable is $FRAMEWORK_EXECUTABLE_PATH" 

EXTRACTED_ARCHS=() 

for ARCH in $ARCHS 
do 
echo "Extracting $ARCH from $FRAMEWORK_EXECUTABLE_NAME" 
lipo -extract "$ARCH" "$FRAMEWORK_EXECUTABLE_PATH" -o "$FRAMEWORK_EXECUTABLE_PATH-$ARCH" 
EXTRACTED_ARCHS+=("$FRAMEWORK_EXECUTABLE_PATH-$ARCH") 
done 

echo "Merging extracted architectures: ${ARCHS}" 
lipo -o "$FRAMEWORK_EXECUTABLE_PATH-merged" -create "${EXTRACTED_ARCHS[@]}" 
rm "${EXTRACTED_ARCHS[@]}" 

echo "Replacing original executable with thinned version" 
rm "$FRAMEWORK_EXECUTABLE_PATH" 
mv "$FRAMEWORK_EXECUTABLE_PATH-merged" "$FRAMEWORK_EXECUTABLE_PATH" 

done 

学分:http://ikennd.ac/blog/2015/02/stripping-unwanted-architectures-from-dynamic-libraries-in-xcode/

+0

如何删除(i386 x86_64)以及从哪里删除?并且当我单击'+'btn添加Runscript时,然后编写提供的脚本,它在归档时给出相同的问题。我没有删除i386 x86_64,但我不知道如何 –

+0

请查看此@Vipin。尽管我的enableBitcode = NO总是,我不想将它设置为YES –

0

尝试以下操作:

  • 确保这个框架在构建阶段下复制框架脚本增加。
  • 使用BITCODE_GENERATION_MODE而不是BITCODE_GENERATION_CODE
+0

我居然在构建设置使用BITCODE_GENERATION_MODE启用位码为 'NO'。编辑我的问题以纠正错字。 我会尝试在阶段性构建中添加新的“复制文件阶段”。将添加抱怨框架,并让你知道我的发现。 – Vipin

+0

Hey Roy K,作为复制框架脚本构建阶段在xcode构建阶段是不可见的,我添加了复制文件阶段与其中的框架。但是没有运气:( – Vipin