当前位置: 首页 > news >正文

iOS 环境搭建教程

本文档将详细介绍如何在 macOS 上搭建 iOS 开发环境,以便进行 React Native 开发。(为了保证环境一致 全部在网络通畅的情况下运行)


1. 安装 Homebrew

Homebrew 是 macOS 的包管理工具,我们将通过它来安装开发所需的工具。

安装 Homebrew

打开终端并输入以下命令来安装 Homebrew:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

验证安装

安装完成后,可以运行以下命令来检查 Homebrew 是否安装成功:

brew --version

输出示例:

Homebrew 4.4.11

2. 安装 Node 和 NPM

Node.js 是 React Native 开发的基础,NPM 是 Node.js 的包管理工具。

使用 Homebrew 安装 Node.js

运行以下命令来安装 Node.js:

brew install node

验证安装

安装完成后,使用以下命令检查 Node 和 NPM 是否成功安装:

node --version

输出示例:

v23.4.0
npm --version

输出示例:

10.9.2

3. 安装 Watchman 工具

Watchman 是一个监控文件系统的工具,可以加速 React Native 项目的构建过程。

安装 Watchman

使用 Homebrew 安装 Watchman:

brew install watchman

验证安装

安装完成后,运行以下命令检查是否成功安装:

watchman --version

输出示例:

2024.12.02.00

4. 安装 Xcode

Xcode 是苹果官方的开发环境,包含了构建 iOS 应用所需的工具链。最简单的安装方式是通过 Mac App Store。

安装步骤

  1. 打开 Mac App Store。
  2. 搜索 Xcode 并点击安装。
  3. 安装完成后,Xcode 会自动安装 iOS 模拟器以及其他开发工具。

5. 安装 Ruby 和 rbenv

React Native 需要使用 Ruby 环境来管理 CocoaPods,CocoaPods 是一个用于管理 iOS 项目依赖的工具。

安装 rbenv 和 Ruby

使用 Homebrew 安装 rbenv 和 ruby-build:

brew install rbenv ruby-build

安装完成后,运行以下命令进行初始化:

rbenv init

根据终端提示,执行以下命令将 rbenv init 添加到 .zshrc 文件中:

echo 'eval "$(rbenv init - zsh)"' >> ~/.zshrc

安装指定版本的 Ruby

使用以下命令安装 Ruby 版本 3.36:

rbenv install 3.36
rbenv global 3.36

6. 安装 CocoaPods

CocoaPods 用于管理 React Native 项目的 iOS 依赖库。

安装 CocoaPods

使用 Gem 安装 CocoaPods:

sudo gem install cocoapods

验证安装

安装完成后,使用以下命令验证是否成功安装:

pod --version

输出示例:

1.16.2

7. 新建一个 React Native 项目

步骤 1:创建新项目

如果您之前全局安装了 react-native-cli,请先卸载它,以避免潜在的问题:

npm uninstall -g react-native-cli @react-native-community/cli

接着使用 React Native Community CLI 创建一个新的 React Native 项目:

npx @react-native-community/cli@latest init AwesomeProject

步骤 2:启动 iOS 模拟器

在项目目录下,运行以下命令启动 iOS 模拟器:

npm run ios

如果遇到问题,请按照终端的提示进行修复。


其他可能遇到的问题

在使用 iOS 模拟器时,可能会遇到以下问题:

  • 模拟器启动失败:error Unable to open base configuration reference file ‘/Users/caredamon/project/github/workspaces-react/AwesomeProject/ios/Pods/Target Support Files/Pods-AwesomeProject/Pods-AwesomeProject.debug.xcconfig’. error Unable to load contents of file list: ‘/Target Support Files/Pods-AwesomeProject/Pods-AwesomeProject-resources-Debug-input-files.xcfilelist’ error Failed to build ios project. “xcodebuild” exited with error code ‘65’.

错误分析

  1. Unable to open base configuration reference file
    这是因为 CocoaPods 没有生成或正确配置 .xcconfig 文件。

  2. Unable to load contents of file list
    这是因为 Pods 相关的文件列表(如 input-files.xcfilelistoutput-files.xcfilelist)不存在或路径不正确。

  3. xcodebuild exited with error code '65'
    这是 iOS 项目配置或依赖问题的通用错误,特别是在缺少 Pods 安装的情况下。


解决方案

按照以下步骤逐一检查和解决问题:

1. 检查 CocoaPods 是否已正确安装

如果你的 macOS 没有安装 CocoaPods 或版本过旧,可能会导致依赖无法解析。

  • 检查版本
    pod --version
    
  • 如果没有安装或版本低于 1.11.3,请重新安装或更新
    sudo gem install cocoapods
    

