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

uni-app-配合iOS App项目开发apple watch app

假设你已经用uni-app开发好了一个iOS端的app,现在想要开发一个配套的apple watch app。改怎么去开发呢?是不是一头雾水,这篇文章就会介绍一些apple watch app开发的知识以及如何在uni-app开发的iOS app基础上去开发配套的watch app

一、apple watch 开发知识

apple watch app类型

首先,我们来了解下apple watch app有哪些类型。

 我们在新建一个WatchOS app的项目时可以看到,watch app有2种类型。一个是独立的watch app(Watch-only app),一个是依赖iOS app的watch app(with Companion iOS App),那么他们有什么区别呢?我将从几个不同的角度去介绍:

  • 安装

        watch-only的只能通过apple watch上的appStore去下载安装

        with iOS App的,可以通过手机上Watch应用去安装可使用的watch app,当然也可以通过appStore下载

  • 开发

        watch-only新建项目时只有watchKit app和watchKit extension。

        with iOS App的则会有一个iOS app的target

UI框架说明

watchKit app虽然可以通过UIKit,使用swift或者OC来开发,但是官方建议的是使用SwiftUI这个新的UI框架开发。因为 SwiftUI 具有声明式编程、更简洁的语法、更好的跨平台性以及对数据绑定和响应式编程的良好支持等优点,特别适合手表、VR眼镜这种屏幕较小、交互相对简单的设备。

swiftUI的语言和swift还是有较大的区别的,UI控件的使用、生命周期的管理等都大不一样,还是需要各位同学去系统的学习一下。

数据请求类型

有一部分watch app是工具类的App(比如闹钟),不需要获取网络数据。

有一部分watch app是只需要获取健康数据(步数、心率、睡眠等),通过原生的HealthKit即可获取。

有一部分watch app需要联网获取在线数据,就需要通过Alamofire等网络库或者原生的URLSession来实现数据请求。

还有一种特殊的数据获取方式,就是通过Watch Connectivity实现watch app和手机app数据交换,数据可以通过手机app请求拿到(在线或者其他方式),然后传输给watch app。watch app也可以传输数据给手机app。下面会详细讲下这个Watch Connectivity。

Watch Connectivity

这里我们是有2个设备,一个watch,一个iphone。对应项目里是有一个app的target,一个watchKit的target。

  • WCSessionManager单例封装

首先我们来封装一个Manager来管理数据的发送、接收以及最开始的初始化。

通过shared实现单例访问,持有session属性和一个消息回调callBack。同时需要遵循WCSessionDelegate实现相关代理方法(状态变化、接收消息等)。

session是WCSession类型,整个过程的数据交换都是通过WCSession来实现的。

