iOS 语言基础初探 Xcode 工具

news2024/11/17 0:26:54

前言:

作为 iOS 开发的主要应用工具之一,Xcode 已经越来越被业内认可,本章节将针对此官方开发工具,为同学解读 Xcode 的基本情况,认识 Xcode 的工程体系,带领大家进入 iOS 开发第一步。

🎶文章目录:

        Xcode 工具简介

        Xcode 具体使用

        Xcode 工程体系


Xcode 工具简介

首先我会介绍主要的开发工具 Xcode 以及它的工程体系。接着是介绍 objective c 语言,还有它的基本语法。第三章我会介绍 objective c 语言和它一些比较特别的语言特性。最后我们会有一个 Xcode +objective c 的实战来编写一个解析 Jason 的命令行程序,我们就直接进入第一章。Xcode 是苹果公司推出的一款开发工具,它在第一个版本就已经在 03 年的时候, 2003 年的时候就已经推出了。结束目前最新的版本是 14. 0。它集合了编译、测试、Git,甚至它能直接将你的 app 提交到 app store 去做审核。你也可以将你的 app 运行在iPad、 iPhone 等等一系列的模拟器,你也能透过自己的真机设备去调试你的app。

当然,除了开发 iOS app 之外,你还能用它来开发像是 Mac OS、 watch OS 的app。你可以从苹果的网站或是 Mac 自带的 app store 下载到Xcode。不过两个方式都需要先有一组 Appid apple ID 才能去下载。还没有 apple 账号的同学可以先在 apple 的官网去注册一个,或是在其他网站上也有一些直接下载链接。可以使用越高的 Xcode 版本,它支持开发越新的 iOS 版本,所以每当苹果有新的 iOS 发布时,Xcode 也会跟着一起去更新。

Xcode 具体使用

将 Xcode 下载下来后,你第一次打开,它会提示你需要去安装一个命令行工具,你点击确定就可以。在你使用 Xcode 开始编写任何的程序时,你会需要先创建一个 Xcode 工程,之后就往里面添加你的 APP 代码文件。这样子还有资源文件,例如图片和视频等等的文件。你可以通过 Xcode 调整你的工程的一些基础编译配置,打包设置等等。

如果你还没有任何项目,你可以在 Xcode 欢迎页上就左边这张图,在它的欢迎页上创建一个project。你也可以在 Xcode 顶部导航栏向右边这张图,通过 file new 选择创建 what project, what space 或是target。

Xcode 工程体系

这里我简单介绍一下 Xcode工程的整体架构以及它的层级关系。首先是workspace。 workspace 是 Xcode 提供的一个工作空间,它一个 workspace 可以包含多个project,可以通过多个 project 分工组合成一个庞大且复杂的工程。但我们一般在使用上,我们不会去添加过多的project,而是将代码拆散在不同的工程做一个单独的开发之后才去做集成。我们看看project。 project 是一个工程的核心,你可以通过它来管理源代码、资源文件,添加其他三方库等等。一个project,它可以包含多个target,而 target 可以看作是一个特定的构建目标。你可以是构建一个 app 主体为目标,也可以构建命令行工具,你也可以构建代码二进式库等等。它其实是一个构建目标,等一下也会讲到 target 是什么东西。接下来是product。每个 target 都可以从它隶属的 project 中圈出一批源代码文件或是资源文件。基于该 target 配置的一些 build configuration、 build face 等等执行构建,你就能得到 target 对应的一个产物product,也就是运行的最终结果。

我们可以看一下图片上,图片上在在这个位置有一个抖音 APP 的target,它其实对应的就是一个抖音 app product,可以理解它是最终的一个安装包。对target,它其实就会圈出一些文件,假如我要编译哪些文件在我 target 里,我透过编译这些文件,加上这些资源文件,我就能得到抖音产物。

当我们创建好 project 之后,我们就会来到实际的 project 的里面。在 Xcode 界面上,左边的蓝色符号就是project,点击它,我们就能看到 project 的一些默认的构建配置,以及 project 包含的target。位于 project 下方,是 project 所引用的所有文件。在这边包含代码文件和资源文件以及引用的库。你个别点开,就能个别去编辑。

可以看到我 project 有两个target,在创建时 Xcode默认的,也帮我分成了两个文件夹。在面板的最右边可以看到 project 文件所在的一个路径workspace。它并不是开发一个项目必须要创建的。 workspace 目的主要是为了避免过于臃肿的 project 出现。开发者可以将代码分到不同的 project 不同的 target 里面。在同个 workspace 下的 target 之间可以去做一个显示的依赖。这样一来,某个 target 你就能调用到其他 target 编写的函数或是对象,做到代码的一个分工和解耦。创立 workspace 之后,我们仍然能单独地打开其中的任意一个project。

我们来讲这个 project 它到底是一个什么project?

