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

CentOS 编译安装TinyXml2

安装

TinyXml2 Git 源码下载地址:https://github.com/leethomason/tinyxml2

步骤1:首先,你需要下载tinyxml2的源代码。你可以从Github或者源代码官方网站下载。并上传至/usr/local/source_code/
 步骤2:下载完成后,需要将源代码解压,可以使用以下命令:

tar -zxvf tinyxml2-8.1.0.tar.gz

步骤3:解压后,切换到源代码目录:

 cd tinyxml2-8.1.0

 步骤4:执行make && make install  命令进行安装:

make &&  make install

温馨提示:完成以上步骤后,在/usr/local/lib下会生成libtinyxml2.so动态库和/usr/local/include下生成tinyxml2.h头文件。你可以使用以下命令查看是否安装成功:

ls /usr/local/lib | grep tinyxml2
ls /usr/local/include | grep tinyxml2

如果看到libtinyxml2.so和tinyxml2.h,则说明成功安装了tinyxml库。

 TinyXml2 库

简介

TinyXML2 是简单实用的开源的 C++XML 文件解析库,可以很方便的应用到现有的项 目之中。 TinyXML2 解析器相对 TinyXML1 在代码上是完全重写,使其更适合于游戏开发 中使用。它使用更少的内存,更快,并使用更少的内存分配。

由于 XML 的树状结构,TinyXML2 将 XML 的节点抽象为 XMLNode,XML 中除了把属 性 key-value 抽象为 XMLAttribute 类型外,其余的都看作 XMLNode 的子类,首先将整个 XML 文档抽象为 XMLDocument,将声明部分抽象为 XMLDeclaration,将注释抽象为 XMLComment,将元素抽象为 XMLElement,将文本抽象为 XMLText。
 

核心:节点、元素、属性和值

XMLAttribute 是解析 XML 的属性的类,XML 中的属性都与 XML 的 Element 绑定,并且为 key-value 类型。

XMLComment       主要是处理 XML 注释的类,注释的存储形式为""。

XMLDeclaration 主要是处理 XML 中声明的类,声明的存储形式为"<? declaration ?>"。 XMLDocument  代表 XML 整个实体,TinyXML2 中只有 XMLDocument 类可以被实例化,其他的类必

须通过 XMLDocument 提供的 new 方法进行实例化,而不能直接实例化。XMLNode

的其他实体类把构造函数定义为 protected,不能被外部实例化,这样保证使用 XMLDocument 进行内存的管理,避免产生内存泄漏的风险。

XMLElement    XMLElement 类是 XMLNode 中最重要的一个类,其存储方式有<foo/>和<foo></foo> 两 种 形 式 , 它 包 含 了 一 个 XMLAttribute 的 根 指 针 , 这 个 root 指 针 指 向 XMLAttribute 的第一个属性键值对。

XMLHandle        主要用来访问元素。

XMLNode     是几乎 XML 所有元素(XMLAttribute 除外)的基类,XML 本质是一种树形结构,而 整个 XML 就是由许多的节点(XMLNode)组成,在 TinyXML2 中每个 XMLNode 节点都 保存了父亲、前驱、后继、孩子头节点和孩子尾节点信息,便于查询、插入、检 索。

XMLPrinter 是 XMLVisitor 类的子类,主要实现的写 XML 的功能,其提供了两种书写方式,一 是构建 XMLDocument,二是直接 push 字段。

XMLText 主要是处理 XML 文本的类,文本信息又分为 CDATA 和普通文本。CDATA 是有专属的 开始字符"<![CDATA[",而普通的文本存储形式如">text<"。

XMLUnknown       存储形式为"<! unknown>"。

XMLVisitor 访问者模式的基类,它主要定义了访问者的接口,而在 XMLNode 的子类的 accept 方法中调用这些方法来完成对自身的访问。
 

示例代码

前提条件:在/usr/local/source_code 创建目录:tinyxml_demmo,并创建tinyXmlDemo.cpp文件,文件内容如下:


