前言
公司有一个很老款的iOS应用,原来在xcode8开发的,现在到iOS15系统跑不起来了,被迫升级之。。
遇到一些问题,总结如下文。
问题1 编译报错 Multiple commands produce……
Multiple commands produce '/Users/user/Library/Developer/Xcode/DerivedData/LoanVisit-ghqbwiuunlciygdkzpvmakgtxcsx/Build/Products/Debug-iphoneos/LoanVisit.app/app.js':
1) Target 'LoanVisit' (project 'LoanVisit') has copy command from '/Users/user/Desktop/projects/LoanVisit/platforms/ios/www/cordova-js-src/plugin/android/app.js' to '/Users/user/Library/Developer/Xcode/DerivedData/LoanVisit-ghqbwiuunlciygdkzpvmakgtxcsx/Build/Products/Debug-iphoneos/LoanVisit.app/app.js'
2) Target 'LoanVisit' (project 'LoanVisit') has copy command from '/Users/user/Desktop/projects/LoanVisit/platforms/ios/www/js/app.js' to '/Users/user/Library/Developer/Xcode/DerivedData/LoanVisit-ghqbwiuunlciygdkzpvmakgtxcsx/Build/Products/Debug-iphoneos/LoanVisit.app/app.js'
去到 项目的TARGETS > Build phase 下面,搜索日志中出现的重复的文件名字,在Copy Bundle Resource和Compile Sources下面,删除掉,只保留1个即可。
问题2 library not found for -lstdc++.6.0.9
ld: library not found for -lstdc++.6.0.9
clang: error: linker command failed with exit code 1 (use -v to see invocation)
原因:Xcode新版本已经不在支持旧的-lstdc++.6.0.9库了,要删掉该引用,并且替换成新的libc++.tbd。
当然,如果是旧项目的话,因为部分代码是用了旧的库,替换过后可能重新编译会报错,这种情况下建议升级原来的代码,兼容最新库。
问题3 百度地图sdk library not found for -lssl
其实本身不是问题,是百度地图sdk的相关framework放错地方了,检查并放到正确的地方,重新引用就行。
问题4 真机调试报错 -402620395 A valid provisioning profile for this executable was not found
真机调试编译成功,但安装运行报错:
首先检查并排除开发者证书的问题。
然后因为是老项目迁移,需要调整下项目的配置:file-> project settings
Per-User Project Settings中的Build System设置为Legacy Build System,并且把最后一个钩打开,见下图。
问题5 真机调试报错-402620375 the code signature version is no longer supported
网上有很多这个报错的解决办法,可能各个项目情况不太一样,这里提供下我的可行配置,一共两处地方:
1、项目配置build settings - signing:Other Code Signing Flags 增加配置变量 --generate-entitlement-der
2、检查项目依赖的第三方库(含自己制作的),将Embed and Sign修改为 Do Not Embed。
问题6 运行报错 DiskCookieStorage changing policy from 2 to 0
这个报错一开始很烦人,也比较少见。
我项目框架是ionic + Cordova。查到网上有相关类似问题:https://forum.ionicframework.com/t/app-crashes-when-i-try-to-open-in-it-on-tesflight-on-a-iphone/21005
但没有合适可行解决办法。
一开始从字面怀疑是cookie问题,其实不然。
然后发现调试闪退,但直接运行安装好的debug版本app又可以正常跑。转而怀疑到动态调试的控制,接着检查代码,发现在启动类里面控制了禁止app动态调试。把这段控制去掉,再次debug,就正常了,囧。。。
关于百度地图SDK升级
项目用到了百度地图和定位SDK,项目升级Xcode版本之后发现旧的库跑不下去了,然后就对这个sdk也升级,相关代码也调整适配。
中间其实遇到了一些bug,但按照官方文档还是可以解决的。如果升级中有什么问题,要检查下是否按照官方文档的步骤一步步做完了:https://lbsyun.baidu.com/index.php?title=iossdk/guide/create-project/oc