Taro 3.x 开发 APP 记录

样式 style

  1. 任何组合选择器 样式均会被 RN 忽略,仅支持 类选择器
  2. css 属性均使用驼峰命名法,部分样式不支持;
  3. 不支持background-image 可以使用Image 标签 做背景图;
  4. 对于文本的样式 只在Text 标签生效;
  5. border-radius 只在View 标签生效;
  6. Android 上的RN font-weight 值 只有400 700 normal bold 生效;
  7. 好用的UI组件库 :推荐 React Native Elements
  8. 使用 antd-mobile 过程比较艰难 包内缺少很多依赖 需要手动下载
    看报错 对应下载就好了
    这里是一部分 antd-mobile 缺少的依赖下载

页面 page

生命周期useReachBottom Taro自带生命周期 触底触发 ,但在使用中发现 个别页面 不仅是触及下底 ,触及上底也会触发,usePullDownRefresh 下拉刷新函数居然不执行。做下拉刷新上拉加载的时候要注意;

按钮贴底 : 可以通过 flex:1 通过RN端默认的flex 布局去做,具体该属性的用法&作用 这里不做阐述,一个简单的思路就是在最外层和需要撑起页面空白部分的一层 添加 flex:1 是其撑起空间 从而实现 按钮贴底;

我的理解:

  1. 最外层flex:1 则 最外层撑起 满屏高度;
  2. 需要撑起页面空白部分的一层 flex:1 则 该层撑起空白部分;
    (个人理解,欢迎评论区讨论~)
    这里有一些理解思路,可以看看

插入HTML文本 / 外部网页:Taro 目前不支持RN端插入HTML字符串,推荐使用 react-native-webview 引入webView 还有一些个性化配置 自查 ;(RN原生是有webview 组件的);

2021.8.3 — 动态获取内容高度 用到 injectedJavaScript 时,注入的js
获取内容高度 建议使用document.body.offsetHeight 比 scrollHeight 准确一些

禁止 react-native-webview 组件可滚动,有属性 scrollEnabled={false}
使其高度自适应: 这里可以参考~

( style={{ flex: 0, height: height }} 设置高度必须 设置flex:0)
官网有解释:you need to add flex: 0 to the style if you want to use height property.

app调用相机拍照:Taro 提供 Camera 组件 ,Rn端目前只支持拍照 不支持扫码功能。

重点:调用 api 创建 Camera 上下文需要在 Camera 组件的初始化阶段
使用 react Hooks 时 在 useEffect 方法中初始化失败,需要在 Camera 组件的InitDone 事件中进行初始化。

加载视频组件:Taro 组件库的 Video 组件是不支持RN端的 (其他端均支持),推荐使用 react-native-video 使用它的Video 配置简单 ;
2021.7.8 — 这个需要壳工程的配置,楼主是配置完没效果 一直报错 最后没有选择这个方案)
2021.7.9 — 特意抽时间搞了一下 这个组件不仅要在 项目内install 还要在 壳工程 taro-native-shell 中 npm install && cd ios/ && pod install
2021.7.23 在Android上需要更多配置,不然乱了套了 ,默认controls 会在页面乱跑,尤其是视频列表时。

!注意:

查看 taro-native-shell/ios 下Libraries/ 下有没有 RCTVideo.xcodeproj 文件
没有的话 右键点 Libraries – add files to … 把它加入 (它位于 node_modules /react-native-video/ios/ )
建立连接:
将libRCTVideo.a ----> 加入到 Link Binary With Libraries
重新编译启动后如果报错 可以在github 找找解决办法 戳这里解决问题~~~

时间显示问题

  • 获取到的数据 为 格林威治时间 要转换为local 时间, App内 通过 Date.parse() newDate() 转换失败 显示为NaN;

  • 调研得知:在移动端 new Date() 中只支持 YYYY/MM/DD hh:mm:ss 格式的时间转换格式;

  • 解决:网上的方法不好使 ,手动将 格林威治时间 拆解成 如上格式 然后 +8 * 3600 * 1000 转换为当地时间。避免手动处理跨天跨月等情况。

  • 其他方法有兴趣可以试试 :(思路类似)

const data = new Date(str).toJSON();
let creationTimeStr = new Date(+new Date(data) + 8 * 3600 * 1000).toISOString().replace(/T/g, " ").replace(/\.[\d]{3}Z/, "")

APP内唤醒系统默认浏览器,打开指定页面

Taro RN 也是依赖了原生 react native,原生RN组件在编译APP时也是支持的哦
这里就采用 原生RN的API Linking 实现