#include <iostream>
#include "tinyxml2.h"
#include <stdio.h>
#include <stdlib.h>using namespace tinyxml2;/*
enum XMLError {XML_SUCCESS = 0,XML_NO_ATTRIBUTE,XML_WRONG_ATTRIBUTE_TYPE,XML_ERROR_FILE_NOT_FOUND,XML_ERROR_FILE_COULD_NOT_BE_OPENED,XML_ERROR_FILE_READ_ERROR,XML_ERROR_PARSING_ELEMENT,XML_ERROR_PARSING_ATTRIBUTE,XML_ERROR_PARSING_TEXT,XML_ERROR_PARSING_CDATA,XML_ERROR_PARSING_COMMENT,XML_ERROR_PARSING_DECLARATION,XML_ERROR_PARSING_UNKNOWN,XML_ERROR_EMPTY_DOCUMENT,XML_ERROR_MISMATCHED_ELEMENT,XML_ERROR_PARSING,XML_CAN_NOT_CONVERT_TEXT,XML_NO_TEXT_NODE,XML_ELEMENT_DEPTH_EXCEEDED,XML_ERROR_COUNT
};
*///创建XML文件
int createXML(const char* xmlPath)
{XMLDocument doc;if (XML_ERROR_FILE_NOT_FOUND != doc.LoadFile(xmlPath)) {std::cout << "file has been existed !" << std::endl;return 0;}//添加声明 <?xml version="1.0" encoding="UTF-8" ?>XMLDeclaration *declaration = doc.NewDeclaration();doc.InsertFirstChild(declaration);XMLElement *root = doc.NewElement("Users");doc.InsertEndChild(root);XMLElement *userNode = doc.NewElement("User");//添加属性userNode->SetAttribute("Name", "milo");userNode->SetAttribute("Password", "pwd");root->InsertEndChild(userNode);return doc.SaveFile(xmlPath);
}void loadXML(const char* xmlPath) {XMLDocument doc;if (doc.LoadFile(xmlPath) != XML_SUCCESS) {std::cout << "load xlm file failed" << std::endl;return;}XMLPrinter printer;doc.Print( &printer);std::cout << printer.CStr();
}//添加性别,号码,邮箱      再添加一个用户
int addXML1(const char* xmlPath) {XMLDocument doc;if (doc.LoadFile(xmlPath) != XML_SUCCESS) {std::cout << "load xlm file failed" << std::endl;return -1;}XMLElement *root = doc.RootElement();XMLElement *userNode = root->FirstChildElement("User");XMLElement *gender = doc.NewElement("Gender");XMLText* genderText = doc.NewText("man");gender->InsertFirstChild(genderText);userNode->InsertFirstChild(gender);XMLElement *mobile = doc.NewElement("Mobile");mobile->InsertFirstChild(doc.NewText("186****3143"));userNode->InsertEndChild(mobile);XMLElement *email = doc.NewElement("Email");email->InsertFirstChild(doc.NewText("472251823@qq.com"));userNode->InsertEndChild(email);XMLElement *userNode2 = doc.NewElement("User");userNode2->SetAttribute("Name", "king");userNode2->SetAttribute("Password", "pwd2");root->InsertEndChild(userNode2);XMLElement *mobile2 = doc.NewElement("Mobile");mobile2->InsertFirstChild(doc.NewText("186****3143"));userNode2->InsertEndChild(mobile2);return doc.SaveFile(xmlPath);
}//在性别后面添加年龄,再添加一个号码
int addXML2(const char* xmlPath)
{XMLDocument doc;if (doc.LoadFile(xmlPath) != XML_SUCCESS){std::cout<<"load xml file failed"<<std::endl;return false;}XMLElement* root=doc.RootElement();XMLElement* userNode=root->FirstChildElement("User");XMLElement* gender = userNode->FirstChildElement("Gender");XMLElement* age = doc.NewElement("Age");age->InsertFirstChild(doc.NewText("18"));userNode->InsertAfterChild(gender,age);XMLElement* mobile = userNode->FirstChildElement("Mobile");mobile->SetAttribute("Location","home");XMLElement* mobile1 = doc.NewElement("Mobile");mobile1->SetAttribute("Location","company");mobile1->InsertFirstChild(doc.NewText("186****3143"));userNode->InsertAfterChild(mobile, mobile1);return doc.SaveFile(xmlPath);
}//删除第一个号码,删除第二个号码的属性
int deleteXML(const char* xmlPath) {XMLDocument doc;if (doc.LoadFile(xmlPath) != XML_SUCCESS) {std::cout << "load xlm file failed" << std::endl;return -1;}XMLElement *root = doc.RootElement();XMLElement *userNode = root->FirstChildElement("User");XMLElement *mobile = userNode->FirstChildElement("Mobile");userNode->DeleteChild(mobile);XMLElement *mobile2 = userNode->FirstChildElement("Mobile");mobile2->DeleteAttribute("Location");return doc.SaveFile(xmlPath);
}//将milo的年龄改为10000岁,将king的号码改为8888结尾
int updateXML(const char* xmlPath) {XMLDocument doc;if (doc.LoadFile(xmlPath) != XML_SUCCESS) {std::cout << "load xlm file failed" << std::endl;return -1;}XMLElement *root = doc.RootElement();XMLElement *userNode = root->FirstChildElement("User");while (userNode != NULL) {if (0 == strncmp("milo", (userNode->Attribute("Name")), 11)) {userNode->FirstChildElement("Age")->SetText("10000");userNode = userNode->NextSiblingElement();} else if (0 == strncmp("king", (userNode->Attribute("Name")), 11)) {userNode->FirstChildElement("Mobile")->SetText("186****8888");userNode = userNode->NextSiblingElement();} else {userNode = userNode->NextSiblingElement();}}return doc.SaveFile(xmlPath);
}//将milo的信息打印出来
int selectXML(const char* xmlPath)
{XMLDocument doc;if(doc.LoadFile(xmlPath)!=XML_SUCCESS){std::cout<<"load xml file failed"<<std::endl;return false;}XMLElement* root=doc.RootElement();XMLElement* userNode=root->FirstChildElement("User");while(userNode != NULL){if( 0 == strncmp("milo",(userNode->Attribute("Name")),11)){std::cout << userNode->Attribute("Name") << std::endl;std::cout << userNode->Attribute("Password") << std::endl;std::cout << userNode->FirstChildElement("Age")->GetText() << std::endl;std::cout << userNode->FirstChildElement("Gender")->GetText() << std::endl;std::cout << userNode->FirstChildElement("Mobile")->GetText() << std::endl;std::cout << userNode->FirstChildElement("Email")->GetText() << std::endl;userNode = userNode->NextSiblingElement();} else {userNode = userNode->NextSiblingElement();}}return 0;
}int main( int argc, const char ** argv )
{char xmlPath[] = "./0voice.xml";/*创建*/createXML(xmlPath);loadXML(xmlPath);printf("------------------------------\n");/*增*/addXML1(xmlPath);loadXML(xmlPath);printf("------------------------------\n");addXML2(xmlPath);loadXML(xmlPath);printf("------------------------------\n");/*删*/deleteXML(xmlPath);loadXML(xmlPath);printf("------------------------------\n");/*改*/updateXML(xmlPath);loadXML(xmlPath);printf("------------------------------\n");/*查*/selectXML(xmlPath);return 0;
}

