ReactNative进阶(四十九)project

PRODUCT_BUNDLE_IDENTIFIER = com.shq5785.com;
PRODUCT_NAME = shq5785;
PROVISIONING_PROFILE_SPECIFIER = “ppFile”;


### 二、project.pbxproj 文件解析


`project.pbxproj` 文件包含于 `Xcode` 工程文件 `*.xcodeproj` 之中,存储着 `Xcode` 工程的各项配置参数。它本质上是一种旧风格的 Property List 文件,历史可追溯到 NeXT 的 OpenStep。其可读性不如 `xml` 和 `json`,苹果却一直沿用至今,作为一家以创新闻名的公司可能这里剩下的就是情怀吧。


`project.pbxproj` 使用 `UUID` 作为交叉引用的索引,保证每个配置信息对象的唯一性。因为 **`UUID` 根据机器硬件和时间戳生成**,避免了多人在同一时间段操作修改工程文件带来的问题。也就是说工程中每项配置对象都有个唯一的 `UUID`,然后其他配置对象想引用某个配置对象直接使用它的 `UUID` 即可。这就跟我们编程时使用指针指向某个对象的地址一样,其他对象的属性想引用它,只需要给属性传个指针地址就行了。


可以把整个文件的内容想象成一个字典,字典中的 `Key` 按照字典序来排列。字典的第一层级总共有 5 个键值对,`Key` 分别为:`archiveVersion`,`classes`,`objectVersion`,`objects` 和 `rootObject`。其中重要的 `Key` 是 `objects` 和 `rootObject`。


![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/e36f11d753fb4a7dbbc4d5d05c2e1a32.png)


所有的配置对象都放在 `objects` 对应的 `Value` 中,包括根对象(`rootObject`)。 `objects` 对应的 `Value` 也是一个字典,Key 都为 `UUID`,Value 依然是个字典。可以将 `rootObject` 的值(是一个 `UUID`)作为 `Key` 在 `objects` 对应的字典中找到根对象。这个根对象的 `isa` 属性为 `PBXProject`(`isa = PBXProject`)。读懂 `project.pbxproj` 的最好方式就是顺着 `rootObject` 的各个属性对应的 `UUID` 在 `objects` 中找到对应的对象,然后一层层看下去。这样整个文件的配置信息存放方式就慢慢摸清了。


`objects` 的键值对根据内容类型被分成了若干个 `section`,虽然 `section` 的顺序是 `Xcode` 私有 API 钦定的,但每个 `section` 内部的键值对会根据 Key 的字典序排列。采用注释的方式分节也使得可读性更强。`section` 的数量跟工程有关,尤其是每个工程的 `BuildPhase` 和 `Target` 差别都很大。


每个 `section` 中的对象类型都是相同的,对象的类型是靠 `isa` 的值区分的。对象内部的属性类型以及含义可以参照这篇文章提供的对照表: [Xcode Project File Format]( )


每个对象内部的属性(也是键值对)会把 `isa` 排在最前面,其余的按照字典序排列。


数组内部的顺序完全按照元素内容的字典序排列。


大概分为以下几类信息:


* 工程中的文件关联信息、资源关联信息


	+ `PBXBuildFile` 参与编译的文件;
	+ `PBXFileReference` 工程中的所有文件信息;
* 文件的组织结构信息


	+ `PBXGroup` 工程中的文件夹;
* 工程的编译配置、证书配置信息


	+ `PBXResourcesBuildPhase` 编译阶段的资源配置;
	+ `PBXFrameworksBuildPhase` 编译阶段的`framework`配置;
	+ `PBXProject` 工程信息;
	+ `PBXNativeTarget` 工程中所有target的信息;
	+ `XCConfigurationList` 每个`target`下包含的编译模式,如Debug 、 Release等模式;
	+ `XCBuildConfiguration` 具体的编译信息,如Release模式下的编译配置;


文件间的关系大致如下图所示:


![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/21b1d498c6d64a1db837429f3f7316c2.png)


每一项资源在这个文件中都有一个值作为唯一标识,如903C829A2075C24300EB9AD0。可以看做是id。


一般每个ID值后面都会有一个注释来进行说明这个ID对应的具体内容。如`903C829C2075C24300EB9AD0 /* TLauncher */,`表示这个ID是代表的是`TLauncher`这个target。


相同类型的资源是按段进行整理的。


每一段内容前用`/* Begin xxx section */`注释作为开始。用`/* End xxx section */` 作为这一段内容的结束。


每一项内容中用`isa = xxx` 指示该资源所属于的类型。


其中,`PBXFrameworksBuildPhase` 、`PBXResourcesBuildPhase`、`PBXShellScriptBuildPhase`、`PBXTargetDependency`、`PBXSourcesBuildPhase`这几项内容都是对工程在编译阶段的配置。


对应于工程中如下配置内容:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/cc6b11d838714f719ccddbea7af728c1.png)