它是一个大型目录,它既包含了各种文件资源以及构建信息,也包含了一个或多个的target。 project 本质其实就是单一 一个后缀名为 p b x p r o j 的一个文件。文件的内容使用的是一个 all style 的 ask list 的格式,它去记录了各种信息。这里面记录了信息包含以下内容:例如有对于文件的引用,例如我对源代码 .m .h .cc .Swift 等等的文件的引用。或者是资源文件的引用,例如图片以及视频。还有一些像是 framework library 这种二进制库的一些引用,也会记录在文件里面。

Target是什么?

一个target,它详细定义了 project 中的一批文件到构建出一个 product 的整个过程。它定义了构建系统的所有输入和文件的处理配置。而构建系统的输出 product 处理配置指的则是 target 中的 build settings 和 build face。其中 target 可以设置依赖关系,如果 主APP 的 target 可以去依赖其他组件,像是 UI 组件的一个target。这样子编译器会帮我在编译时去确保被依赖方,它会优先执行于依赖方。相信大家还是不太明白,那学长用一张图来概括一下:

有了这样的一个概念之后,我们就可以来创建 targets 了。当你第一次创建 project 的时候,Xcode 就会要求你选择你 project 里面第一个target,因为你 project 如果里面没有target,其实没有任何意义。所以作为 project 的第一个target,你在创建之后,你还是可以持续去添加对 project 添加不同的target,其中我们最常用的肯定就是 app target 了,而它对应的编译产物就是 iOS IPA 安装包里面的 .app 文件。其它常用的还有像是 framework 以及 static library,这两个 target 对应的 product 分别是 .framework 动态库以及.a 静态库等等。开发者可以使用这两个target将代码编译成一个 SDK 去提供给其他的开发者去依赖或去使用。

另外还有像是其他target,像是类似某某输入法,可能大家用到我就不提了。 某某输入法它其实用的就是 custom keeper extension 去实现的。因为它本身不是一个APP实例如果你想让你的 APP 的消息可以展示在通知中心的,其实是 notification extension 去做到的,以及你可以去实现 imessage 里面你有内嵌的一些应用,类似表情包,类似一些小游戏。你可以使用 imessage extension。

建好之后,你可以在 project 信息中找到对应的一个target,你看像我左边有块,你这样我现在创建有两个target。我点击单个 target 之后,我就能查看到我们刚刚所说的 build settings 跟 buildfaces。在这边对,点击 build faces,你就能看到我这个 app target 里面包含了 4 个代码文件对,以及三个自用文件。其实这些文件最后会被编译进去我 app 里面的文件。其实这就是一个 app target 以及它包含的代码文件有哪些。

至此,我们对Xcode 的一个项目工程,也是你可以有一个初步的了解,对于 workspace project target 以及 product 名这些名词定义也比较清楚了。接下来我们就可以进入到代码语言的环节了。透过编写代码文件,我们去完善整个工程的一个input,使我们能构建出一个功能更完备的程序。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SAP入门技术分享四:模块化程序

模块化程序1.子程序概要2.子程序定义3.子程序参数(1)传递参数的方法(2)定义参数类型(3)参数与结构体(4)参数与内表4.调用子程序(1)调用程序内部子程序&#x…

vue npm link关联本地组件库

什么是 npm link 就是把你在本地开发好的文件做一个映射和链接,当你在 本地开发一个a项目,你的本地b项目想使用a项目下的组件 这时候就是需要进行npm link链接起来 a项目的运行效果 b项目的运行效果: 想要实现的效果:(在b项目上…

Oracle SQL Developer使用dbms_output.put_line显示输出

dbms输出 点击DBMS输出左侧的号,选择需要输出的数据库,点击确定 与步骤2选择相同数据库,右击数据库,选择打开SQL工作表(T) 在工作表中执行语句 declare --定义,相当于声明属性。t_a varchar2(20);--声明自定义属…

怎么写一篇计算机SCI论文初稿? - 易智编译EaseEditing

一、SCI论文的要求 SCI论文的核心是创新性。对于这个方面来说主要就是针对于论文的观点正确,文字通畅,逻辑严密,结构合理,结论有创新等等。 二、SCI论文格式规范 每一个SCI期刊都有自己特定的宗旨、栏目和专业定位,投…

TCP通信机制:三次握手、四次挥手、滑动窗口

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起探讨和分享Linux C/C/Python/Shell编程、机器人技术、机器学习、机器视觉、嵌入式AI相关领域的知识和技术。 TCP通信机制1. TCP三次握手2. TCP四次挥手3. TCP连接与数据传输过程4. TCP滑动窗口机制5. server服务端…

这套设备管理方案助你效率10倍提升

车间工厂等货物人员密集场所,对消防安全的要求很高。消防设备管理自然是生产制造型企业的核心之一。消防设施的有效管理,既要保证日常巡检工作的有效性,又要在设备出现故障后及时响应。在此基础上还要对整体管理情况进行数据分析,…

振弦采集模块的各种参数操作

振弦采集模块的各种参数操作 固件版本读取 点击指令区【 读取版本】 按钮,读取当前连接模块的固件版本信息,读取到的版本信息显示于按钮右侧。 VMTool 会根据读取到的版本不同对功能和界面做出调整,故此, 在使用 VMTool 时&#…

Workfine新手入门:给图片加水印

哈喽,我是办公助手小W,又到了跟大家分享办公小技巧的时候啦! 最近Workfine5.0最新版本上线后,一直有人问到底有啥新功能啊?与往期版本有何不同呢?小W亲自去体验了一番,最大的一个亮点就是新增了…

90、【树与二叉树】leetcode ——104. 二叉树的最大深度:层次遍历+DFS+子问题分解(C++版本)

解题思路 原题链接:104. 二叉树的最大深度 解题思路 1、迭代法:层次遍历BFS /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), rig…

