• iOS 添加第三方.framework 打包上传iTunesConnect 遇到的坑


    1、添加完第三方库,模拟器运行没事,打iOS通用设备包的时候报一个错。

    ld: '/Users/jiangwei.wang/Documents/Project/APP NAME/SeosMobileKeysSDK.framework/SeosMobileKeysSDK' does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. file '/Users/jiangwei.wang/Documents/Project/APP NAME/SeosMobileKeysSDK.framework/SeosMobileKeysSDK' for architecture arm64

     大概意思是说用的第三方库 不包含 bitcode ,要么需要第三方库包含 bitcode ,要么把 enable bitcode 设置为NO.

     第三方库没有乱动,target->build setting->search "enable bitcode" 把 enable bitcode 设置为NO.重新编译。build success

     2、第一步完成之后,打好包,上传到iTunes connect 时遇到的错误:

    错误类型(1)、

      ERROR ITMS-90087: "Unsupported Architectures. The executable for APP NAME.app/Frameworks/BerTlv.framework contains unsupported architectures '[x86_64, i386]'."

    大概意思是说,*.framework 包含了上架不需要的架构('[x86_64, i386]')支持。应该去除。

    错误类型 (2)、

    ERROR ITMS-90209: "Invalid Segment Alignment. The app binary at 'APP NAME.app/Frameworks/BerTlv.framework/BerTlv' does not have proper segment alignment. Try rebuilding the app with the latest Xcode version."

    错误类型 (3)、

    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."

    以上2、3个错误都应该是错误类型1导致的。

    解决办法:去除第三方框架中不需要的架构支持

      target --> build Phases --> 第一行最左边+ --> new run script support.

      注意:最好把脚本下面的 “run scripts only on installing”, 不然的话,跑模拟器是会报错的:原因是,真机调试或者打包不需要 i386 支持, 真机是 苹果的A7, A10 等处理器架构,ARMS V7S 等,但是 在 MAC 上,模拟器的处理器还是基于Intel CPU的 i386架构的。

     

    Showing Recent Errors Only

    fatal error: lipo: -extract i386 specified but fat file: /Users/jiangwei.wang/Library/Developer/Xcode/DerivedData/APP NAME-ffatymfkewtsvbanmvhqynqbhveq/Build/Products/Release-iphonesimulator/APP NAME.app/Frameworks/SeosMobileKeysSDK.framework/SeosMobileKeysSDK does not contain that architecture

     

     

      在脚本添加以下语句。可以保证打包时去除不必要的架构支持

    用脚本:

     

    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    
    

      

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    git总是需要输入用户名密码问题解决
    安装Elasticsearch与Kibana汉化记录
    ubuntu下通过certbot自动化生成letsencrypt证书配置nginx服务器https记录
    ubuntu通过apt安装最新稳定版nginx记录
    linux磁盘管理与lvm琐事
    docker搭建常用环境记录
    线程池如何复用一个线程-- ThreadPoolExecutor的实现(未完)
    为什么切换线程比切换进程开销小
    Tomcat &servlet字符集编码问题
    字符和字符串在Java中的旅程
  • 原文地址:https://www.cnblogs.com/wjw-blog/p/8708138.html
Copyright © 2020-2023  润新知