Objective-C 基础教程第七章,深入理解Xcode
Object-C 基础教程第七章,深入理解Xcode
0x00 前言
嗨!大家好啊。今天我又来学习了,现在终于把前面一些OC的基础学完了。现在我们可以来开始折腾Xcode了。
书中介绍的Xcode是4.3.2版本的,而我们这Xcode目前已经是Xcode13了,所以书上的知识应该是已经过时了,所以我决定自己找网上Xcode13的教程并且动手摸索。
0x01 创建工程界面
当我们点击创建工程后,会出现如下的界面。
其中平时我们创建工程,一般都只要创建iOS和macOS的就行了,像wathcOS和tvOS都是手表和电视机的,其他的一般也用不到。
创建工程后,会出现如下的界面,分别意思是你要填写一个属于你的Identifiler,比如我的如下所示,这个主要是和安卓一样用来区分包名的,然后你再Product Name里面写入你要创建的工程,接着在最下面可以选择你要开发的语言,比如OC或者是Swift。
0x02 主程序界面
Xcode中一共有,上、中、下、左、右的界面。我分别标记成了①②③④⑤。
①顶部 Top
顶部的这个按钮,可以将左边的的界面给隐藏起来,让你更方便的编写和看代码。
这两个按钮分别是,停止程序运行和运行程序。
Test(测试)
当我们长按三角形运行按钮的时候,会出现如下的界面,比如Test和Profile和Analuze.
运行Test会对程序界面进行一些测试,比如多次关闭,模拟点击等等(这里如有错误或者补充,欢迎评论谢谢。)
Profile(动态分析)
运行Profile的话会出现如下的界面。
这界面的工具是叫Instruments
动态分析工具,他可以根据你选择如下的模板进行一些测试,比如说是否有内存泄露,跟踪内存、CPU和文件系统。
比如当我们选择Time Profiler
时候会出现,启动耗时的跟踪程序,他会从程序启动开始将所有的函数调用都显示出来,也就是调用堆栈,并且还会显示每个函数执行的耗费时间等等。
然后这里比较有用的我觉得应该是File Activity,能监控程序的文件操作,比如我这里选择进程为微信,然后就可以看到微信操作过哪些文件的记录都显示出来了,而且还能显示出open read write等函数的调用堆栈,对逆向分析来说帮助很大。
Analyze(静态分析)
静态分析,这个是可以找出代码的错误,比如逻辑错误,声明错误等等也就是编译前可以先用Analyze看看是否有错误,这样比直接编译速度要快就能找到错误的地方。
Git
顶部还有按钮可以切换Git的分支。
Scheme
这个有点类似Vistual Studio
里面的编译设置,这里可以设置比如Build时候执行一些shell命令,比如这里我在他Build的时候弹出一个计算器。
然后再往右边就是选择构建平台。
再右边+号,可以自定义一些代码片段,并且可以搜索。
②左边 Left
左边是一个文件浏览器,可以很方便的用来浏览当前项目的所有文件和分组。
右键他的菜单如下,比较有用的功能就是可以在Finder中打开,然后可以添加新文件,然后New Group without Folder
,可以新建群组但是不创建真实的目录。
还有个Add Package,可以添加依赖包源,类似Python的pip或者是C#的 Nuget。
然后是工具栏这里,第三个图标这个可以查看方法的属性和实例变量。
然后是搜索图标,可以搜索对应的文本。
其他的就是在调试的时候,当前断点的位置等等。
③中间 Center
然后是中间界面,这个主要是用来显示代码的,其中左边红色标记位置可以用来选择文件,然后右边标记位置可以拆分代码窗口为两个等等,然后它左边还可以设置一些编辑框的属性,比如显示小地图等等,其他好像也没什么特别的了。
④底部 Bottom
底部基本都是调试输出的内容,当我们断点断到后,可以在左边看到变量的值,在右边可以看到程序的输出内容。
然后还有就是Bottom上面工具栏里面的那些小图标,其中基本都是和调试相关,可以点击图标进行步过、步入、跳出。还有3D方式显示界面和查看线程调用堆栈。
还有这个能显示详细的堆栈和变量信息,暂时不知道具体用途,好像挺强大的样子。
然后Thread这里,有方法调用之间的调用堆栈。
0x03 菜单
OK,接着我们来看最复杂的菜单,我们挨个将菜单的功能都看一遍。
Xcode菜单
Xcode菜单功能如下,About Xcode是用于显示Xcode的版本信息,然后Preferences...
比较重要里面有很多功能,接着就是Open Developer Tool
包含了Xcode开发的工具,比如模拟器
还有前面介绍过的Instruments
,Service
里面则是Instruments里面的功能,比如监听文件,监听网络。
About Xcode(关于)
Xcode Extensions(扩展)
Xcode的扩展。
Xcode Developer Tools(开发工具)
Services(服务)
Preferences(首选项)
General 常规
这里的常规设置,主要设置界面的黑暗和白色,然后Issues可以设置在源码中还是不在源码中显示等等。
Accounts (账户)
账户里面可以添加你的苹果开发者账号
然后Manage Cerificates里面可以管理你的证书,你可以添加新证书。
Behaviors (行为)
行为设置,比如有Issue的时候显示错误信息。
Navigation (导航)
这个应该是属于代码上的一些辅助提示设置。
比如当我按住Command/Windows
按键,然后点击函数的时候,就会显示这个提示框,你可以选择对应功能:跳转到定义、显示帮助信息、谁调用这函数的等等。
然后按住Alt/Option
按键,在点击方法的时候,就会显示此方法的文档信息。
Themes (主题)
这是Xcode的主题,内置的主题好像都不怎么好看,我推荐用这个主题,大家可以自行上网下载。
Text Editing (文本编辑)
Line numbers可以设置是否显示行号。
Key Bindings (热键)
这里的快捷键不一一试了,大家可以将常用的一些功能都看看如何用快捷键打开的,这样熟练之后就可以快速的就行Xcode开发。
Compoents
这个可以管理,当前下载或者需要用到的模拟器镜像。
Locations
可以用来设置当前编译构建的Xcode版本
File菜单
File菜单主要的功能是文件相关的功能,比如添加新文件,添加新的Packages,或者是关闭工程等等。
Editor菜单
Editor菜单是和编辑相关的,可以复制和粘贴、排序、格式化代码。
View菜单
View菜单是用来显示和隐藏某些窗口的
Find菜单
用来全局或者局部寻找代码,并且也可以进行替换。
Navigate 菜单
Navigate是个导航菜单,这里的大部分功能其实用快捷键或者是工具栏图标都能实现的功能, 当然你如果忘记了就可以打开这个Navigate导航菜单看看。
Editor菜单
这个菜单是用来设置Editor文本相关的内容的,比如有语法高亮,还有你可以设置自己喜欢的字体大小,还有主题也是可以在这里进行设置的,还有小地图。
Product菜单
Xcode里面比较重要的应该就是这个菜单了,掌握了这里面的快捷键,那么编译和生成就不用再麻烦的去点按钮了。
首先我们从最上面的开始分析,Run
这个没有什么好说的就是直接让程序运行快捷键是Command+R
,Analyze
静态分析用的快捷键是Shift+Command+B
,这里需要注意的是这个Archive
,这是用来分发生成APP的,如果是iOS的话他可以导出ipa,或者上传到AppStore进行提交审核。(iOS的话前提你需要有真机)
Debug菜单
Debug菜单主要是用途调试的时候进行的一些操作,比如暂停、步过、步入、跳出函数。
F7单步步入
F6单步步过
显示汇编代码
ok后面的有些菜单就不介绍了,一个git和一个Windows的菜单,大家有兴趣自己去看看,对我来说帮助不是很大那两个菜单,因为平时不怎么用到。
0x04 项目属性
除了菜单和界面外,Xcode还有个特别重要也是比较复杂的就是项目属性,用来配置你这项目里面的各种属性,依赖库啊,签名证书啊,编译版本啊等等。
这里需要注意,你可以点击这个小图标,然后就能展开当前项目的所有工程,因为有些项目可能需要多个工程,比如经常就会遇到有些项目里面有很多库的工程,然后编译时候报错,又不知道该在哪里设置,你展开这个就能看见了。
General (常规设置)
Identify (身份信息)
Identify里面主要就是用来填写你程序的包名,版本号等信息,用Bundle Identifier
来区分不同的app。
Deployment Info (部署信息)
部署信息,主要是用来填写你这app运行在哪个iOS或者macOS版本上,比如你填写iOS13,那么在iOS12系统上就无法运行。
App Icons (图标)
用于设置App的图标,点击红色按钮后跳到如下第二图的地方。
在这里你需要导入不同尺寸的icon,用于在不同设备上显示。
其中有个很方便的方案可以快速解决不同尺寸的icon,用到软件是Prepo
,然后再去阿里icon网站里面找你喜欢的图标,比如我喜欢牛油果图标。
找到牛油果图标
下载好拖入APP中,然后点击Export
一键导出所有图标。
接着将icon拖入到对应中的框中。
打包成功后,发现图标确实是换了。
Frameworks,Libraries,and Embedded Content
这里主要是项目中用到的框架Frameworks
、库Libraries
,都是在这里进行添加的。
可以看到苹果自带的就有很多库了。
Development Assets
这个是你开发中需要用到的一些资源文件,可以进行添加到这里面。
Signing & Capabilities (签名和权限)
该项主要是用于签名证书的一些设置,还有沙箱里面的权限设置,需要注意他可以单独对Debug
和Release
进行设置。
Resource Tags
APP中需要用到的资源Assets添加到这。
Info (App清单)
包名清单设置在这边设置。
Build Settings (Xcode环境变量)
这一项非常重要,类似Xcode的环境变量,可以根据此环境变量的设置使编译进行更加灵活。
因为我也是刚学,对Build Settings
也没有大量使用的经验,所以等后期学到用到了再进行更新。
Build settings是对编译工作的细节进行设定,在这个窗口里可以看见大量的设置选项,从编译到打包再到代码签名都有,这里要注意 settings 的 section 分类,同时一般通过右侧的 inspector 就可以很好的理解选项的意义了。
暂时可以参考:
https://blog.csdn.net/fanyun_01/article/details/118279039
https://blog.csdn.net/fishmai/article/details/50388831
http://www.noobyard.com/article/p-xkhusrok-bq.html
Build Phases
Build phases主要是用来控制从源文件到可执行文件的整个过程的,所以应该说是面向源文件的,包括编译哪些文件,以及在编译过程中执行一些自定义的脚本什么的
Build Rules
Build rules 主要是用来控制如何编译某种类型的源文件的,假如说相对某种类型的原文件进行特定的编译,那么就应该在这里进行编辑了。同时这里也会大量的运用一些 xcode 中的环境变量,完整的官方文档在这里:Build Settings Reference
菜鸡PWN小分队
最后大家如果对逆向、PWN、CTF 比较感兴趣的可以加群一起讨论。
Objective-C 基础教程第七章,深入理解Xcode的更多相关文章
- 2017.2.12 开涛shiro教程-第七章-与Web集成
2017.2.9 开涛shiro教程-第七章-与Web集成(一) 原博客地址:http://jinnianshilongnian.iteye.com/blog/2018398 根据下载的pdf学习. ...
- Objective-C 基础教程第三章,面向对象编程基础知
目录 Objective-C 基础教程第三章,面向对象编程基础知 0x00 前言 0x01 间接(indirection) 0x02 面向对象编程中使用间接 面向过程编程 面向对象编程 0x03 OC ...
- Objective-C 基础教程第五章,复合
目录 Objective-C 基础教程第五章,复合 什么是复合? Car程序 自定义NSLog() 存取方法get Set Tires(轮胎) 存取方法 Car类代码的其他变化 扩展Car程序 复合还 ...
- Objective-C 基础教程第六章,源文件组织
目录 Object-C 基础教程第六章,源文件组织 0x00:前言 0x01:Xcode创建OC类 0x02:Xcode群组 0x03 Xcode跨文件依赖关系 @class关键字 导入和继承 小结 ...
- Java语言程序设计(基础篇) 第七章 一维数组
第七章 一维数组 7.2 数组的基础知识 1.一旦数组被创建,它的大小是固定的.使用一个数组引用变量,通过下标来访问数组中的元素. 2.数组是用来存储数据的集合,但是,通常我们会发现把数组看作一个存储 ...
- Python机器学习基础教程-第2章-监督学习之决策树
前言 本系列教程基本就是摘抄<Python机器学习基础教程>中的例子内容. 为了便于跟踪和学习,本系列教程在Github上提供了jupyter notebook 版本: Github仓库: ...
- Python机器学习基础教程-第2章-监督学习之线性模型
前言 本系列教程基本就是摘抄<Python机器学习基础教程>中的例子内容. 为了便于跟踪和学习,本系列教程在Github上提供了jupyter notebook 版本: Github仓库: ...
- Python机器学习基础教程-第2章-监督学习之K近邻
前言 本系列教程基本就是摘抄<Python机器学习基础教程>中的例子内容. 为了便于跟踪和学习,本系列教程在Github上提供了jupyter notebook 版本: Github仓库: ...
- Python机器学习基础教程-第1章-鸢尾花的例子KNN
前言 本系列教程基本就是摘抄<Python机器学习基础教程>中的例子内容. 为了便于跟踪和学习,本系列教程在Github上提供了jupyter notebook 版本: Github仓库: ...
随机推荐
- A*算法及其matlab实现
教程 基本理论教程 A*算法程序 最简单的A*算法
- Python编程知识
继承->重写 class A(object): def __init__(self): print("super(B,self).__init__():运行A:init") ...
- 通过Dapr实现一个简单的基于.net的微服务电商系统(十八)——服务保护之多级缓存
很久没有更新dapr系列了.今天带来的是一个小的组件集成,通过多级缓存框架来实现对服务的缓存保护,依旧是一个简易的演示以及对其设计原理思路的讲解,欢迎大家转发留言和star 目录:一.通过Dapr实现 ...
- Redis——入门学习笔记
Redis学习 说到前面:这篇笔记只是我作为一个Redis新手,从0到认知的一个过程.后续会持续深入学习. 学习初衷和计划 学习Redis,因为这是热门技术,必须掌握的技术,别人都会我不会.就这一点就 ...
- Spring的AOP的底层实现原理?
aop是ioc的一个扩展功能,先有的ioc,再有的aop,只是在ioc的整个流程中新增的一个扩展点而已:BeanPostProcessor 底层实现用的是动态代理 AOP应用场景 场景一: 记录日志 ...
- 自助BI工具:Tableau和Smartbi的对比(下)
上一篇我们已经将Tableau和Smartbi的自助功能分析了一部分,本文已3个重要的因素进行对比.分别从数据处理.数据可视化以及性价比方面进行分析.我们一起来看看这两个平台是各方面怎么样,帮助大家挑 ...
- Iterator迭代
今天在牛客网练题的时候,出现了Iterator的题,实在想不起来这是什么,于是去查阅了相关资料,顺便自己去IDEA试了一下.总结了一些相关知识如下: 什么是Iterator? 我们来看看菜鸟教程里的解 ...
- Dell服务器通过IDRAC9收集TSR日志排查故障
登陆IDRAC9 WEB管理界面,在菜单栏< 维护>下选择 在联网的情况下推荐完成SupportAssist的注册,根据提示安装ISM并进行信息登记.如暂不注册,则点击取消继续. 进入S ...
- maven配置本地仓库和远程仓库
配置本地仓库 修改maven安装目录下conf/settings.xml,也可以在idea配置中覆盖 <localRepository>E:\maven\MavenRepository&l ...
- [HITCON 2017]SSRFme
explode() 字符串转数组,用 ,号分隔数组 @mkdir() 创建目录 @chdir() 改变目录 这两的效果一样,如果在/home/php 目录下,执行mkdir('var') 和 ...