程序猿阵线联盟-汇总各类技术干货Swift 学习

IOS打包出现 Found an unexpected Mach

2018-03-10  本文已影响1671人  辛小二

场景1-------> IOS打包出现 Found an unexpected Mach -O header code:0x72613c21

当你导入一个***SDK 之后 build 没有任何问题 然后你开开心心的去打包 发现WTF 居然报错了!!!!报错信息如下~

为啥嘞?那么好吧 点击show logs 打印日志发现 出现最多的信息就是Didn't find archived user entitlements (没有发现存档的用户权利) 其实说白了就是你导入的SDK 出了问题(至于哪个SDK 日志当中都有指出就不贴图片出来了)

然后你就发现 如下图~

你将一个*** framework 的静态库 放到了 Embedded Binaries(放动态库依赖文件) 里面导致 项目打包 报错。

到了这里 你当然需要 将*** framework 从 Embedded Binaries(动态库里来文件)中删除 ,但是你直接删除 会发现下面 linked Frameworks and libraries (签署了框架和库)中*** framework也没了。那咋办? 很简单 你只需在 linked Frameworks and libraries 重新 “+” 那个被删除的 *** framework 就好了~
到这里 重新打包ipa文件 发现 ipa文件 生成成功~

场景2------->x86_64,i386 错误解决方案

但是你以为到这里就完了吗?你还有可能遇到 如下问题 (如果你没有遇到 请略过 ) 你虽然 ipa 文件生成成功,但是不代表上传ipa 文件到appstore 会成功,在上传 appstore 的时候 你可能会遇到 下图所示问题

发布问题

遇到这个问题 你可以直接百度 搜索关键词 "ERROR ITMS - 90209" 就可以找到类似的解决办法 , 如果你懒得找 那么看我下面的解释也可以。

首先为啥会报 x86_64,i386 的错误 ...........
因为
1、你导入的 **** 库文件有可能有两种, 一种支持真机和模拟器, 一种只支持真机, 如果测试需要用到模拟器, 测试时可以用前一种, 如果不用模拟器全程只用真机, 建议用只支持真机的库, 在Release文件夹下, 发布应用时不能使用同时支持真机和模拟器的库文件, 否则会报错

2、使用脚本打包前去掉不需要的架构(推荐) 如下图~

创建Run Script

将如下代码 放置到Run 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
搞定

搞定这步之后,你需要重新生成ipa文件,重新提交到Appstore 提交,这回你会发现 哇塞,居然不报错了耶~

到这里你的所有冲突解决完毕~ 希望可以帮到你 谢谢~

上一篇下一篇

猜你喜欢

热点阅读