知蛛网
  • 首页
  • 会员
  • 活动
  • 工作台

常见问题
活动
关于我们
联系我们
隐私协议
用户协议
会员协议
© 2026 知蛛网. 保留所有权利。
首页会员工作台我的
flynn@flynn
主页wiki简历作品集
目录
全部书籍
00-路线
  • 学习路线
  • 命名与写作规范
01-计算机基础
01-计算机网络
  • 互联网是如何工作的
  • HTTP协议
  • TCP/IP协议
  • 浏览器直接打开本地html文件,请求时的协议问题
02-浏览器原理
  • 浏览器是如何渲染页面的
  • 浏览器是如何渲染页面的
  • 面试之浏览器
03-操作系统
  • 进程与线程
  • 内存管理与虚拟内存
  • IO 模型与多路复用
  • 文件系统与页缓存
04-数据结构与算法
  • 数组与链表
  • 栈与队列
  • 哈希表
  • 树与堆
  • 基础数据结构
01-基础数据结构
02-高级算法
  • 排序算法
  • 二分查找
  • 递归与回溯
  • 动态规划
  • 双指针与滑动窗口
03-leetcode刷题
02-前端核心
01-web开发
  • Web 和 Web 标准
  • web 入门
  • web 开发
  • URL
  • 域名
  • Web服务器
  • 命令行
  • 工作流程和流程
  • 超链接
  • 浏览器指纹
02-html
  • HTML基础语法
  • HTML 概述
  • HTML 发展史
  • HTML调试
  • HTML标题与段落
  • 文本格式化
  • 强调与重要性
  • 块级元素和内联元素
  • 列表
  • 区块
  • 语义元素
  • 页面结构化和语义化
  • 超链接
  • 相对路径和绝对路径
  • 图片
  • 表格
  • 表单和按钮
  • 多媒体
  • 视频/音频
  • HTML 头部
  • HTML 字符集
  • HTML颜色
  • HTML 语言代码
  • HTML 国家/地区
  • Emoji (表情符号)
  • HTML 标签简写及全称 |
  • SVG
  • Canvas 2D
  • Canvas 3D
  • 框架 `<iframe>`
  • HTML 拖放
  • HTML5 Geolocation(地理定位)
  • Web 存储
  • HTML URL 编码
  • MathML
  • 远程图片资源在自己网站中无法展示问题
03-css
  • CSS简介
  • CSS 语法
  • CSS 创建
  • CSS 发展史
  • CSS 浏览器支持
  • CSS 选择器
  • CSS `!important` 规则
  • css颜色
  • CSS 文本格式
  • CSS 盒子模型
  • CSS 尺寸
  • CSS 内边距
  • CSS 外边距
  • CSS 边框
  • CSS 轮廓
  • CSS 背景(background)
  • CSS 溢出
  • CSS 文档流
  • CSS 显示和可见性
  • CSS 浮动
  • CSS 定位
  • CSS 对齐方式
  • CSS 网页布局
  • CSS 多列布局(CSS Multi-column Layout)
  • CSS 透明度
  • CSS 响应式设计(Responsive Design)
  • CSS 媒体查询
  • CSS 列表
  • CSS 表格
  • CSS 表单
  • CSS 链接
  • CSS 用户界面
  • CSS 计数器
  • CSS 过渡
  • CSS 动画
  • CSS 2D 转换
  • CSS 3D 转换
  • CSS 变量(CSS Custom Properties)
  • CSS 原生嵌套(CSS Nesting)
  • CSS 函数(CSS Functions)
04-javascript
  • 什么是 JavaScript?
  • 编程范式(Programming Paradigm)
  • 什么是范式?
  • ECMAScript 规范
  • 什么是语法糖
  • 开发环境搭建
  • 什么是堆和栈?
  • 什么是执行上下文
  • JavaScript 垃圾回收机制
  • 作业队列与事件循环
  • 深拷贝和浅拷贝
  • 语法与类型
  • 字面量
  • 控制流与错误处理
  • 循环与迭代
  • 函数
  • 表达式与运算符
  • 数字和字符串
  • 表达日期与时间
  • 正则表达式
  • 索引集合类
  • 带键的集合
  • 对象
  • 类
  • Promise
  • async/await
  • 迭代器和生成器
  • 国际化
  • 模块
  • 资源管理
  • 属性的可枚举性和所有权
  • 闭包
  • 继承与原型链
  • 元编程
  • 内存管理
  • 内置对象
  • arguments 对象
  • BOM 对象(浏览器对象模型)
  • DOM 对象(文档对象模型)
  • bind、apply、call的区别
  • new 操作符
  • typeof 和 instanceof 的区别
  • HTML5 Web Workers