import WatchConnectivityfinal class WCSessionManager: NSObject {static let shared = WCSessionManager()var session = WCSession.defaultvar callBack: ((NSDictionary)->Void)!private override init() {super.init()if WCSession.isSupported() {session.delegate = selfsession.activate()}}func initWithCallBack(callback: @escaping (NSDictionary) -> Void) {let sessionManager = WCSessionManager.sharedsessionManager.callBack = callback}func sendMessage(message: [String: Any]) {session.sendMessage(message, replyHandler: nil)}
}// MARK: - WCSessionDelegate
extension WCSessionManager: WCSessionDelegate {#if os(iOS)func sessionDidBecomeInactive(_ session: WCSession) {print("\(#function): activationState = \(session.activationState.rawValue)")}func sessionDidDeactivate(_ session: WCSession) {// Activate the new session after having switched to a new watch.session.activate()}func sessionWatchStateDidChange(_ session: WCSession) {print("\(#function): activationState = \(session.activationState.rawValue)")}func session(_ session: WCSession, didReceiveMessageData messageData: Data, replyHandler: @escaping (Data) -> Void) {print("didReceiveMessageData")}#endiffunc session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) {// 处理激活完成print("\(#function): activationState = \(session.activationState.rawValue)")}func session(_ session: WCSession, didReceiveMessage message: [String: Any]) {// 处理接收到的消息print("收到message: \(message)")}func session(_ session: WCSession, didReceiveMessage message: [String: Any], replyHandler: @escaping ([String: Any]) -> Void) {// 处理需要回复的消息print("收到message: \(message)")replyHandler(["status": "received"])}func session(_ session: WCSession, didReceiveUserInfo userInfo: [String : Any] = [:]) {print("收到userInfo: ")print(userInfo)}func session(_ session: WCSession, didReceiveApplicationContext applicationContext: [String : Any]) {print("收到context: ")print(applicationContext)}
}
  • 初始化并设置回调处理

        1、在iOS app对应target的AppDelegate(或者其他页面中也行)调用initWithCallBack实现初始化并设置收到消息后回调处理。initWithCallBack内部会调用.shared从而触发init方法,再通过内部session.delegate = self和session.activate()完成初始化。

        2、在watchkit app对应的target的里的AppDelegate文件中调用initWithCallBack实现初始化并设置收到消息后回调处理。这里需要注意watchKit app里本身没有AppDelegate文件,需要自己新建并且在main主入口中关联。

新建:

import WatchKit
import WatchConnectivityclass AppDelegate: NSObject, WKApplicationDelegate {override init() {super.init()assert(WCSession.isSupported(), "This sample requires a platform supporting Watch Connectivity!")WCSessionManager.shared.initWithCallBack { data in}}
}

关联: 

import SwiftUI@main
struct WatchApp_Watch_AppApp: App {@WKApplicationDelegateAdaptor var appDelegate: AppDelegatevar body: some Scene {WindowGroup {ContentView()}}
}

        3、链接状态介绍。我们在调用初始化的方法后,会进入到对应的代理方法中,返回WCSession的状态session.activationState。由 WCSessionActivationState 枚举定义:

  • activated:会话已激活,可正常通信。
  • inactive:设备已配对但会话未激活(需调用 activate() 方法)。
  • notPaired:设备未配对,无法通信。
  • notConnected:设备已配对但未连接(如蓝牙断开)。

  • 数据发送

        我们先来了解下Watch Connectivity发送数据有哪几种方式:

  1.         短消息(Messages):实时发送少量数据(如布尔值、字符串、字典)。
  2.         用户信息(User Info):传输字典类型数据,支持后台异步传输。
  3.         文件传输(Transfer File):发送较大文件(如图片、视频)。
  4.         数据更新(Update Context):更新共享的上下文数据(如用户设置、当前状态)。

        一般我们只用到前面2种,可以直接调用WCSessionManager中的方法实现发送:

    WCSessionManager.shared.sendMessage(["a":"aa"])WCSessionManager.shared.transferUserInfo(["b":"baba"])

       

二、绑定uni-app开发的iOS App

前面第一部分介绍了apple watch app开发的部分。那么怎么将watch app绑定到用uni-app开发的App中呢?

一开始我先为iPhone和iWatch分别创建了2个独立的项目,按规则设置bundleID、AppGroups等,测试发现没办法进行通讯。运行会提示对方App未安装,查询资料是没有设置target dependencies,但是2个分开的项目没办法设置target dependencies。所以还是得在一个项目里创建2个target来分别开发2个端。

于是就想到将uni-app项目通过本地离线打包,得到一个可以在原生xcode中运行的项目工程。期间研究离线打包的知识也是花了一点时间,而且由于uni-app用到了UTS插件,还需要将这些插件打包成iOS原生的framework加到离线工程里才能使用。就在向官方技术咨询uts插件打包framework的问题时,了解到最新的HBuilderX支持Watch App产物添加。也就是可以把原生打包出来的ipa中的watch app部分,配置到uni-app工程中,再通过云打包,可以得到包含watchKit app的iOS app。这简直太香了,于是我就放弃当前离线工程的方式,开始新的方案。