源码编译,执行如下指令:

g++ tinyXmlDemo.cpp -o tinyXmlDemo -L/usr/local/lib/ -ltinyxml2

执行效果截图:

[root@localhost tinyxml_demmo]# g++ tinyXmlDemo.cpp -o tinyXmlDemo -L/usr/local/lib/ -ltinyxml2
[root@localhost tinyxml_demmo]# ll
总用量 120
-rw-r--r--. 1 root root    168 10月 23 15:36 parseXml.xml
-rwxr-xr-x. 1 root root 110536 10月 23 15:48 tinyXmlDemo
-rw-r--r--. 1 root root   7091 10月 23 15:47 tinyXmlDemo.cpp
[root@localhost tinyxml_demmo]# ./tinyXmlDemo
<?xml version="1.0" encoding="UTF-8"?>
<Users><User Name="milo" Password="pwd"/>
</Users>
------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<Users><User Name="milo" Password="pwd"><Gender>man</Gender><Mobile>186****3143</Mobile><Email>472251823@qq.com</Email></User><User Name="king" Password="pwd2"><Mobile>186****3143</Mobile></User>
</Users>
------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<Users><User Name="milo" Password="pwd"><Gender>man</Gender><Age>18</Age><Mobile Location="home">186****3143</Mobile><Mobile Location="company">186****3143</Mobile><Email>472251823@qq.com</Email></User><User Name="king" Password="pwd2"><Mobile>186****3143</Mobile></User>
</Users>
------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<Users><User Name="milo" Password="pwd"><Gender>man</Gender><Age>18</Age><Mobile>186****3143</Mobile><Email>472251823@qq.com</Email></User><User Name="king" Password="pwd2"><Mobile>186****3143</Mobile></User>
</Users>
------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<Users><User Name="milo" Password="pwd"><Gender>man</Gender><Age>10000</Age><Mobile>186****3143</Mobile><Email>472251823@qq.com</Email></User><User Name="king" Password="pwd2"><Mobile>186****8888</Mobile></User>
</Users>
------------------------------
milo
pwd
10000
man
186****3143
472251823@qq.com