05-typescript
  • TypeScript 类型系统基础
  • 类型体操
03-框架与跨端
01-react
  • 开发环境搭建
  • JSX
  • 组件
  • 生命周期
  • Hooks
  • 组件通信
  • 状态管理
  • React 19 新特性
  • useCallback 闭包陷阱
  • 常用的性能优化操作
  • Firbe 架构
  • React 18 新特性
  • useRef
  • 基于umijs 4.0 搭建官网
  • react+vite本地开发,如何手机联调
  • React 实现谷歌登录
  • React 项目调起 WhatsApp
02-vue
  • vue 解决跨域请求
  • 在vue2使用TinyMCE富文本编辑器
  • 使用jszip 导出新闻
  • Vue 本地开发启用 https
  • 基于vue3+vite+ts+elementplus+pinia+axios搭建后台管理系统
03-react-native
  • iOS 开发环境(RN 0.72)
  • RN 原生模块(Native Module)
  • 查看Maven包的Java包名
  • 优化 APP 启动速度
  • 安全键盘
  • 启动图与 Icon 尺寸规范
  • RN如何生成/配置iOS的开发者证书和生产证书
  • 邓白氏编码
  • 微信开放平台配置Universal Link
  • 上架至Apple App Store
04-android
  • 开发环境搭建
  • Android项目目录结构
  • 认识Gradle
04-工程化
01-git
  • 如何解决已被git跟踪文件不在跟踪
  • git标签
  • Git报错: Failed to connect to github.com port 443 解决方案
  • Git 分支操作速查
02-构建工具
  • 构建工具原理与选型
02-webpack
  • webpack 核心概念与构建流程
  • webpack 性能优化
03-vite
  • vite 为什么快
  • vite 插件与生产构建
03-测试
  • 前端测试体系
04-部署
  • Nginx 反向代理解决跨域
  • SPA 刷新非首页报 404
05-docker
  • Docker 常用命令
  • docker-compose nginx配置ssl证书
  • Docker Desktop 升级后 docker-compose 命令找不到
06-性能优化
  • 前端性能优化体系
  • 背景 GIF 优化方案
07-微前端
  • 微前端实战(qiankun)
  • 微前端 · qiankun
01-qiankun
05-后端与数据
01-nodejs
  • Node 版本与依赖的 engines 冲突
  • Express 实现 Gmail 发信(邮箱验证码)
02-php
  • 浏览器保存新闻,发布到自有网站
  • [分布式] 浏览器保存新闻,发布到自有网站
  • 邮件发送,多账号轮询
  • nginx和php-fpm通信问题导致网站页面空白
03-python
  • macOS M1 芯片 如何安装 py 和 tkinter
  • tkinter 编写的程序如何打包成桌面软件
04-架构设计
  • 后台管理系统中角色管理、管理员管理、权限设置他们三者之间的关系
05-运维
  • redis启动失败
  • 实现自动备份宝塔项目及数据库到本地
  • 宝塔面板
01-宝塔
06-实战项目
  • 实战准备工作
02-项目记录
  • AI-Chat 模块技术文档
  • CRMChat 部署
07-面试专项
01-面试
  • 面试之自我介绍
  • CSS 面试
  • JS面试
  • React面试
  • Vue面试
  • RN 面试 · 题目清单
  • RN 面试 · 答案详解
  • RN 物流公司 · 题目清单
  • RN 物流公司 · 答案详解
  • Uniapp 面试
  • 带团队经验
12-react专项
  • 一个表格,某一行的某一列数据变动了,如何优化性能?
13-reactnative专项
  • RN 开发过程中,有遇到什么棘手的问题?你是如何解决的?
14-过往面试总结
  • 冷哥传媒 · 面试题
  • 沐腾科技 · 面试题
  • 字符频率排序
02-面试八股
  • 网络八股
  • 浏览器八股
  • 工程化八股
03-算法面试题
  • 前端高频手写题
  • 场景设计题
04-真实面试经历
  • 20251027 盾蓝科技 面试
  • 20251028 芝麻甜心 面试
08-工具
01-n8n
  • 初始n8n
  • 快速入门
  • 在宝塔中搭建n8n环境
  • n8n中常用节点
  • n8n和代码的区别
02-Trae
  • Figma MCP 配置指南
03-UI_UX_pro_max
  • UI_UX_pro_max的使用
04-开发环境
  • VMWare虚拟机安装
  • PowerShell 执行策略与编码设置
98-杂项
  • A股股票交易相关费用
