iOS app提交时不支持旧版本的xcode,为了升级xcode,被迫升级了mac OS 10.15.6。
怕什么来什么,果然写好的代码编译出了问题。纯记录当前工程是怎么解决的,不深究原因。
Unkown type name ‘tls_protocol_version_t’
Google半天,最靠谱的是https://www.jianshu.com/p/5abbcf9601bd。
按照他的说法,是引入security.framework时出现了问题。检查了一下,果然security.framework是工程目录下的,并没有tls_protocol_version_t所需要的<Security/SecProtocolTypes.h>这个头文件。
于是在target->General->Framewroks, Libraries and Embedded Content下删掉security.framework。
在Build Phases->Link Binary With Libraries下加入系统自带(iOS 13.6)的security.framework。
重新编译后,Unkown type name ‘tls_protocol_version_t’,Could not build module ‘xxx’问题没有了。
新问题是
Library not found for -lstdc++.6.0.9
参考:https://www.codenong.com/cs105358811/
(想起来了,上次升级了xcode好像也遇到了这个问题,这种旧的依赖其实应该换掉,但为了节省时间,先找旧的拷贝至相应位置)
在以下路径拷贝libstdc++.6.0.9.tbd文件:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib
将libstdc++.6.0.9.dylib,libstdc++.6.dylib,libstdc++.dylib文件拷贝到以下路径:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/usr/lib
文件获取链接直接用参考给出的:https://pan.baidu.com/s/1evpM29cusH5KwWecwE1I8g 密码:r445
再放一个xcode 10的:https://github.com/CoderJYZhu/libstdc-/tree/master/libstdc%2B%2B
UIKit.framework: bundle format unrecognized, invalid, or unsuitable Command CodeSign failed with a nonzero exit code
把报错的相应地framework从Build Phases的embedded framework中去掉。(这个是我手贱,把target->General->Framewroks, Libraries and Embedded Content 的库都给改成了Embed&Sign,后来发现,把embedded framework中去掉以后,这里会变成”Do Not Embed”)
好不容易编译通过了,结果安不到手机了。。
Unable to install “xxx”
Domain: com.apple.dt.MobileDeviceErrorDomain
Code: -402653103
完整的错误是:
Unable to install “***”
Domain: com.apple.dt.MobileDeviceErrorDomain
Code: -402653103
--
Could not inspect the application package.
Domain: com.apple.dt.MobileDeviceErrorDomain
Code: -402653103
User Info: {
DVTRadarComponentKey = 282703;
MobileDeviceErrorCode = “(0xE8000051)”;
“com.apple.dtdevicekit.stacktrace” = (
0 DTDeviceKitBase 0x000000011dbd081a DTDKCreateNSErrorFromAMDErrorCode + 233
1 DTDeviceKitBase 0x000000011dc11f70 _90-[DTDKMobileDeviceToken installApplicationBundleAtPath:withOptions:andError:withCallback:]block*invoke + 155
2 DVTFoundation 0x00000001050b3f35 DVTInvokeWithStrongOwnership + 73
3 DTDeviceKitBase 0x000000011dc11ca8 -[DTDKMobileDeviceToken installApplicationBundleAtPath:withOptions:andError:withCallback:] + 1654
4 IDEiOSSupportCore 0x000000011da88e91* 118-[DVTiOSDevice(DVTiPhoneApplicationInstallation) processAppInstallSet:appUninstallSet:installOptions:completionBlock:]block*invoke.352 + 4165
5 DVTFoundation 0x00000001051e75d4 DVT*
CALLINGCLIENTBLOCK
+ 7
6 DVTFoundation 0x00000001051e9216 _DVTDispatchAsyncblock*invoke + 1194
7 libdispatch.dylib 0x00007fff675e66c4* dispatchcallblockandrelease + 12
8 libdispatch.dylib 0x00007fff675e7658 dispatchclient*callout + 8
9 libdispatch.dylib 0x00007fff675ecc44* dispatchlaneserial*drain + 597
10 libdispatch.dylib 0x00007fff675ed5d6* dispatchlaneinvoke + 363
11 libdispatch.dylib 0x00007fff675f6c09 dispatchworkloopworkerthread + 596
12 libsystempthread.dylib 0x00007fff67841a3d pthread*wqthread + 290
13 libsystem*pthread.dylib 0x00007fff67840b77 start_wqthread + 15
);
}
这个问题查了半天,还在苹果开发者论坛发了下。后来有个别人的回答,从控制台看手机的相关输出是什么样的。
于是从控制台的手机输出上找了半天,忘了是什么了,然后改了下就能装到手机了。
但是会闪退。报的错是
dyld: Library not loaded: @rpath/libswiftCore.dylib
1 |
|
这个问题找了有一周了。期间把上一版本的代码搞下来跑也不行。但是换了xcode10.3就可以了。
输出是和我用的开源库countrypickerview有关的,所以升级了这个库。
好像是升级了这个库然后可以安装了,但是一登录就闪退,而且页面变成了卡片式。
卡片式改成全屏
这个问题就参考了iOS 13 的 present modally 變成更方便的卡片設計!
想要改成全屏的只要修改相应controller view的Presentation属性。
结果还是不行。原来是代码里也写死了这个属性。。
1 |
|
然后全局搜索了modalPresentationStyle这个属性,发现果然很多地方都是设置成了UIModalPresentationFormSheet。修改成全屏属性,搞定。
仍然闪退
此时app已经可以正常启动了,但是输入账号密码登录后就闪退。
仔细观察崩溃日志,错误提示是
iflyMSC.framework “The file “Info.plist” doesn’t exist
还报过这个错,后来证明和这个无关。当时我把这个库相关的都注释了。
结论
复现一下出现问题的过程:
升级了最新版本的mac OS 10.15.6和xcode11.6。
原来可以跑通的代码先是蹦出了’libBaiduMobStatSimulator.a’缺arm64架构
The linked library ‘libBaiduMobStatSimulator.a’ is missing one or more architectures required by this target: arm64.
因为本身模拟器的库,要什么arm架构,而且我们的项目要用蓝牙,必须是真机调试的,所以我直接把这个库删掉了。
然后就报最开始的那个错,替换了security.Framework就可以。
后来就变成了我用的那个countrypickerview的开源库,image not found.
然后升级了这个库,结果还是有问题。