IOS打包出现 Found an unexpected Mach

作者: 辛小二 | 来源:发表于2018-03-10 12: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 提交,这回你会发现 哇塞,居然不报错了耶~

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

    相关文章

      网友评论

        本文标题:IOS打包出现 Found an unexpected Mach

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