相关文章:

CentOS 编译安装TinyXml2

安装 TinyXml2 Git 源码下载地址:https://github.com/leethomason/tinyxml2 步骤1&#xff1a;首先&#xff0c;你需要下载tinyxml2的源代码。你可以从Github或者源代码官方网站下载。并上传至/usr/local/source_code/ 步骤2&#xff1a;下载完成后&#xff0c;需要将源代码解…...

竞赛选题 深度学习人体跌倒检测 -yolo 机器视觉 opencv python

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习的人体跌倒检测算法研究与实现 ** 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f947;学长这里给一个题目综合评分(每项满…...

使用gson将复杂的树型结构转Json遇到的问题,写入文件为空

某个项目需要用到一个较为复杂的数据结构。定义成一个树型链表。 public class TreeNode { private String name; public String getName() { return name; } public void setName(String name) { this.name name; } public String getPartType() { retur…...

JavaScript异步编程:提升性能与用户体验

目录 什么是异步编程&#xff1f; 回调函数 Promise Async/Await 总结 在Web开发中&#xff0c;处理耗时操作是一项重要的任务。如果我们在执行这些操作时阻塞了主线程&#xff0c;会导致页面失去响应&#xff0c;用户体验下降。JavaScript异步编程则可以解决这个问题&…...

lossBN

still tips for learning classification and regression关于softmax的引入和作用分类问题损失函数 - MSE & Cross-entropy⭐Batch Normalization&#xff08;BN&#xff09;⭐想法&#xff1a;直接改error surface的landscape&#xff0c;把山铲平feature normalization那…...

【微信小程序】数字化会议OA系统之投票模块(附源码)

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《微信小程序开发实战》。&#x1f3af;&#x1f3a…...

clang-前端插件-给各种无花括号的“块”加花括号-基于llvm15--clang-plugin-add-brace

处理的语句 case 术语约定或备忘 case起止范围: 从冒号到下一个’case’开头, 简称有: case内 、case内容Ast: Abstract syntax tree: 抽象语法树没插入花括号的case 若case内, 以下任一条成立,则 跳过该case 即 不会对该case内容用花括号包裹. 有#define、有#include、有…...

python爬虫-某政府网站加速乐(简单版)实例小记

# -*- coding:utf-8 -*- # Time : 2023/10/23 17:06 # Author: 水兵没月 # File : 哈哈哈哈.py # Software: PyCharm ####################import random import requests# 代理 def get_proxy(proxy_typerandom.choice([1,2,3,4,5])):url "http://ZZZZZZZZZZZZZZZZZZ&qu…...

stable diffusion简介和原理

Stable Diffusion中文的意思是稳定扩散&#xff0c;本质上是基于AI的图像扩散生成模型。 Stable Diffusion是一个引人注目的深度学习模型&#xff0c;它使用潜在扩散过程来生成图像&#xff0c;允许模型在生成图像时考虑到文本的描述。这个模型的出现引起了广泛的关注和讨论&am…...

【机器学习】模型平移不变性/等变性归纳偏置Attention机制

Alphafold2具有旋转不变性吗——从图像识别到蛋白结构预测的旋转对称性实现 通过Alphafold2如何预测蛋白质结构&#xff0c;看有哪些机制或tricks可以利用&#xff1f; 一、等变Transformer 等变Transformer是Transformer众多变体的其中一种&#xff0c;其强调等变性。不变性…...

c++的4中类型转换操作符(static_cast,reinterpret_cast,dynamic_cast,const_cast),RTTI

目录 引入 介绍 static_cast 介绍 使用 reinterpret_cast 介绍 使用 const_cast 介绍 使用 dynamic_cast 介绍 使用 RTTI(运行时确定类型) 介绍 typeid运算符 dynamic_cast运算符 type_info类 引入 原本在c中,我们就已经接触到了很多类型转换 -- 隐式类型转…...

CNN实现与训练--------------以cifar10数据集为例进行演示(基于Tensorflow)

本文以cifar10数据集为例进行演示 (cifar10数据集有5万张3232像素点的彩色图片,用于训练有1万张3232像素点的彩色图片,用于测试) import tensorflow as tf import os import numpy as np from matplotlib import pyplot as plt from tensorflow.keras.layers import Conv2…...

YOLOv5算法改进(21)— 添加CA注意力机制 + 更换Neck网络之BiFPN + 更换损失函数之EIoU

前言:Hello大家好,我是小哥谈。通过上节课的学习,相信同学们一定了解了组合改进的核心。本节课开始,就让我们结合论文来对YOLOv5进行组合改进(添加CA注意力机制+更换Neck网络之BiFPN+更换损失函数之EIoU),希望同学们学完本节课可以有所启迪,并且后期可以自行进行YOLOv5…...

面对6G时代 适合通信专业的 毕业设计题目

对于通信专业的本科生来说&#xff0c;选择一个与学习内容紧密相关的毕业设计题目十分重要。 以下是东枫科技建议的题目&#xff0c;它们涵盖了通信技术的不同方面&#xff1a; 高校老师可以申请东枫科技工程师共同对学生指导&#xff0c;完成毕业设计。 基于5G/6G的通信技术…...

使用Python实现一个简单的斗地主发牌

使用Python实现一个简单的斗地主发牌 1.源代码实现2.实现效果 1.源代码实现 import random# 定义扑克牌的花色和大小 suits [♠, ♥, ♣, ♦] ranks [2, 3, 4, 5, 6, 7, 8, 9, 10, J, Q, K, A]# 初始化一副扑克牌 deck [suit rank for suit in suits for rank in ranks]# …...

Linux系统之file命令的基本使用

Linux系统之file命令的基本使用 一、file命令介绍1.1 Linux简介1.2 file命令简介 二、file命令的使用帮助2.1 file命令的help帮助信息2.2 file命令的语法解释2.3 file命令的man手册 三、文件类型介绍四、file命令的基本使用4.1 查询file版本4.2 显示文件类型4.3 输出时不显示文…...

【智能大数据分析】实验1 MapReduce实验:单词计数

【智能大数据分析】实验1 MapReduce实验&#xff1a;单词计数 文章目录 【智能大数据分析】实验1 MapReduce实验&#xff1a;单词计数一、实验目的二、实验要求三、实验原理1 MapReduce编程2 Java API解析 四、实验步骤1 启动Hadoop2 验证HDFS上没有wordcount的文件夹3 上传数据…...

KV STUDIO的安装与实践(一)

目录 什么是KV STUDIO&#xff1f; 如何安装KV STUDIO&#xff1f; 如何学习与使用KV STUDIO&#xff08;在现实中的应用&#xff09;&#xff1f; 应用一&#xff08;在现实生活中机器内部plc的读取与替换&#xff09; 读取 KV STUDIO实现显示器的检测&#xff01;&#…...

matlab simulink ADRC控制样例

1、内容简介 略 3-可以交流、咨询、答疑 2、内容说明 用adrc控制传递函数&#xff0c;保证输出达到预期 ADRC控制器、传递函数 3、仿真分析 4、参考论文 略...

我是如何走上测试管理岗的

最近有小伙伴问了一个问题&#xff1a;他所在的测试团队规模比较大&#xff0c;有 50 多个人&#xff0c;分成了 4 ~ 5 个小组。这位同学觉得自己的技术能力在团队里应该属于比较不错的&#xff0c;但疑惑的是在几次组织架构调整中&#xff0c;直属领导一直没有让他来管理一个小…...

回溯法:雀魂启动!

题目链接&#xff1a;雀魂启动&#xff01;_牛客题霸_牛客网 题解&#xff1a; 回溯法 1、用哈希思想构建映射表&#xff0c;标记已有的卡的种类和个数 2、遍历卡池&#xff0c;先从卡池中抽一张卡&#xff0c;因为只能抽一张卡&#xff0c;所以一种卡只判断一次 3、抽到卡后找…...

新的iLeakage攻击从Apple Safari窃取电子邮件和密码

图片 导语&#xff1a;学术研究人员开发出一种新的推测性侧信道攻击&#xff0c;名为iLeakage&#xff0c;可在所有最新的Apple设备上运行&#xff0c;并从Safari浏览器中提取敏感信息。 攻击概述 iLeakage是一种新型的推测性执行攻击&#xff0c;针对的是Apple Silicon CPU和…...

Java练习题2021-1

"从大于等于N的正整数里找到一个最小的数M&#xff0c;使之满足&#xff1a; M和M的逆序数&#xff08;如1230的逆序数为321&#xff09;的差的绝对值为一个[100000,200000]区间内的值。 输入说明&#xff1a;起始数字N&#xff1b; 输出说明&#xff1a;找到的第一个符合…...

微信小程序input输入字母自动转大写不生效问题解决

uniapp中开发的小程序&#xff0c;采用 style"text-transform:uppercase" H5中正常小写变大写&#xff0c;编译小程序后不生效 解决办法 uniapp中 input增加 input"TransFormationsFn" <input type"text" value"" input"…...

jmeter报Java.NET.BindException: Address already in use: connect

1、windows10和window11上&#xff1a; 修改注册表的内容&#xff1a; HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters&#xff1a; 新建dword&#xff08;值&#xff09;的类型&#xff1a; MaxUserPort 65334 TcpTimedWaitDelay 30window...

2023手工测试转自动化测试后,薪资可以达到多少?

目前手工测试工作了8个月&#xff0c;现已辞职在家学习全栈自动化测试的课程中&#xff0c;之前想着学完后工资期望7.5k&#xff0c;开发朋友说太少了 &#xff0c;想了解下这样的情况在日后找工作&#xff0c;薪资可以达到多少&#xff1f; 说到底&#xff0c;软件测试是技术…...

01 _ 为什么要学习数据结构和算法?

今天我们就来详细聊一聊&#xff0c;为什么要学习数据结构和算法。 想要通关大厂面试&#xff0c;千万别让数据结构和算法拖了后腿 很多大公司&#xff0c;比如BAT、Google、Facebook&#xff0c;面试的时候都喜欢考算法、让人现场写代码。有些人虽然技术不错&#xff0c;但每…...

C语言 每日一题 PTA 10.27 day5

1.高速公路超速处罚 按照规定&#xff0c;在高速公路上行使的机动车&#xff0c;达到或超出本车道限速的10 % 则处200元罚款&#xff1b; 若达到或超出50 % &#xff0c;就要吊销驾驶证。请编写程序根据车速和限速自动判别对该机动车的处理。 输入格式 : 输入在一行中给出2个正…...

Unity Shader当用户靠近的时候会出现吃鸡一样的光墙

效果图片 靠近墙壁 远离墙壁 材质球的设置 两张图片 使用方式 把这个脚本放到墙上&#xff0c;将player赋值给"_player"&#xff0c;然后运行&#xff0c;用户靠近就会根据距离显示光墙。 using UnityEngine;public class NewBehaviourScript : MonoBehaviour {pr…...

Xcode iOS app启用文件共享

在info.plist中添加如下两个配置 Supports opening documents in place Application supports iTunes file sharing 结果都为YES&#xff0c;如下图所示&#xff1a; 然后&#xff0c;iOS设备查看&#xff0c;文件->我的iPhone列表中有一个和你工程名相同的文件夹出现&…...