99-手册
  • iOS 开发者账号申请流程及费用
  • 邓白氏编码申请及费用
  • App 推送通道申请及费用
  • App 开发收费项目清单
  • 注册AWS账号
  • 使用Amazon Polly实现文本转语音
  • Google 翻译 Key 申请与前端调用
  • 使用SmsForwarder转发短信

RN如何生成/配置iOS的开发者证书和生产证书

03-react-native2026/11/14

准备工作

  • Apple 开发者账号(年费 $99)
  • Mac 电脑(必须使用 Xcode)
  • React Native 项目(已初始化 iOS 目录)

生成证书的完整流程

1、创建 App ID

  • 登录 Apple Developer 后台
  • 进入 Certificates, Identifiers & Profiles
  • 选择 Identifiers > App IDs,点击 + 创建: Description:填写应用描述(如 MyApp Prod) Bundle ID:必须与 Xcode 中的 Bundle Identifier 完全一致(如 com.company.appname) 勾选所需能力(如 Push Notifications)

需管理员和所属者权限

2、生成证书签名请求(CSR)

在 Mac 上生成 CSR 文件:

  • 打开 钥匙串访问(Keychain Access)
  • 顶部菜单选择 钥匙串访问 > 证书助理 > 从证书颁发机构请求证书...
  • 填写信息: 用户电子邮件:开发者账号邮箱 常用名称:建议写你的名字(如 John Doe) 选择 保存到磁盘,生成 .certSigningRequest 文件

3、创建开发证书(Development)

  • 在 Apple Developer 后台进入 Certificates > +
  • 选择 iOS App Development > 继续
  • 上传刚才生成的 .certSigningRequest 文件
  • 生成后下载证书(.cer 文件),双击安装到钥匙串

4、创建生产证书(Distribution)

  • 同上步骤,但选择 Apple Distribution(用于 App Store 或 Ad Hoc)
  • services视情况勾选,一般勾选push相关服务
  • 下载并安装 .cer 文件

在 React Native 项目中配置

方式1:使用 Xcode 自动管理(推荐)

  • 打开 Xcode,进入项目设置
cd ios && open YourProject.xcworkspace
  • 选择 Targets > Signing & Capabilities: 勾选 Automatically manage signing 选择你的 Team(开发者账号) 确保 Bundle ID 与 Apple 后台一致

登录开发者账号,建议登录有管理权限的开发者账号

方式2:手动配置

  • 创建 Provisioning Profile: 开发环境:选择 iOS Development,关联证书和 App ID 生产环境:选择 App Store 或 Ad Hoc

  • 下载 .mobileprovision 文件,双击安装

  • 在 Xcode 中手动选择证书和 Profile: Signing (Debug):开发证书 Signing (Release):生产证书

验证证书是否生效

看能否正常打包开发/生产包

在 Apple Developer 后台 添加设备 UDID

  • Apple Developer 后台
  • 进入 Devices > +
  • 填写设备名称和 UDID
  • 保存后,需 重新生成 Provisioning Profile 才能生效

从 .cer 和 mac 钥匙串导出 .p12

找到你的开发者证书或发布证书

  • 打开 钥匙串访问.app: 进入:应用程序 > 实用工具 > 钥匙串访问

上一篇启动图与 Icon 尺寸规范
下一篇邓白氏编码
本页目录
准备工作生成证书的完整流程1、创建 App ID2、生成证书签名请求(CSR)3、创建开发证书(Development)4、创建生产证书(Distribution)在 React Native 项目中配置方式1:使用 Xcode 自动管理(推荐)方式2:手动配置验证证书是否生效在 Apple Developer 后台 添加设备 UDID从 .cer 和 mac 钥匙串导出 .p12找到你的开发者证书或发布证书右键导出证书为 .p12获取设备UDID注意事项配置ioseas.jsoncredentials.json配置本地安装并配置 Fastlane比对证书和描述文件是否一致