// 先导入方法哦
import { Linking } from "react-native";
//使用系统浏览器访问指定URL
export const connectBrowser = () => {var baiduURL = 'http://www.baidu.com/'// ios 直接打开 appstore url = itms-apps://apps.apple.com/cn/app/id{APPID} // itms-apps 不会被识别 需要在 info.plist 注册  具体的[戳这里](https://www.cnblogs.com/lude1994/p/11804808.html)Linking.canOpenURL(baiduURL).then(supported => {if (!supported) {console.warn('Can\'t handle url: ' + baiduURL);} else {return Linking.openURL(baiduURL);}}).catch(err => console.error('error',baiduURL));
}

Xcode 配置 :允许http请求

  1. 打开 info.plist
  2. 在 App Transport Security Settings 下 增加 Allow Arbitrary Loads 值为 YES
详细配置解释:

iOS进行HTTPS适配深入理解与实践

真机调试 报错

(如图所示)

百度有很多解决办法,楼主通过如下方法解决 :

// 修改AppDelegate.m代码:
return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index.ios" fallbackResource:nil];
改为 =>[NSURL URLWithString:@"http://127.0.0.1:8081/index.ios.bundle?platform=ios&;dev=true"];// 如果不行 可以将127.0.0.1 改成 自己电脑局域网 ip ( 此时手机和电脑应该在同一局域网下 !!)

android 真机调试

执行命令如下:

adb devices (mac 若提示 not found,刷新一下 android 环境变量文件 source .bash_profile 再执行)
adb reverse tcp:8081 tcp:8081

xcode 编译代码报错:

ld: library not found for -lpcre
clang: error: linker command failed with exit code 1 (use -v to see invocation)

xcode编译代码的时候 ld: library not found for -xxx 解决方法
另外 有些库引入了但是因为目录路径不准确找不到,因此需要 :
Build Setting”->“Search Paths”->”Library search Paths” 中找到 not found 的库
将其 值改为 recursive (递归查找)

IOS 打包详解

xcode 新版本 容易导致打包失败 ,必须切换打包程序
点击菜单栏 file – workspaceSetting – buildSystem - 选择Legacy Build System
最新xcode打包IPA(完整详细图文)

更改 ios App icon & Launch Screen

更改 ios App icon 和 进入app 显示图片
设置 ios App 启动图
iOS LaunchScreen.storyboard 的使用和适配
iOS开发 - 关于启动页和停留时间的设置
Xcode 设置启动图

生成Android 签名证书 or 秘钥

来吧 直接上链接 !
参考:
官方文档(在window系统生成签名)
Mac 下生成Android 签名证书
Mac 下生成keystore,并对apk进行签名

更改 Android App icon & Launch Screen

values/strings.xml
Android 修改app图标和名称
【Android学习笔记】设置App启动页
React Native打包Apk,修改app图标,名称,启动页

2021-8-10
更改 android 启动图中 如果选用 新增 activity 的方式,注意!
在 AndroidManifest.xml 中将 新增的启动图 activity 放到其他 activity 前面时,多个activity 中都存在以下部分,只保留第一个内部的android.intent.category.LAUNCHER
因为:
{ action=android.app.action.MAIN, category=android.app.category.LAUNCHER } is the actual intent used by the Launcher to populate its top-level list.
翻译:添加了{ action=android.app.action.MAIN, category=android.app.category.LAUNCHER } 的 activity 是在程序启动的列表中的。所以如果定义多个LAUNCHER,就会出现多个APP图标。

<intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

参考资料:【Android开发那点破事】Android调试安装出现2个或2个以上图标

不上架 AppStore 发布app

写一个 .plist 文件,(下面会展示),下载按钮调起 安装程序 指向 .plist 地址,
具体步骤 :
注意: 不上架AppStore 打包的时候需要用 In House 企业级证书 ($299)
会同时生成需要的 .plist .ipa;
苹果App,不用上传苹果商店,也能让其他人安装
链接2 (同一篇 ,留个备用地址)

APP上线之后大坑

IOS:

  1. 下载后首次打开APP 首屏接口全部fail 。
    原因:国行发行的iOS 首次打开App 需要用户选择使用网络类型, 在此之前请求已经发起 所以导致 失败。
    详情可以来这里:
    iOS 10 的坑:新机首次安装 app,请求网络权限“是否允许使用数据”