下面是 `objects` 中 `PBXNativeTarget section` 的一个对象,感受一下格式:



/* Begin PBXNativeTarget section */
00E356ED1AD99517003FC87E /* shq5785Tests */ = {
isa = PBXNativeTarget;
buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget “mrcsTests” */;
buildPhases = (
E813BE00D49641555FA7986E /* [CP] Check Pods Manifest.lock */,
00E356EA1AD99517003FC87E /* Sources */,
00E356EB1AD99517003FC87E /* Frameworks */,
00E356EC1AD99517003FC87E /* Resources */,
);
buildRules = (
);
dependencies = (
00E356F51AD99517003FC87E /* PBXTargetDependency */,
);
name = shq5785Tests;
productName = shq5785Tests;
productReference = 00E356EE1AD99517003FC87E /* shq5785Tests.xctest */;
productType = “com.apple.product-type.bundle.unit-test”;
};
13B07F861A680F5B00A75B9A /* shq5785 */ = {
isa = PBXNativeTarget;
buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget “shq5785” */;
buildPhases = (
C8F5F5993094D81A94013E0D /* [CP] Check Pods Manifest.lock */,
FD10A7F022414F080027D42C /* Start Packager */,
13B07F871A680F5B00A75B9A /* Sources */,
13B07F8C1A680F5B00A75B9A /* Frameworks */,
13B07F8E1A680F5B00A75B9A /* Resources */,
00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */,
605CC81222DD68EB009545B7 /* Embed Frameworks */,
3A54938F9F6AAF435223E489 /* [CP] Copy Pods Resources */,
);
buildRules = (
);
dependencies = (
);
name = mrcs;
productName = mrcs;
productReference = 13B07F961A680F5B00A75B9A /* shq5785.app */;
productType = “com.apple.product-type.application”;
};
2D02E47A1E0B4A5D006451C7 /* shq5785-tvOS */ = {
isa = PBXNativeTarget;
buildConfigurationList = 2D02E4BA1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget “shq5785-tvOS” */;
buildPhases = (
A6B45AA48E3A2F14663044B6 /* [CP] Check Pods Manifest.lock */,
FD10A7F122414F3F0027D42C /* Start Packager */,
2D02E4771E0B4A5D006451C7 /* Sources */,
2D02E4781E0B4A5D006451C7 /* Frameworks */,
2D02E4791E0B4A5D006451C7 /* Resources */,
2D02E4CB1E0B4B27006451C7 /* Bundle React Native Code And Images */,
);
buildRules = (
);
dependencies = (
);
name = “shq5785-tvOS”;
productName = “shq5785-tvOS”;
productReference = 2D02E47B1E0B4A5D006451C7 /* shq5785-tvOS.app */;
productType = “com.apple.product-type.application”;
};
2D02E48F1E0B4A5D006451C7 /* shq5785-tvOSTests */ = {
isa = PBXNativeTarget;
buildConfigurationList = 2D02E4BB1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget “shq5785-tvOSTests” */;
buildPhases = (
D14E060D8F1725B6C5A79756 /* [CP] Check Pods Manifest.lock */,
2D02E48C1E0B4A5D006451C7 /* Sources */,
2D02E48D1E0B4A5D006451C7 /* Frameworks */,
2D02E48E1E0B4A5D006451C7 /* Resources */,
);
buildRules = (
);
dependencies = (
2D02E4921E0B4A5D006451C7 /* PBXTargetDependency */,
);
name = “shq5785-tvOSTests”;
productName = “shq5785-tvOSTests”;
productReference = 2D02E4901E0B4A5D006451C7 /* shq5785-tvOSTests.xctest */;
productType = “com.apple.product-type.bundle.unit-test”;
};
/* End PBXNativeTarget section */


可以根据 `00E357021AD99517003FC87E` 找到对应的 `buildConfigurationList` 对象的内容,所以说 `project.pbxproj` 使用 `UUID` 作为交叉引用的索引。通过这种关系,可以递归构建一张有向图,每个对象都是一个节点。




### ajax
1)ajax请求的原理/ 手写一个ajax请求?
2)readyState?
3)ajax异步与同步的区别?
4)ajax传递中文用什么方法?

![ajax.PNG](https://img-blog.csdnimg.cn/img_convert/00b95425c0c86aaa98db1e7ab1c34e04.webp?x-oss-process=image/format,png)

![前12.PNG](https://img-blog.csdnimg.cn/img_convert/9e00eb5be14e778487287efd645fa93b.webp?x-oss-process=image/format,png)

都是一个节点。




### ajax
1)ajax请求的原理/ 手写一个ajax请求?
2)readyState?
3)ajax异步与同步的区别?
4)ajax传递中文用什么方法?

[外链图片转存中...(img-jz5Pg8OM-1725918208336)]

[外链图片转存中...(img-4EdRwg7W-1725918208338)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值