Blender 物理属性 (二)布料和碰撞

文章目录添加与去除布料查看布料效果布料的预设属性(模拟不同的布料效果)布料与其他物体碰撞布料的自交叉问题布料钉固制作一个窗帘添加与去除布料 1 添加:物体模式选中一个物体,属性栏/物理属性(蓝色圆圈),选择布料 …

程序员转项目经理,需要拒绝的3大习惯。

程序员转项目经理并不容易,需要我们转变思路,并拒绝我们日常3大习惯。 1、拒绝单打独干,转而关注与干系人的沟通协调。 做为技术人员,在确定自我任务后,独自敲代码就好,具有较强的单干性质。而作为项目经理…

前端项目代码统一规范-从eslint、stylelint、husky、lint-staged、commitlint和配合vscode插件一一道来

目前在多人项目开发时发现很多代码不规范的地方,因为每个项目都是多人维护,再加上各种历史代码的不同风格,这些情况很容易就造成了代码规范落地难,项目中出现大量低质量代码,代码格式难统一。所以采用 eslinthuskystyl…

【Vue】移动端项目流程

移动端项目 O 项目技术栈说明 脚手架: Vite 3 还有 vue-cli - 底层 webpack 脚本:typescript路由:vue-router4状态管理器: vuex4 还有 pinia 组件库:vant3.6.3组件API:选项式API 一、Vite 脚手架的使用 …

PostgreSQL复习记录(一):Win10成功安装postgresql14.6的过程记录

到官网下载页面选择合适的版本进行下载,我这里选择Windows版本,跳转到Download PostgreSQL后选择PostgreSQL Version 14.1 Windows x86-64的版本。 1,启动安装程序: 如果只是练习使用,安装时这里可以取消勾选Stack Bu…

戴尔电脑开机屏幕花屏无法启动解决方法

戴尔电脑开机屏幕花屏无法启动解决方法。有用户使用的戴尔电脑开机的时候出现了一些问题,电脑屏幕变成了满屏的马赛克花屏,不能正常启动到桌面页面上了。那么这个问题要如何去做出解决,一起看看操作的方法吧。 准备工作: 1、U盘一…

初步认识 Babel

Babel 官网:https://www.babeljs.cn/docs/1.AST 抽象语法树AST 抽象语法树,是 Babel 的核心在 JavaScript 的世界中,你可以认为抽象语法树(AST)是最底层下面会通过拆解一个普通函数,解释下什么是 AST 抽象语…

node服务从http升级到https(阿里云免费ssl)

升级原因1.各大搜索引擎中,https的网页的权重比一般的http的网页权重要高。2.从用户体验的角度,一个老是被浏览器提醒该网页不可信的网页,总不会让用户感到安心所以将网站从http升级为https是很有必要的用户配置首先介绍一下这次升级的网站使…

拓扑排序 (算法思想+图解+模板+练习题)

拓扑排序 有向无环图一定是拓扑序列,有向有环图一定不是拓扑序列。 无向图没有拓扑序列。 首先我们先来解释一下什么是有向无环图: 有向就是我们两个结点之间的边是有方向的,无环的意思就是整个序列中没有几个结点通过边形成一个圆环。 下图就是一个…

数据分析:通俗易懂假设检验

导读 大多数关于假设检验的教程都是从先验分布假设开始,列出一些定义和公式,然后直接应用它们来解决问题。然而,在本教程[1]中,我们将从第一原则中学习。这将是一个示例驱动的教程,我们从一个基本示例开始,…

Web(五、六)

JavascriptDOM* 功能:控制html文档的内容* 获取页面标签(元素)对象:Element* document.getElementById("id值"):通过元素的id获取元素对象* 操作Element对象:1. 修改属性值:明确获取的对象是哪一个?查看API文…