2. 重新安装 Pods 依赖

进入项目的 ios 目录,删除旧的 Pods 目录和锁文件,重新安装 Pods 依赖:

  • 进入 ios 目录
    cd ios
    
  • 删除旧的 Pods 目录和锁文件
    rm -rf Pods Podfile.lock
    
  • 重新安装 Pods 依赖
    pod install
    

确保 Podfile.lockPods 文件夹被成功生成。

  • 运行项目
    
    npx react-native run-ios
    

在使用 iOS 模拟器时,可能会遇到以下问题

node:events:491 throw er; // Unhandled ‘error’ event ^ Error: EMFILE: too many open files, watch at FSWatcher._handle.onchange (node:internal/fs/watchers:207:21) Emitted ‘error’ event on NodeWatcher instance at: at FSWatcher._checkedEmitError (/Users/caredamon/project/github/workspaces-react/baseProjectRN/node_modules/metro-file-map/src/watchers/NodeWatcher.js:82:12) at FSWatcher.emit (node:events:513:28) at FSWatcher._handle.onchange (node:internal/fs/watchers:213:12) { errno: -24, syscall: ‘watch’, code: ‘EMFILE’, filename: null } Node.js v23.4.0

解决方案

Delete node_modules folder and run npm install solved the issue

相关文章:

iOS 环境搭建教程

本文档将详细介绍如何在 macOS 上搭建 iOS 开发环境,以便进行 React Native 开发。(为了保证环境一致 全部在网络通畅的情况下运行) 1. 安装 Homebrew Homebrew 是 macOS 的包管理工具,我们将通过它来安装开发所需的工具。 安装…...

制作容器镜像

容器基础镜像制作 由于项目使用麒麟操作系统,需要在麒麟桌面操作系统和服务器操作系统里编译代码,如果每次都在物理机和虚拟机里编译太不方便,也无法使用常用的 jenkins k8s 组成的 CI/CD 编译环境,如果基于整个ISO太大了&#…...

基于Python对xslxslx文件进行操作

利用python操作表格文件 读取xsl格式文件-源码 import xlrd# 读取xls文件中的工作对象 wb xlrd.open_workbook(示例文件/xxx物理学与信息技术学院.xls) print(wb)# 获取所有的工作表名称 sheet_names wb.sheet_names() # print(sheet_names)# 选择要读取的具体工作表对象 s…...

语音芯片赋能可穿戴设备:开启个性化音频新体验

在科技日新月异的今天,语音芯片与可穿戴设备的携手合作,正引领我们步入一个前所未有的个性化音频时代。这一创新融合,用户可以享受到更加个性化、沉浸式的音频体验。下面将详细介绍语音芯片与可穿戴设备合作的优点和具体应用。 1. 定制化音效…...

Unity学习笔记(一)如何实现物体之间碰撞

前言 本文为Udemy课程The Ultimate Guide to Creating an RPG Game in Unity学习笔记 如何实现物体之间碰撞 实现物体之间的碰撞关键组件:Rigidbody 2D(刚体)、Collider 2D(碰撞体)、Sprite Renderer(Sprite渲染器) 实现物体之间的碰撞 …...

LinkedList与链表 和 链表面试题

目录 一. ArrayList 与 LinkedList 的优缺点: 二. LinkedList 的分类 三.链表的十道面试题: 1. 删除链表中等于给定值 val 的所有节点。题目链接 2. 反转⼀个单链表。题目链接 3. 输⼊⼀个链表,输出该链表中倒数第k个结点。题目链接 4.给定…...

ansible自动化运维(一)简介及清单,模块

相关文章ansible自动化运维(二)playbook模式详解-CSDN博客ansible自动化运维(三)jinja2模板&&roles角色管理-CSDN博客ansible自动化运维(四)运维实战-CSDN博客 ansible自动化运维工具 1.什么是自…...

利用代理IP爬取Zillow房产数据用于数据分析

引言 最近数据分析的热度在编程社区不断攀升,有很多小伙伴都开始学习或从事数据采集相关的工作。然而,网站数据已经成为网站的核心资产,许多网站都会设置一系列很复杂的防范措施,阻止外部人员随意采集其数据。为了解决这个问题&a…...