Taro 3.x 开发 APP 记录 (持续记录中。。。)相关推荐

  1. VSTO开发入门教程[持续更新中......]

    Paragraph 01 VSTO课程学习路线图[持续更新中......] 第一阶段:熟悉 visual studio 编程环境 1.1--理解 VSTO 的概念 1.2--安装 visual stu ...

  2. 张双老师PHP开发实例教程持续更新中

    PHP(全称:PHP:Hypertext Preprocessor,即"PHP:超文本预处理器")是一种开源的通用计算机脚本语言,尤其适用于网络开发并可嵌入HTML中使用.PHP的 ...

  3. 一些问题的答案记录 (持续更新中)

    前言: 博士期间会不断的学习和查阅在线资料, 甚至有时候能发现一些特别出彩的小问题及其答案. 与其花时间记住全部的答案, 不如将他们记录下来,以便后期查阅, 故写此文. 问题集: 如何清空CPU Ca ...

  4. 初中数学知识遗忘记录(持续更新中)

      概念解释 图示 旋转中心对称 把一个图形绕着某一点旋转180度,如果它能够和另一个图形重合   轴对称   余角 果两个角的和是直角,那么称这两个角"互为余角"(complem ...

  5. spark和hadoop升级记录(持续更新中)

    昨晚从spark-2.3.1-bin-hadoop2.7升级到spark-3.0.0-preview2-bin-hadoop3.2 基本结论是: /etc/hosts不用修改 ~/.bashrc中路径 ...

  6. 【Photoshop】常用快捷键记录—持续记录

    Ctrl+N:新建文档: Ctrl+J:复制图层 Ctrl+T:旋转,移动图层,按住shift可非等比例缩放.旋转固定角度: Ctrl+D:取消选择: Alt+Delete:选中,填充前景色: ctr ...

  7. 基于机器学习的雷达信号分选和目标识别(论文阅读学习记录—持续记录)

    机器学习在雷达信号分选技术上的应用包括信号分离.确定脉冲参数.形成单部雷达脉冲序列,然后针对雷达目标识别进行分类并划分威胁程度等.在一维距离像识别过程中包括去噪和雷达目标型号识别.该论文(学习内容)重 ...

  8. 【开发规范】持续更新中......

    目录 一.编码规范 接口规范 命名规范 并发处理 常量定义 集合处理 控制语句 事务规范 其他规范 二.异常日志 日志规范 异常规范 三.工程规约 服务器规约 二方库规约 四.MySQL数据库规范 建 ...

  9. arcgis二次开发arcpy视频教程(持续更新中......)

    https://edu.csdn.net/course/detail/25535 01. 课程概况 02. ArcPy开发-1-python基础--环境搭建.第一个程序.练习 03. ArcPy开发- ...

  10. 数据库期末项目开发心得(持续更新中)

    数据库期末项目开发心得 文章目录 数据库期末项目开发心得 1.架构的实践案例 **(1)[(23条消息) Vue + Spring Boot 项目实战(一):项目简介_Evan 的博客-CSDN博客_ ...

最新文章

  1. Hibernate 配置 p6spy 显示完整 sql 语句
  2. Xilinx FFT IP core V9.0的介绍和使用
  3. verilog中数组的定义_systemverilog中的数组操作
  4. 蚂蚁金服的 Service Mesh 演进之道?
  5. 带你了解无线网络渗透测试——无线网络嗅探工具Kismet
  6. 《Selenium自动化测试指南》—第1章1.1节自动化测试基础
  7. office 自动编号系列碰到问题小解
  8. 读取不同位置的配置文件
  9. centos5.3安装vmware
  10. tf.group()用于组合多个操作
  11. php易错,PHP学习1:几种常见数据类型及其易错点
  12. 查看系统中支持CUDA的设备数量和属性---deviceQuery示例
  13. python 随机数_Python中的随机数
  14. m_pRecordset-Open
  15. java鼠标监听事件_Java鼠标事件监听器的创建和使用教程及代码
  16. 数学建模三大模型以及十大算法
  17. 电子商务平台搭建方案
  18. 淘宝商城和淘宝网有什么区别
  19. c语言程序设计 实验五数组,C语言实验五 数组程序设计(二)
  20. 人人商城商品分享码添加用户的头像和昵称

热门文章

  1. [bilibili] B站屏蔽“柳学家”弹幕 正则表达式
  2. 梅特勒-托利多 TCS-35 电子台秤
  3. Java程序员面试全集(上)
  4. 世界精神卫生日:不断变化的世界的应用程序
  5. 【分享】VMOS Pro1.4.2最新会员版
  6. pytest 运行出现collected 0 items
  7. MySQL原理与实践(二):一条update语句引出MySQL日志系统
  8. python定义变量不赋值_python定义变量
  9. UML学习_1_模型
  10. html怎么引用网页链接,浅谈网页中各种链接引用方法