iOS项目集成RN(0)

iOS原有项目集成RN

  • 环境安装
    • RN环境搭建
      • Node & Watchman 安装
    • 创建新应用
    • iOS项目集成RN
      • 如果没有iOS项目,新建一个 swift, storyboard项目, 名字:RNTest
      • 新建一个 RNDemo目录,一个iOS子目录, 把iOS相关的拷到这个子目录下
      • 可以启动项目了
      • 如果报错RCT-Folly Time.h 文件报错

环境安装

你需要提前安装好,Homebrew,Xcode, Cocoapods

RN环境搭建

Node & Watchman 安装

brew install node
brew install watchman

创建新应用

  1. 卸载全局安装的react-native-cli
npm uninstall -g react-native-cli @react-native-community/cli
  1. 创建新项目
   npx react-native@latest init AwesomeProject

目录结构如下:
请添加图片描述

iOS项目集成RN

如果没有iOS项目,新建一个 swift, storyboard项目, 名字:RNTest

  1. 在info.plist文件中, 删除 UIApplicationSceneManifest,删除SceneDelegate.swift
    最低支持iOS系统版本改为 11.0

appDelegate.swift 更改如下:

import UIKit

@main
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?


    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        let story = UIStoryboard(name: "Main", bundle: nil)
        window = UIWindow(frame: UIScreen.main.bounds)
        window?.rootViewController = story.instantiateInitialViewController()
        window?.makeKeyAndVisible()

        return true
    }



}
 
  1. main.storyboard 防两个按钮,添加点击事件
import React

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        view.backgroundColor = .white
    }

    @IBAction func playGameTap(_ sender: Any) {
    }
    
    @IBAction func highScoreTap(_ sender: Any) {
        NSLog("Hello")
        guard let jsCodeLocation = URL(string: "http://localhost:8081/index.bundle?platform=ios") else {return}
        let mockData:NSDictionary = ["scores":
            [
                ["name":"Alex", "value":"42"],
                ["name":"Joel", "value":"10"]
            ]
        ]

        let rootView = RCTRootView(
            bundleURL: jsCodeLocation,
            moduleName: "RNHighScores",
            initialProperties: mockData as [NSObject : AnyObject],
            launchOptions: nil
        )
        let vc = UIViewController()
        vc.view = rootView
        self.present(vc, animated: true, completion: nil)

    }
}

新建一个 RNDemo目录,一个iOS子目录, 把iOS相关的拷到这个子目录下

  1. 从AwesomeProject中的index.js, metro.config.js, package.json 拷贝到 RNDemo目录下,并执行命令
   npm install
  1. cd 到 iOS 目录执行
   pod init

Podfile 内容改为如下:



