美文网首页iOS
自建framework提交审核报错 ERROR ITMS-900

自建framework提交审核报错 ERROR ITMS-900

作者: 温特儿 | 来源:发表于2016-06-20 15:58 被阅读10469次

制作好的framework在打包上传至AppStore如果出现以下错误,则说明自建的这个SDK里面包含了x86_64, i386 架构,当然这个AppStore是不允许的,所以会在上传的时候报错,解决办法就是要这个SDK剔除掉x86_64, i386这两个架构,参考Daniel Kennett的一篇blog

ERROR ITMS-90087: "Unsupported Architectures. The executable for ***.app/Frameworks/SDK.framework contains unsupported architectures '[x86_64, i386]'."
ERROR ITMS-90362: "Invalid Info.plist value. The value for the key 'MinimumOSVersion' in bundle ***.app/Frameworks/SDK.framework is invalid. The minimum value is 8.0"
ERROR ITMS-90209: "Invalid Segment Alignment. The app binary at '***.app/Frameworks/SDK.framework/SDK' does not have proper segment alignment. Try rebuilding the app with the latest Xcode version."
ERROR ITMS-90125: "The binary is invalid. The encryption info in the LC_ENCRYPTION_INFO load command is either missing or invalid, or the binary is already encrypted. This binary does not seem to have been built with Apple's linker."

以下是解决办法:

在工程中添加shell脚本,然后什么都不用做,就木有然后了。

# Without further ado, here’s the script. Add a Run Script step to your build steps, put it after your step to embed frameworks, set it to use /bin/sh and enter the following script:

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

最后其实想说,尽量避免自建framework,如果是公司内部使用的话,用cocoapods或者Carthage去集成,如果公司是给别人使用也不愿意开源代码的话,在制作的framework,要注意避免其内包含的这些信息

相关文章

网友评论

  • Hiker5:xcode9。我按照这个改了后,开始是能打包审核的,但第二天,项目就运行报错了,找不到SDK的文件路径,然后我把这个脚本删除了,就不报错了,但是项目安装不到真机上了,报一个code signature not found。但之前除了打包审核报错,真机运行时没有问题。
    木木光:我也遇到这个问题。。。我暂时还不知道如何解决。
    Hiker5:@winterSeven 问题这是第三方给的SDK……
    温特儿:@Hiker5 我是不建议用这种脚本的方式去取出x86架构的,最好的办法就是framework里面做好.这是我的建议,至于framework的制作方式网上一大堆,可以自行寻找
  • 可能是老曹:这个借鉴的很彻底,代码一字不差
    【参考Daniel Kennett的一篇blog】
  • 历飞羽:基于静态库改的 framework 就不存在这个问题, 可以忽略了, 基于 IOS8的动态 framework 才会出现这个问题把.
  • 小布走慢点:亲测有效
    第一行记得注释
    # Without further ado, here’s the script. Add a Run Script step to your build steps, put it after your step to embed frameworks, set it to use /bin/sh and enter the following script:
    温特儿:@覗文君 谢谢提醒!
  • 背着吉他去流浪:我用了楼主的脚本合成, 发现还是有i386和x86_64, 这个没有问题吗??
  • 顽皮的汉堡:我加了这个还是不行,只包含真机的可以上传,只要和模拟器的合成一个上传就报错,但是我看支付宝framework也是同事支持真机和模拟器的,上传却没有问题。。
    温特儿:@历练者 我们自己的都是静态库,只是以framework形式的静态库而已,像支付宝那样子的也是静态库,只有Apple才能是动态库!你的项目改为静态库就好了。
    历飞羽:我觉得作者应该说的是我们编译的动态库, 也就是基于 IOS8及以上的framework, 支付宝framework应该是静态库. 我提供给别人静态库的时候, 别人上传就没问题, 后来改为动态库了, 就出现了作者这个问题了.
    王仁洁:大兄弟,怎么让自己的库只包含真机呀?能否赐教下:blush:
  • IT_攻城师:但是添加了脚本,运行项目就报错了啊?怎么解决?
    温特儿:报什么错,贴出来,看看!
  • Taiwan阿靳:在Build Phases中加入run script。
    不過我加了後打包確實就可以上傳了。但是在iTunes Connect的Activity中的iOS Builds 有看到剛上傳的Builds,但是過一會兒再reload就不見了。有誰知道這是怎麼回事嗎?
    遇见猫的大鱼:@不安份的渔人 同求,我这也出现这个问题
    0d48debc0995:@愿风裁尘kirito 什么关键字啊?在线等,谢谢
    86be50b36069:@Taiwan阿靳 infoplist要增加三个关键权限字段就可以了
  • 小李广17:能否具体讲下怎么创建脚本,添加到工程
    温特儿:@小李广17 参照这篇文章http://www.jianshu.com/p/3a3355ffaa8b
  • 5518b445bc8f:我想请问下 如何在项目中添加这个脚本啊 :flushed:
  • 僦匴穤弜竾婹徦装坚强:怎么创建shell脚本
    温特儿:@僦匴穤弜竾婹徦装坚强 参照这篇文章http://www.jianshu.com/p/3a3355ffaa8b
  • 方振:很有用。。。
  • 温特儿:这种情况下,基本上就是说明你使用的第三方SDK(包括你自己制作的SDK),包含了模拟器的架构信息,如果是你自己的SDK,那么你打包成静态库试试,如果是第三方的,你只能是联系作者了。

本文标题:自建framework提交审核报错 ERROR ITMS-900

本文链接:https://www.haomeiwen.com/subject/kkvwdttx.html