选择左上角: 钥匙串:登录 分类:我的证书

  • 找到你的 Apple 证书(名称类似于 Apple Distribution: 你的公司名)

  • 右键导出证书为 .p12

    • 右键点击该证书,选择 导出
    • 格式选择:个人信息交换 (.p12)
    • 设置一个导出密码(EAS 构建时需要)

    如果你没看到导出选项,说明这个证书没有关联私钥(你是从别人那里拿的 .cer 而不是用自己的私钥生成的)

    获取设备UDID

    推荐方法:

    • 蒲公英 获取UDID
    • 使用iPhone设备的浏览器扫码,下载描述文件并安装
    • 获取UDID

    方法 1:通过 Mac 上的 Finder 或 iTunes(macOS Catalina 10.15 及更高版本)

    • 使用 USB 线连接 iPhone/iPad 到 Mac
    • 打开 Finder(macOS Catalina 10.15+)或 iTunes(旧版 macOS)
    • 选择你的设备(在 Finder 侧边栏或 iTunes 左上角)
    • 点击设备名称或序列号: 在设备信息页面,点击 序列号 会切换显示 UDID 右键点击 UDID 并选择 拷贝 以复制

    方法 2:通过 Xcode 获取

    • 连接设备到 Mac

    • 打开 Xcode,进入顶部菜单: Window > Devices and Simulators

    • 选择已连接的设备,在右侧信息面板中找到 Identifier(即 UDID) 右键点击 UDID 选择 Copy

    注意事项

    • 每次证书过期(1年有效期)需重新生成

    配置ios

    将相关证书放到certificate/ios/目录下,记得配置git忽略

    development:device ad-hoc分发包 production 正式分发包

    eas.json

    {
        "cli": {
            "version": ">= 3.15.1",
            "appVersionSource": "local"
        },
        "build": {
            "development": {
                "extends": "production",
                "distribution": "internal",
                "android": {
                    "gradleCommand": ":app:assembleDebug"
                },
                "ios": {
                    "buildConfiguration": "Debug",
                    "simulator": true
                }
            },
            "development:device": {
                "extends": "development",
                "distribution": "internal",
                "ios": {
                    "buildConfiguration": "Release",
                    "simulator": false,
                    "credentialsSource": "local"
                }
            },
            "preview": {
                "extends": "production",
                "distribution": "internal",
                "ios": {
                    "simulator": true
                },
                "android": {
                    "buildType": "apk"
                }
            },
            "preview:device": {
                "extends": "preview",
                "ios": {
                    "simulator": false
                }
            },
            "production": {
                "android": {
                    "buildType": "apk",
                    "credentialsSource": "local"
                },
                "ios": {
                    "credentialsSource": "local",
                    "autoIncrement": true
                }
            }
        },
        "submit": {
            "production": {}
        }
    }
    
    

    credentials.json配置

    打不同(开发/生产)iOS包,选择不同的证书

    证书和描述文件对照关系

    打包测试分发包,使用如下对照文件

    ios_distribution.p12 - adhoc.mobileprovision

    打包正式分发包,使用如下对照文件

    ios_distribution.p12 - prod.mobileprovision

    {
        "android": {
            "keystore": {
                "keystorePath": "./certificate/keystore.jks",
                "keystorePassword": "xinyun2024",
                "keyAlias": "cjxy",
                "keyPassword": "xinyun2024"
            }
        },
        "ios": {
            "provisioningProfilePath": "certificate/ios/profile.mobileprovision",
            "distributionCertificate": {
                "path": "certificate/ios/dist.p12",
                "password": "DISTRIBUTION_CERTIFICATE_PASSWORD"
            }
        }
    }
    
    

    本地安装并配置 Fastlane

    使用本地证书,不需要此步骤

    安装 Fastlane

    # 使用 RubyGems 安装(需 Ruby 环境)
    gem install fastlane -NV
    
    # 或通过 Homebrew(macOS)
    brew install fastlane
    

    验证安装

    fastlane --version
    

    初始化 Fastlane

    cd ios && fastlane init
    

    配置 Fastlane

    lane :build_for_eas do
      setup_ci
      sync_code_signing(type: "appstore")  # 如果是 App Store 分发
      # 或其他自定义步骤
    end
    

    比对证书和描述文件是否一致

    # 查看描述文件SHA1
    security cms -D -i xyapp_dev.mobileprovision > profile.plist
    
    plutil -extract DeveloperCertificates.0 xml1 profile.plist -o - | \
    awk '/<data>/{flag=1;next}/<\/data>/{flag=0}flag' | \
    tr -d '\n ' | base64 -d > cert.der
    
    openssl x509 -inform DER -in cert.der -noout -fingerprint
    > SHA1 Fingerprint=A9:EE:A8:00:24:3F:DF:9F:57:B9:84:83:13:F4:A1:C6:55:E2:DD:DB
    
    # 查看p12文件SHA1
    openssl pkcs12 -in ios_development.p12 -nokeys -nodes -legacy -out cert.pem
    openssl x509 -in cert.pem -noout -fingerprint
    > SHA1 Fingerprint=A9:EE:A8:00:24:3F:DF:9F:57:B9:84:83:13:F4:A1:C6:55:E2:DD:DB