大屏开源项目go-view二次开发1----环境搭建(C#)

最近公司要求做一个大屏的程序用于展示公司的产品,我以前也没有相关的经验,最糟糕的是公司没有UI设计的人员,领导就一句话要展示公司的产品,具体展示的内容细节也不知道,全凭借自己发挥。刚开始做时是用wpf做的&#x…...

【含开题报告+文档+PPT+源码】基于微信小程序的点餐系统的设计与实现

开题报告 随着互联网技术的日益成熟和消费者生活水平与需求层次的显著提升,外卖点餐平台在中国市场上迅速兴起并深深植根于民众日常生活的各个角落。这类平台的核心在于构建了一个基于互联网的强大订餐服务系统,它无缝整合了餐饮商户资源与广大消费者的…...

k8s中用filebeat文件如何收集不同service的日志

以下是一个详细的从在 Kubernetes 集群中部署 Filebeat,到实现按web-oper、web-api微服务分离日志并存储到不同索引的完整方案: 理解需求:按服务分离日志索引 在 Kubernetes 集群中,有web-oper和web-api两种微服务,希…...

Mysql数据库中,什么情况下设置了索引但无法使用?

在MySQL数据库中,即使已经正确设置了索引,但在某些情况下索引可能无法被使用。 以下是一些常见的情况: 1. 数据分布不均匀 当某个列的数据分布非常不均匀时,索引可能无法有效地过滤掉大部分的数据,导致索引失效。 …...

QT6学习第十一天 Qt Quick控件 Control

QT6学习第十一天 Qt Quick控件控件基类 Control按钮类控件指示器类控件输入类控件日期类控件 Qt Quick控件 Qt Quick本身是为了移动触摸界面而生的,但Qt的跨平台性也决定了它需要支持多种系统。为了支持桌面平台开发,从Qt 5.1开始,增加了新的…...

【唐叔学算法】第16天:枚举-探索所有可能性的艺术

大家好,我是唐叔。今天我们要探讨的是一个看似简单却非常实用的概念——枚举(Enumeration)。它不仅仅是一种数据类型,在算法设计中也是一种解决问题的策略。通过系统地遍历所有可能的情况,我们可以找到满足特定条件的答…...

【OpenCV】基于GrabCut算法的交互式前景提取

介绍 GrabCut 算法是一种用于图像分割的交互式前景提取技术,它结合了图割(Graph Cut)方法和迭代优化过程。该算法最初由 Rother, Kolmogorov 和 Blake 在 2004 年提出,并因其高效性和准确性而被广泛应用于计算机视觉领域。OpenCV…...

【Flask+OpenAI】利用Flask+OpenAI Key实现GPT4-智能AI对话接口demo - 从0到1手把手全教程(附源码)

文章目录 前言环境准备安装必要的库 生成OpenAI API代码实现详解导入必要的模块创建Flask应用实例配置OpenAI API完整代码如下(demo源码)代码解析 利用Postman调用接口 了解更多AI内容结尾 前言 Flask作为一个轻量级的Python Web框架,凭借其…...

最短路----Dijkstra算法详解

简介 迪杰斯特拉(Dijkstra)算法是一种用于在加权图中找到单个源点到所有其他顶点的最短路径的算法。它是由荷兰计算机科学家艾兹格迪科斯彻(Edsger Dijkstra)在1956年提出的。Dijkstra算法适用于处理带有非负权重的图。迪杰斯特拉…...

ORB-SLAM3源码学习:G2oTypes.cc: void EdgeInertial::computeError 计算预积分残差

前言 这部分函数涉及了g2o的内容以及IMU相关的推导内容,需要你先去进行这部分的学习。 1.函数声明 void EdgeInertial::computeError() 2.函数定义 涉及到的IMU的公式: {// TODO Maybe Reintegrate inertial measurments when difference between …...

Unity协程机制详解

Unity的协程(Coroutine)是一种异步编程的机制,允许在多个帧之间分割代码的执行,而不阻塞主线程。与传统的多线程不同,Unity的协程在主线程中运行,并不会开启新的线程。 什么是协程? 协程是一种…...

2024年【高压电工】最新解析及高压电工考试总结

高压电工考试是电力行业从业人员必须通过的资格考试之一,它不仅检验了考生对高压电技术的掌握程度,还考验了考生在实际操作中的安全意识和应急处理能力。为了帮助广大考生更好地备考,本文整理了10道2024年高压电工考试的最新解析及总结试题&a…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题&#xff1a; 指定音频引擎与设备&#xff1b;播放音频文件 本文所使用的环境&#xff1a; Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程&#xff0c;代码下载&#xff1a;这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中&#xff0c;**知识蒸馏&#xff08;Knowledge Distillation&#xff09;**被广泛应用&#xff0c;作为提升模型…...

vulnyx Blogger writeup

信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面&#xff0c;gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress&#xff0c;说明目标所使用的cms是wordpress&#xff0c;访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...

如何更改默认 Crontab 编辑器 ?

在 Linux 领域中&#xff0c;crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用&#xff0c;用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益&#xff0c;允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...