现在开始介绍新的方案,也是最终方案:

  1. 首先在Xcode中新建一个iOS app工程,就和开发普通App一样即可。
  2. 然后查看项目Target并新建一个Target,选WatchOS --> App,类型选择“Watch App for Existing iOS App”
  3. 然后修改watchApp 这个target里的bundleId,注意这里有严格的格式要求。比如iOS App里bundleID是com.***.app,那么watch里就要用com.***.app.watchkitapp。
  4. 然后再配置App Groups,这一步可以参考苹果文档或者网络上教程。
  5. 完成上面这些操作,就算是创建好了一个基础的框架了。接下来就是开发功能相关的了,此处省略N万字。
  6. 开发完功能后,就是打包了。Scheme选中iOS App这个,和之前开发iOS App普通打包一样,打包得到ipa。然后解压ipa,找到里面watch文件夹,复制watch文件夹里面的.app 文件。
  7. 关联watch app到 uni-app工程。在 uni-app/uni-app x 项目原生资源目录 “nativeResources” 的 “ios” 目录下创建 “Watch”子目录,并添加 Watch App 二级制文件,结构如下图。可以在ios-watch.json中配置云打包时重签名设置。
  8. 云打包制作自定义基座,安装App调试,测试是否同步有可使用的watch App。

至此,在uni-app开发的App基础上开发一个配套的watch app方案就介绍完了。

相关文章:

uni-app-配合iOS App项目开发apple watch app

假设你已经用uni-app开发好了一个iOS端的app,现在想要开发一个配套的apple watch app。改怎么去开发呢?是不是一头雾水,这篇文章就会介绍一些apple watch app开发的知识以及如何在uni-app开发的iOS app基础上去开发配套的watch app。 一、ap…...

如何理解Java反射机制

反射机制原理 反射是Java在运行时动态获取类信息、操作类属性和方法的能力。核心原理是JVM在类加载时创建Class对象,该对象包含类的完整结构信息。 关键类: Class:类的元数据入口 Field:类的成员变量 Method:类的方…...

SM3算法C语言实现(无第三方库,带测试)

