2022年ios开发问题记录记录

1.ld: warning: Could not find or use auto-linked framework ‘xxxFramework‘ Undefined symbols【别人】

原因:使用的SDK framework引用了另一个A framework,虽然都是静态库,但是引入SDK的同时,也得引入A framework。否则会有这个警告,并且报符号不存在。

2.C++ + #include 智能指针提示.....usr/include/c++/v1/__threading_support:457:11: error build: Use of undeclared identifier 'nanosleep'。【别人】

原因:header search paths引入了FFmpeg的头文件,其中有一个头文件名叫time.h,而nanosleep来源于头文件/usr/include/time.h,造成了冲突,导致编译查找头文件时候,系统头文件被覆盖。

3.动静态库嵌套问题:https://www.jianshu.com/p/b03d617917d6 【别人】

 4.xcode14 ios 15.7设备连接xcode提示“Failed to prepare device for development”。原因:xcode 14虽然包括iOS16的device support,但是不包括15.7的device support。【自己】

5.LEEAlert非链式写法无法弹出。【自己】

写了一个类方法,方法里的代码如下。

// 这里获取了一下config的对象
LEEBaseConfigModel *config = [LEEAlert alert].config;
    config.LeeAddTitle(^(UILabel * _Nonnull label) {
        label.text = @"123123";
        label.textColor = UIColor.titleDarkColor;
        label.font = [UIFont systemFontOfSize:15];
    }).LeeAddContent(^(UILabel * _Nonnull label) {
        label.text = @"123123";
        label.font = [UIFont systemFontOfSize:15];
        label.textColor = UIColor.titleColor;
    }).LeeAddAction(^(LEEAction * _Nonnull action) {
        action.title = @"123123";
    }).LeeAddAction(^(LEEAction * _Nonnull action) {
        action.title = @"123123";
    }).LeeShow();

原因product编译时,本地变量持有临时对象的属性,会因为临时对象立即被释放而释放,导致弹窗无效。奇怪的是develop编译时,释放不会立即发生,导致能弹窗成功。解决办法,本地变量持有[LEEAlert alert]。

6.SSL pinning需要获取cer证书的有效期,因此使用OpenSSL解析证书。刚好项目里有OpenSSL的静态库,但是不知道版本号,于是下了个1.1.1的头文件。发现可以获取序列号,但是获取版本号为-1,X509_get_notAfter返回的时间为null。下载一个编译好的库和头文件,做成一个demo工程发现能获取到时间,于是判断是头文件版本不一致导致的问题。使用IDA获取静态库版本号为1.0.2h,将该版本的头文件引入工程,因为版本较老,提示一些函数不存在,进行更换后,成功获取有效时间。【自己】

7.NSDictionary无法读取NSUserDefaults对应的plist文件,结果为空。原因:NSUserDefaults是以bplist形式存储的,不是xml形式存储,可以获得更小的文件,但是NSDictionary的API无法读取。【自己】

8.文本朗读AVSpeechSynthesizer提示Query for com.apple.MobileAsset.VoiceServices.VoiceResources failed: 2,原因:系统静音。解决办法:激活音频会话并设置分类为AVAudioSessionCategoryPlayback。

你可能感兴趣的:(objective-c,ios开发,ios,xcode,macos)