IOS证书过期,提示This certificate has an invalid issuer

本文介绍了解决iOS开发中遇到的打包证书问题——This certificate has an invalid issuer的具体步骤。包括下载并安装最新证书、删除过期的WWDRCertificate等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文地址:http://blog.sina.com.cn/s/blog_916e0cff0102w7cn.html


最近因为项目需要,研究一下IOS开发,结果,遇到了证书提示This certificate has an invalid issuer  无法打包的问题,在网上搜了一下解决方案,步骤如下:

1,按照链接下载,https://developer.apple.com/certificationauthority/AppleWWDRCA.cer,并安装。

2, 在keychains里选择login,然后点选Certificates,在这个界面,选择工具栏的View -> Show Expired Certificates,这时候你会发现一个过期的“WWDR Certificate”(Apple Worldwide Developer Relations Certification Authority),删除它。

3, 在System的那一栏也有这个过期的“WWDR Certificate”,一并删除它。

4 ,不出意外你的证书那里从 “This certificate has an invalid issuer”(此证书的签发者无效)变成了 “This certificate is valid”了。

注意:第三步,注意第三步,注意第三部!!! 重要的事情说三遍,我刚开始搜了很多解决步骤,都没有说第三步,结果让我白白折腾了一个多小时。可怜啊!


### CATIA CAA 中 `invalid BUILT_OBJECT_TYPE` 的解决方案 在处理 CATIA CAA 开发中的错误时,特别是遇到 `invalid BUILT_OBJECT_TYPE` 错误,通常是因为对象类型的定义不匹配或者未正确初始化所导致。以下是对此问题的分析以及可能的解决方法: #### 1. **确认对象类型的有效性** 需要验证当前使用的对象类型是否已被正确定义并注册到系统的内置类型库中。如果自定义的对象类型被创建,则应确保其继承关系和实现接口均满足要求[^1]。 ```cpp // 示例代码:检查对象类型是否存在 CATObjectType myType = GetBuiltInType("MyCustomTypeName"); if (myType == NULL) { throw std::runtime_error("Invalid object type specified."); } ``` #### 2. **初始化环境变量** 如果开发环境中存在配置缺失或路径设置不当的情况,可能导致无法识别某些预定义的对象类型。按照引用描述,在安装过程中需特别注意 RADER 和 VS2012 的集成步骤,尤其是 `.bat` 文件的位置指定与依赖 DLL 的复制操作[^2]。 #### 3. **调试对话框状态管理** 对于 `_isInited` 成员变量的状态跟踪也很重要。当该标志位始终保持为 FALSE 时,表明对话框尚未成功加载资源或绑定事件处理器。建议增加额外的日志记录功能来捕获具体失败原因。 ```cpp void DialogClass::Initialize() { if (!_isInited) { // 判断是否已初始化 _isInited = InitializeResources(); // 尝试执行实际初始化逻辑 } } bool DialogClass::InitializeResources() { try { LoadDialogTemplate(); ConnectControlEvents(); return TRUE; } catch (...) { LogError("Failed to initialize dialog resources."); return FALSE; } } ``` #### 4. **持久化窗口位置数据** 虽然原文提到尚不清楚如何存储上一次关闭后的对话框坐标信息,但实际上可以通过读写 INI 文件或其他形式的数据载体达成目标。下面给出了一种简单的实现方式作为参考: ```cpp #include <tchar.h> #include <windows.h> POINT SaveWindowPosition(HWND hwnd, LPCTSTR sectionName, LPCTSTR keyPrefix) { RECT rect; POINT pt; ::GetWindowRect(hwnd, &rect); pt.x = rect.left; pt.y = rect.top; WritePrivateProfileStruct(sectionName, keyPrefix, static_cast<void*>(&pt), sizeof(POINT), _T(".\\config.ini")); return pt; } BOOL RestoreWindowPosition(HWND hwnd, LPCTSTR sectionName, LPCTSTR keyPrefix) { POINT ptDefault = { CW_USEDEFAULT, CW_USEDEFAULT }; POINT* pptRestored = reinterpret_cast<POINT*>(ReadPrivateProfileStruct( sectionName, keyPrefix, nullptr, sizeof(POINT), _T(".\\config.ini"))); if (!pptRestored || !IsPointValid(*pptRestored)) { SetWindowPos(hwnd, HWND_TOP, ptDefault.x, ptDefault.y, 0, 0, SWP_NOSIZE | SWP_NOZORDER); delete pptRestored; // 清理内存分配 return FALSE; } SetWindowPos(hwnd, HWND_TOP, pptRestored->x, pptRestored->y, 0, 0, SWP_NOSIZE | SWP_NOZORDER); delete pptRestored; return TRUE; } ``` 通过上述函数可以轻松保存/恢复任意窗口的位置参数至本地磁盘文件中去。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值