一、SM3算法介绍 SM3算法是中国国家密码管理局(OSCCA)于2010年发布的商用密码散列函数标准,属于我国自主设计的密码算法体系之一 ,标准文档下载地址为:SM3密码杂凑算法 。SM3算法输出长度为256位(32字节&a…...

King’s LIMS 系统引领汽车检测实验室数字化转型

随着汽车保有量的持续攀升和车龄的增长,消费者对汽车的需求已悄然转变,从最初对外观和性能的追求,逐渐深化为对安全性、可靠性、耐久性、性能与舒适性以及智能化功能的全方位关注。这无疑让汽车检测行业在保障车辆质量、满足市场需求方面肩负…...

CppCon 2017 学习:Mocking Frameworks Considered

当然可以,下面是对 Fowler 的 Whiskey-Store 示例。 Fowler 的 Whiskey-Store 示例(坏设计) 贴出的类图是 Martin Fowler 在《重构》书中使用的一个教学用反面案例(故意设计得不合理),用来说明如何通过重…...

通过事件过滤器拦截QRadioButton点击事件

通过事件过滤器拦截QRadioButton点击事件 一、事件过滤器完整实现 1. 核心代码扩展(含注释) bool MainWindow::eventFilter(QObject* obj, QEvent* ev) {// 拦截所有QRadioButton的鼠标事件(包括点击、释放、双击)if (ev->ty…...

领码 SPARK 融合平台赋能工程建设行业物资管理革新——数智赋能,重塑中国模式新范式

摘要 工程建设行业正加速迈向数字化与精益化转型,物资管理成为项目成败的关键瓶颈。本文深入解析中国工程企业“项目部-物资部-企业项目管理部”三级协同的独特物资管理体系,聚焦集中采购与零星采购的统筹难题。基于领码 SPARK 融合平台,提出…...

“地标界爱马仕”再启:世酒中菜联袂陈汇堂共筑新会陈皮顶奢产业

“地标界爱马仕”再启战略新篇:世酒中菜联袂陈汇堂,共筑新会陈皮顶奢产业生态 ——中世国际与陈汇堂股权合作签约仪式在国际地理标志服务基地举行 江门市新会区,2025年6月20日——被誉为“地标界爱马仕”的全球顶奢品牌运营商世酒中菜 &…...

.Net Framework 4/C# 数据访问技术(ADO.NET)

一、数据库基础 (一) 数据库简介 数据库是按照数据结构来组织、存储和管理数据的仓库,是存储在一起的相关数据的集合。 (二) SQL 语言简介 SQL 是一种数据库查询和程序设计语言,用于存取数据以及查询,更新和管理关系型数据库系统。在编写 SQL 语句时,SQL 语句各关键字要以…...

北京京东,看看难度

最近由于三大外卖平台“打仗”,优惠券多到数不过来,一日三餐每个平台各点一单哈哈哈,正好最近组织内部还有朋友在北京的京东面试过,分享一下她的面经(Java岗): 1. Kafka消息不丢失问题&#xf…...

RPGMZ游戏引擎 如何手动控制文字显示速度

直接上代码 const _Window_Base_prototype_initialize Window_Base.prototype.initialize;Window_Base.prototype.initialize function(rect) {_Window_Base_prototype_initialize.call(this, rect);this.文字速度缓冲 0;}; this.文字速度缓冲 0; 进行缓冲 Window_Base…...

linux线程同步

互斥锁 同步与互斥概述** 现代操作系统基本都是多任务操作系统,即同时有大量可调度实体在运行。在多任务操作系统中,同时运行的多个任务可能: 都需要访问/使用同一种资源 多个任务之间有依赖关系,某个任务的运行依赖于另一个任…...

大内存对电脑性能有哪些提升

在科技飞速发展的今天,电脑已经成为我们生活和工作中不可或缺的伙伴。无论是日常办公、追剧娱乐,还是进行复杂的游戏和专业设计,电脑的性能都至关重要。而在影响电脑性能的众多因素中,内存大小常常被人们忽视。 多任务处理更流畅…...

什么是“微博养铁粉”以及如何增加微博铁粉

发了个发微博养铁工具_微博养铁粉的定义 微博养铁粉是指粉丝通过与博主的互动,成为博主的铁粉。铁粉是微博推出的一种反映粉丝与博主之间亲密度的互动产品。成为铁粉后,粉丝的评论权重增加,更容易上前排,点赞和评论的效果也会更好…...

华为和H3C服务器配置远控管理地址

1、华为RH2288_V3服务器 1.1、启动服务器按DEL按键进入服务器bios 1.2、选择Advanced菜单中的 IPMI iBMC Configuration配置项回车进入。 1.3、IPMI iBMC Configuration配置界面中选择IBMC Configuration配置项回车进入。 1.4、IBMC Configuration 配置项中配置IPV4 Configura…...

Git 查询与切换分支的完整指南

Git 查询与切换分支的完整指南 1. 查询分支列表 查看本地分支 git branch当前分支会以绿色显示并带有 * 标记添加 -v 或 -vv 查看更详细的信息(最后一次提交和跟踪关系) git branch -v # 或者 git branch -vv查看所有分支(包括远程分支&a…...

Spring 中的依赖注入(DI)详解

📌 摘要 在现代 Java 开发中,依赖注入(Dependency Injection, DI) 是 Spring 框架最核心的功能之一。它通过解耦对象之间的依赖关系,提高了代码的可维护性、可测试性和可扩展性。 本文将全面讲解 Spring 中依赖注入的…...

Bytebase 3.7.1 - 数据库变更功能全免费!

🔔 重大变更 所有数据库变更相关功能现已在社区版中完全免费开放!详情请查看我们的最新定价。 🎄 改进 文档网站全面升级,改进导航、搜索功能,以及与 AI 集成自助回答问题。SQL 编辑器现在会高亮光标所在的语句。SQ…...

深度学习笔记27-LSTM实现糖尿病探索与预测(Pytorch)

🍨 本文为🔗365天深度学习训练营中的学习记录博客🍖 原作者:K同学啊 一、前期准备 1.数据导入 import torch.nn as nn import torch.nn.functional as F import torchvision,torch import numpy as np import pandas as pd impo…...

3DS中文游戏全集下载 任天堂3DS简介3DS第一方独占游戏推荐

任天堂3DS 的详细介绍,涵盖其硬件特性、核心功能、游戏阵容及历史地位: 3DS游戏全集下载 https://pan.quark.cn/s/dd40e47387e7 https://sink-698.pages.dev/3ds CIA CCA 等格式可用于3DS模拟器和3DS实体机 3DS 是什么? 全称:Nin…...

vue3 reactive重新赋值

在 Vue 3 中,如果你想使用 reactive API 来创建一个响应式对象,并且之后需要更新这个对象中的属性,你可以按照以下步骤进行: 1. 使用 reactive 创建响应式对象 首先,你需要从 Vue 的 reactive API 中创建一个响应式对…...

全面掌握 C++ 基础:关键特性与进化

文章目录 全面掌握 C 基础:关键特性与进化1. C 关键字2. 命名空间(namespace)⚠️ 示例 2.1 定义命名空间2.2 使用成员的方法 3. C 输入/输出(iostream)4. 缺省参数(Default Parameter)4.1 定义…...

HTML一键打包EXE串口API介绍

HTML一键打包EXE软件(HTML转EXE) 支持将Web前端项目转换为Windows平台下的独立可执行程序(EXE),适用于Windows 7及以上系统,无需额外配置系统环境, 软件包含多种内核, 包括IE内核, Chrome内核, 以及WebView2(永久免费), 适用于不同…...

.docx 和 .doc 都是 Word 文档格式的区别

.docx 和 .doc 都是 Word 文档格式,但有区别: .docx 是新版 Word 格式(推荐使用) 从 Microsoft Word 2007 起引入的格式全名是:Office Open XML Document实际是一个 压缩包(ZIP)结构&#xff0…...

如何轻松地将音乐从 iPhone 传输到 Mac?

想把音乐从 iPhone 传输到 Mac 吗?这很常见,无论你是想更换设备、备份收藏,还是只想在更大的屏幕上欣赏喜爱的歌曲。幸运的是,有 6 种有效的方法可以完成这项工作,具体取决于你喜欢使用的工具。让我们开始吧。 第 1 部…...

Qwen3 Embedding 结构-加载-训练 看透模型设计哲学

看透一个顶级AI句向量模型的设计秘密,从文件结构到加载原理,再到其背后的训练哲学。 1 Qwen3-Embedding模型结构拆解 说明:目录包含了运行一个基于 Transformer 的句向量模型所需的所有组件 文件类别核心文件作用核心模型model.safetensors…...

AT8548双通道 H 桥电机驱动芯片

AT8548 是一种双通道低饱和电压的正、反向电机驱动芯片,为玩具、打印机和其它电机一体化应用提供一种双通道电机驱动方案。 特点: 双通道H桥电机驱动器; 驱动两个直流有刷电机或者一个步进电机; 低RDS(ON)电阻,1.06Ω(…...

kubeadm worker节点加入master失败

文章目录 1、操作2、问题现象3、问题原因4、问题解决4.1、重新生成token4.2、重新生成hash值 5、验证 1、操作 执行以下命令,让worker节点加入到master节点 kubeadm join 103.123.222.241:6443 --token vxe3v1.wzpnks8v1vbbtsu0 --discovery-token-ca-cert-hash s…...

Maven 之工程化开发核心指南:插件配置、pom 文件与依赖管理

目录 1. 🧩Maven插件 2. 🏗️构建Maven工程 3. 📄 pom文件配置 ​3.1. ⚙️ ​ 中定义一些配置信息 ​3.2. 📦 ​中定义依赖的jar包坐标 ​3.3. 🔌 ​中定义第三方插件 ​4. ✍️编写代码 5. 🔗依赖范…...

分布式系统中的 Kafka:流量削峰与异步解耦(二)

Kafka 在分布式系统中的应用案例 电商订单系统 在电商领域,订单系统是核心业务模块之一,涉及多个复杂的业务环节和系统组件之间的交互。以常见的电商购物流程为例,当用户在电商平台上下单后,订单创建服务会首先接收到用户的订单…...

从服务器收到预料之外的响应。此文件可能已被成功上传。请检查媒体库或刷新本页

如果php.ini已经加入了如下的内容还是报错 : upload_max_filesize 1024M post_max_size 1024M 那就是因为阿帕奇导致:...

FramePack 安装指南(中文)

FramePack 安装指南(中文) -Windows FramePack 是最前沿的 AI 视频生成框架,以极小的硬件需求颠覆视频创作!它能在仅 6GB 笔记本 GPU 内存上,驱动 13B 模型以 30 FPS 生成超长 120 秒视频,几乎无内容限制&…...

【NLP入门系列三】NLP文本嵌入(以Embedding和EmbeddingBag为例)

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 博主简介:努力学习的22级本科生一枚 🌟​;探索AI算法,C,go语言的世界;在迷茫中寻找光芒…...

电子电气架构 --- 软件供应商如何进入OEM体系

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 简单,单纯,喜欢独处,独来独往,不易合同频过着接地气的生活,除了生存温饱问题之外,没有什么过多的欲望,表面看起来很高冷,内心热情,如果你身…...

检索增强生成(RAG)领域关键数据集综述:分类、挑战与展望

检索增强生成(RAG)领域关键数据集综述:分类、挑战与展望 摘要 检索增强生成(RAG)通过融合外部知识库与大型语言模型,已成为解决知识密集型自然语言处理(NLP)任务的关键范式。高质量…...

CFD仿真计算革命:基于GPU的格子玻尔兹曼方法(LBM)算子优化——利用Tensor Core加速碰撞核计算(性能提升3倍实测)

点击 “AladdinEdu,同学们用得起的【H卡】算力平台,注册即送H800算力”,H卡级别算力,按量计费,灵活弹性,顶级配置,学生专属优惠。 在计算流体动力学领域,格子玻尔兹曼方法正以介观模…...

【蓝牙】Qt4中向已配对的手机发送PDF文件

在Qt 4中实现通过蓝牙向已配对的设备发送文件(例如PDF文件),你可以使用Qt Bluetooth模块。Qt 4的蓝牙模块提供了基本的蓝牙功能,包括设备发现、配对管理和数据传输。下面是一些步骤和示例代码,帮助你通过蓝牙发送PDF文…...

Vue + AbortController 请求取消弹窗 hook 封装

背景 实际业务开发场景中,往往存在有些大数据请求的需求,一旦请求发起加载遮罩后用户就无法操作了,直接尬住,所以提供一个支持取消查询的功能还是很有必要的,为了在全业务接口都能使用封装一个hook。 ✋为什么要用 A…...

在小程序中实现上下左右拖动表格

在小程序的开发中,不可避免会出现上下左右拖动表格的类似需求,下面将把这个简单实现一下 其中主要使用到了overflow: scroll;来使得横向和纵向可以滚动,并且使用负边距 父容器截断的方法来同时隐藏横向和纵向滚动条,从而实现该效…...

Spark 以及 spark streaming 核心原理及实践

导语 spark 已经成为广告、报表以及推荐系统等大数据计算场景中首选系统,因效率高,易用以及通用性越来越得到大家的青睐,我自己最近半年在接触spark以及spark streaming之后,对spark技术的使用有一些自己的经验积累以及心得体会&…...

数据融合平台是什么?如何搭建数据融合平台?

目录 一、数据融合是什么 1. 定义 2. 作用 二、数据融合平台的功能是什么 1. 数据抽取 2. 数据清洗 3. 数据转换 4. 数据关联 5. 数据存储 三、如何让搭建数据融合平台 1. 需求分析 2. 选择合适的技术和工具 3. 设计平台架构 4. 开发和部署平台 5. 数据迁移和融…...

Linux之线程同步与互斥

目录 一、线程互斥 1.1、进程线程间的互斥相关背景概念 1.2、互斥量mutex 1.2.1、互斥量的接⼝ 1.3、互斥量实现原理探究 1.4、互斥量的封装 二、线程同步 2.1、条件变量 2.2、同步概念与竞态条件 2.3、条件变量函数 2.4、⽣产者消费者模型 2.4.1、为何要使⽤⽣产者…...

uniapp开发小程序,导出文件打开并保存,实现过程downloadFile下载,openDocument打开

uniapp开发小程序,导出文件打开并保存 实现思路 1、调用请求获取到后端接口返回的下载文件的url路径 (注意必须是https的路径,域名需要配置在微信小程序后台的合法域名里面) 2、使用 uni.downloadFile 方法 (下载文件…...

腾讯云COS“私有桶”下,App如何安全获得音频调用流程

流程图 #mermaid-svg-Phy4VCltBRZ90UH8 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Phy4VCltBRZ90UH8 .error-icon{fill:#552222;}#mermaid-svg-Phy4VCltBRZ90UH8 .error-text{fill:#552222;stroke:#552222;}#me…...

简单的 ​Flask​ 后端应用

from flask import Flask, request, jsonify, session import os app Flask(__name__) app.secret_key os.urandom(24) users { 123: admin, admin: admin } # 登录接口 app.route(/login, methods[POST]) def login(): data request.get_json() username data.get(usern…...

Android 中 解析 XML 字符串的几种方式

在 Android 开发中,解析 XML 文件有多种方式,每种方式都有其特点和适用场景。常见的 XML 解析方式有 DOM 解析、SAX 解析 和 XmlPullParser 解析。 1、DOM 解析 DOM(Document Object Model)解析是一种基于树结构的解析方式&#…...

git commit

‌git commit 是版本控制的核心操作之一,用于将暂存区的修改记录为新的版本提交‌。以下是关键步骤和最佳实践: ‌基础操作‌ ‌提交单个文件‌: bash Copy Code git commit -m “提交信息” ‌提交多个文件‌: bash Copy Code …...

【新手向】GitHub Desktop 的使用说明(含 GitHub Desktop 和 Git 的功能对比)

GitHub Desktop 是 GitHub 公司推出的一款桌面应用程序,旨在帮助开发人员更轻松地使用 GitHub,以下是其简单的使用说明: 安装与登录 下载 GitHub Desktop |GitHub 桌面 访问GitHub Desktop 官方网站,根据自己的操作系统下载对应的…...

Tomcat项目本地部署(Servlet为例)

在Windows上部署 在idea中打开项目 首先我们需要准备一个Servlet项目,我之前的Servlet项目是用eclipse写的,这种情况下如果用idea直接打开的话会出现左侧目录无法显示的情况,这个时候我们就需要用别的方法打开 打开项目管理 如下图&#…...

Linux——linux的基本命令

目录 一、linux的目录结构 二、绝对路径和相对路径 三、文件类型(linux下所有东西都可看作文件) 四、文件的权限 五、文件权限的修改(chmod) 六、linux常用的命令 七、文件查看命令 八、文件编辑命令 九、文件压缩与解压…...