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
最新文章
- android studio 使用jar包,arr包和怎么使用githup开源项目中的aar包或module
- Java GUI编程-(项目代码_扫雷_弹钢琴)
- Ionic 2 rc 添加第三方的插件(plugin) 以Echarts为例
- jQuery AJAX实例
- Mysql日期和时间函数不求人
- javaScript中的原型
- Java 集合框架 LinkedHashSet 和 LinkedHashMap 源码剖析
- Working XML: Processing instructions and parameters
- 学php之翻译wordpress(2)
- Microsoft.AlphaImageLoader滤镜讲--透明处理<;转>;
- sql server中的系统数据库
- Http跨域时的Option请求
- Spring boot读取application.properties中文乱码
- HeadFirst学习笔记-1. 设计模式入门
- 《linux就该这么学》第十五节课:第14,15章,dhcp服务和邮件系统
- Windows下80端口被进程System占用的解决方法
- Spring+SpringMVC重复加载配置文件问题
- springcloud-知识点总结(二):Ribbon&;Feign
- 转载 Net多线程编程—System.Threading.Tasks.Parallel
- Java Script的用途(简介)
热门文章
- PHP遍历指定目录,并存储目录内所有文件属性信息
- HTML5手机页面里面如何把长按复制避免
- MAC OS X显示.开头的文件_苹果操作系统显示隐藏文件命令
- 物联网架构成长之路(20)-申请免费SSL证书
- Socket网络编程--小小网盘程序(3)
- [20170629]带过滤的复制项UI操作导致订阅全部初始化问题
- Linux 下 nginx反向代理与负载均衡
- 【转】WPF自定义控件与样式(3)-TextBox &; RichTextBox &; PasswordBox样式、水印、Label标签、功能扩展
- centos7目录统计之du命令
- react跳转url,跳转外链,新页面打开页面