# Resolve react_native_pods.rb with node to allow for hoisting
require Pod::Executable.execute_command('node', ['-p',
  'require.resolve(
    "react-native/scripts/react_native_pods.rb",
    {paths: [process.argv[1]]},
  )', __dir__]).strip

platform :ios, min_ios_version_supported
prepare_react_native_project!

linkage = ENV['USE_FRAMEWORKS']
if linkage != nil
  Pod::UI.puts "Configuring Pod with #{linkage}ally linked Frameworks".green
  use_frameworks! :linkage => linkage.to_sym
end

target 'RNTest' do
  config = use_native_modules!

  use_react_native!(
    :path => config[:reactNativePath],
    # An absolute path to your application root.
    :app_path => "#{Pod::Config.instance.installation_root}/.."
  )


  post_install do |installer|
    # https://github.com/facebook/react-native/blob/main/packages/react-native/scripts/react_native_pods.rb#L197-L202
    react_native_post_install(
      installer,
      config[:reactNativePath],
      :mac_catalyst_enabled => false
    )
  end
end

执行 pod install。

  1. 最后目录结构如下:请添加图片描述

可以启动项目了

  1. 在RNDemo目录下 命令行执行
npm start
  1. 在iOS目录下,使用 RNTest.xcworkspace 打开运行项目

如果报错RCT-Folly Time.h 文件报错

  1. 注释代码
    //typedef uint8_t clockid_t;
  2. __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_11_0 改为
    __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_12_0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/153046.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

系列七、栈 堆

一、概述 栈也叫栈内存&#xff0c;主管Java程序的运行&#xff0c;是在线程创建时创建&#xff0c;线程销毁时销毁&#xff0c;它的生命周期是跟随线程的生命周期&#xff0c;线程结束&#xff0c;栈内存也就释放&#xff0c;对于栈来说不存在垃圾回收&#xff0c;只要线程一结…

Vue|props配置

props是Vue中用于传递数据的属性。通过在子组件的选项中定义props属性&#xff0c;可以指定子组件可以接收的数据以及其他配置选项。父组件可以通过在子组件上使用特定的属性来传递数据。 目录 目录 App.vue 什么是App.vue 组件引用 props配置 组件复用 案例1&#xff1a…

【Unity】文件信息的存储和解析(C#代码)

目录 文件存储 两种文件信息解析方法 文件加密处理 文件解密处理 全部代码 文件存储 一些游戏案例开发过程中的一些数据转换成Json格式&#xff0c;然后存到指定的位置 //3.将对象转化为JsonList<Hokag> hokagList new List<Hokag>(){new Hokag(){Name"…

来听B站音乐UP主从容老师讲解GuitarPro和Earmaster

许久没发文了&#xff0c;最近在B站刷到了一位音乐UP主从容Free&#xff0c;他把自己对GuitarPro和Earmaster这2款软件的使用感受进行了详细分享&#xff0c;还没看过的朋友可以戳下面的链接跳转到小破站看完整的&#xff1a; 我不允许还有人不知道这个学吉他的神器&#xff0…

【EI会议征稿】第九届电气、电子和计算机工程研究国际学术研讨会 (ISAEECE 2024)

第九届电气、电子和计算机工程研究国际学术研讨会 (ISAEECE 2024) 2024 9th International Symposium on Advances in Electrical, Electronics and Computer Engineering 第九届电气、电子和计算机工程研究国际学术研讨会(ISAEECE 2024&#xff09;将于2024年3月1-5日在南…

接口测试自动化测试的总结与思考,超详细的~

服务端接口测试介绍 什么是服务端? 一般所说的服务端是指为用户在 APP 或 PC 使用的互联网功能提供数据服务的背后的一切。以天猫精灵智能音箱系列的产品链路为例&#xff0c;服务端便是网关&#xff08;包括网关在内&#xff09;之后的链路。 什么是接口? 官方点说&#…

这种考勤方式,居然能轻松实现!

随着科技的不断发展&#xff0c;人脸识别技术在各个领域得到了广泛的应用&#xff0c;其中之一就是人脸考勤系统。 传统的考勤方式可能存在一些不便之处&#xff0c;例如卡片丢失、打卡漏报等问题&#xff0c;而三维人脸考勤系统以其高精度、高安全性的特点&#xff0c;逐渐成为…

Unittest框架--自动化

Python中方法的传递 参数化 pip install parameterized -i https://pypi.douban.com/simple需求&#xff1a;验证Tpshop登录 # 断言参数化 import time import unittest from parameterized import parameterized from selenium import webdriver from selenium.webdriver.co…

【开源】基于JAVA的智能停车场管理系统

项目编号&#xff1a; S 005 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S005&#xff0c;文末获取源码。} 项目编号&#xff1a;S005&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容A. 车主端功能B. 停车工作人员功能C. 系…

Docker 容器中的网络优化与 DNS 缓存清理

在使用Docker 18.03.1-ce版本在Ubuntu 18.04 LTS上运行多个Docker容器时&#xff0c;我发现当使用requests库发送请求到某个主机名时&#xff0c;响应速度非常慢。在本例中&#xff0c;每个容器都有自己的CherryPy服务器&#xff0c;并通过requests.get(http://main:8083)或req…

2022CCPC绵阳 ACGHM

Dashboard - 2022 China Collegiate Programming Contest (CCPC) Mianyang Onsite - Codeforces C.Catch You Catch Me 题意 思路 首先注意到贡献可以按深度统计&#xff0c;对于每个深度dep&#xff0c;贡献是在dep深度中属于的子树种类数&#xff0c;如果在该深度中子树存在…

python文件读写练习题--随机出10套试卷

要求就是&#xff1a;10套试卷题目顺序不同&#xff0c;答案顺序不同 import random import os city {河北省:石家庄市,山西省:太原市,辽宁省:沈阳市,吉林省:长春市,黑龙江省:哈尔滨市,江苏省:南京市,浙江省:杭州市,安徽省:合肥市,福建省:福州市,江西省:南昌市}#在当前路径下…

如何深度了解汤泉场所?VR全景给你答案

天气逐步转凉&#xff0c;温泉、水会这些室内汤泉场所开始登上消费的主战场。伴随着人们物质生活水平的提高&#xff0c;人们对休闲养生会馆的要求也愈发旺盛&#xff0c;汤泉场所也逐渐从单一的洗浴开始向休闲、娱乐、保健、桑拿等多种业态形式发展&#xff0c;那么大家如何深…

如何利用SD-WAN优化云时代的网络连接

在多云时代下&#xff0c;企业的网络连接需求面临着诸多挑战和变化。随着企业应用的日益复杂和分散&#xff0c;网络连接也变得更加复杂。企业需要同时连接多个云服务商、数据中心、分支机构和移动用户等&#xff0c;并保证网络连接的稳定性和可靠性。同时&#xff0c;企业对于…

什么是自动化测试

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…

大数据的技术运用:探索未来的无限可能性

随着科技的不断进步和社会信息的快速增长&#xff0c;大数据已成为一个热门话题。本文将探讨大数据技术在多个领域的应用&#xff0c;以及它对未来的影响和无限可能性。 导言 在过去的几十年里&#xff0c;大数据技术取得了惊人的发展&#xff0c;它不仅改变了企业的经营方式&a…

2024江苏专转本流程与时间节点

2024江苏专转本考生&#xff0c;提前看一下转本的流程与时间节点&#xff01;适用于江苏三年制、五年一贯制专转本考试&#xff1a; 1. 专转本工作通知&#xff08;2023年12月上旬&#xff09; 若无特殊情况&#xff0c;到12月中旬&#xff0c;江苏省教育厅会发布关于做好2024…

spark性能调优 | 内存优化

目录 我们先了解一下有哪些内存温馨提示RDD示范(spark版本2.1.1)RDD进行优化Df和Ds进行示范 我们先了解一下有哪些内存 1.storage内存 存储数据&#xff0c;缓存 可预估2.shuffle内存 计算join groupby 不可预估spark1.6之前 静态管理的&#xff0c;spark1.6之…

2023测试工程师做哪些准备,才能从众人中脱颖而出,不看后悔10年

最近&#xff0c;裁员的声音此起披伏。貌似我们只有努力奔跑&#xff0c;这一块带有命运诅咒的“石头”才不会轻易的落到我们的头上。 在不是金三银四、金九银十的求职旺季外&#xff0c;还会有机会吗&#xff1f;我想&#xff0c;对于有能力的人来说&#xff0c;任何时候都可…

数据库测试的认知和分类详解

现在的软件系统&#xff0c;尤其是业务应用系统&#xff0c;后台都连接着一个数据库。数据库中存储了大量的数据&#xff0c;数据库的设计是否合理和完善&#xff0c;SQL语句编写是否正确、高效&#xff0c;都直接影响了一个软件系统的功能正确性和性能表现。今天跟大家分享一些…