搭建iOS开发环境

2023-10-26

1.准备

当前移动开发主要分为安卓开发和iOS开发,安卓是谷歌在2007年宣布开源的移动操作系统,iOS是苹果2007年发布的。两个系统出现的时间大致相同,在随后的十年间引领了移动开发浪潮。如今各种移动开发技术层出不穷,一些跨平台的技术也相继出现,比如React Native,Flutter等,但目前仍然没有取代Native开发的地位,在一些核心页面依然采用的Native方式开发,所以Native开发依然是必备的技能。如果想入门移动开发,安卓和iOS两者都是不错的选择,本篇文章介绍iOS开发的搭建。iOS开发最方便的是在macOS上开发,所以需要准备一台macOS电脑。

2.下载XCode

打开macOS电脑上App Store,搜索Xcode,下载,这个过程会比较长,耐心等待几天,不。。。等待几个小时。

下载完成后打开,可能会出现以下弹框,点击install.

image-20210404112331083

3.建立工程

打开Xcode,点击File-New-Project,然后点击iOS下面的App选项

image-20210404115000921

然后,在输入框中填入工程名称就可以了,Organization Identifier可以随便填写个,Interface保持默认的StoryBoard,Life Cycle保持默认的UIKit App Delegate,language根据需要选择,如果你熟悉Swift,可以选择Swift作为开发语言,这里我们选择Objective-C作为开发语言。

image-20210404115337053

4.工程目录

在写代码之前,我们先看看工程的目录结构

iOSProject工程目录下面,有AppDelegate,SceneDelegate,ViewController类。AppDelegate用来初始化根视图,SceneDelegate主要用来开发分屏设备,比如ipad,如果你仅仅开发iOS应用,不想做ipad适配,直接删除这个类就可以了,待会我们也会删除它。ViewController是控制器,它将是我们app的第一个页面,它包含了我们构建的UI和交互。Main.Storyboard可以作为首页使用,我们暂时不打算使用它,LaunchScreen.storyboard是启动开屏页面,作为入门开发,先不使用这个文件。Assets.xcassets用来存放app需要的各种图片资源。

5.代码编写

删除SceneDelegate.h和.m文件,需要点击Move to Trash选项

image-20210404122808833

打开info.plist文件,删除Application Scene Manifest,因为本篇入门介绍不涉及适配iPad分屏等场景,所以不需要这个配置。

image-20210404124016437

打开AppDelegate.h,加入window属性

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property(nonatomic, strong) UIWindow *window;

@end

打开AppDelegate.m,删除AppDelegate.m中两个方法,configurationForConnectingSceneSession和didDiscardSceneSessions

在顶部加入#import “ViewController.h”,引入头文件

在didFinishLaunchingWithOptions中加入window初始化代码

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
    ViewController *controller = [[ViewController alloc] init];
    //为了看到页面效果,这里把背景颜色设置为蓝色
    controller.view.backgroundColor = [UIColor blueColor];
    UINavigationController *navigation = [[UINavigationController alloc] initWithRootViewController:controller];
    self.window.rootViewController = navigation;
    [self.window makeKeyAndVisible];
    return YES;
}

打开ViewController.m文件,在viewDidLoad中加入代码,我们设置下这个页面的标题

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    self.navigationItem.title = @"iOS页面";
}

6.启动工程

点击左上角选择设备,这里选择iphone12。点击三角形按钮,运行工程,此时工程已经可以在模拟器上运行起来了,在实际的开发中,我们也可以主要使用模拟器来完成开发,只有部分功能比如消息推送才必须使用真机。

7.进一步完善,安装cocoapods

前面6个步骤完成后,已经可以进行iOS开发了。在实际开发过程中,我们会用到各种功能,比如网络请求,下载图片等,这些功能使用iOS原生的api都可以完成,但是原生的接口功能不太好用。这时,我们可以使用第三方库辅助开发。比如下载图片我们可以使用SDWebImage,它提供了图片缓存等功能,让我们的app加载图片更快,用户体验更好。为了进一步完成我们的工程,我们需要增加依赖第三方库的功能。我们需要用到一个工具,cocoapods,它是使用ruby编写的iOS依赖管理工具。

cocoapods安装

首先需要安装rvm,它用来管理ruby版本。

执行以下命令

curl -L https://get.rvm.io | bash -s stable

如果报错,Failed to connect to raw.githubusercontent.com port 443: Connection refused,

再执行sudo vim /etc/hosts,加入这行(自行ping一下raw.githubusercontent.com,将IP替换)

199.232.68.133 raw.githubusercontent.com

重启命令行,

rvm install 3.0.0

rvm list known可以看到当前有哪些ruby版本可用。这里安装ruby的最新版本3.0.0,安装过程中会自动触发安装homebrew。homebrew是macOS下的包管理工具,安装过程可能会等待较长时间。

rvm和ruby安装完成后,在命令行中执行

sudo gem install cocoapods

如果这一步执行很慢或者没有反应,需要切换下ruby镜像源,命令行中执行

gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/

使用命令检查下镜像源有没有切换成功

gem sources -l

如果输出https://gems.ruby-china.com/说明已经切换完成了。

完成cocoapods安装后,执行命令

pod setup    

这行命令会提示Setup completed,实际并没有安装完成,需要执行

git clone https://github.com/CocoaPods/Specs.git ~/.cocoapods/repos/trunk

clone的过程需要消耗较长时间。。。执行完成后,使用pod search AFNetworking试验下,如果能搜索到,说明执行成功了。

8.引入第三方依赖

经历了漫长的时间,配置好cocoapods,接下来就可以使用它来引入第三方依赖了。

在iOSProject目录下新建Podfile文件写入依赖代码

platform : ios, '9.0'

target 'iOSProject' do
        pod "AFNetworking", "~> 4.0.0"
end

在iOSProject目录下执行pod install命令,执行成功后,新的依赖AFNetworking就引入进来了。iOSProject目录下多了iOSProject.xcworkspace文件,使用Xcode打开它。工程目录下面自动增加了Pods目录,Pods里面就是我们刚刚在Podfile里面新增的依赖。接下来,我们就可以在主工程中,比如ViewController中引入AFNetworking中的头文件,进行相关功能开发了。

9.完成

iOS开发环境已经配置完成了,接下来可以进行iOS app开发了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

搭建iOS开发环境 的相关文章

  • 如何将 rubocop 与 Rake 集成?

    rubocop https github com bbatsov rubocop是 Ruby 的代码风格检查器 与 rubocop 类似的工具 Cane 可以与 Rake 集成 https github com square cane in
  • 如何在 iOS 中按下后退按钮时创建确认弹出窗口?

    我想在有人按下 iOS 应用程序的 后退 按钮时添加一个弹出窗口 询问用户是否真的想回来 然后 根据用户的响应 我想撤消该操作或继续 我尝试在视图的 viewWillDisappear 函数中添加代码 然后编写正确的委托 但它不起作用 因为
  • Swift 2.0 中的协议扩展方法调度

    我面临有关协议方法调度的问题 我有一个类层次结构 如下所示 protocol E func test extension E func test print jello class A E class B A func test print
  • 当输入集中在移动 Safari 上时,页面底部出现不需要的填充

    我正在移动 safari 上使用文本区域 当文本区域聚焦时 视口似乎会在文档下方添加填充 当检查和选择区域时 它不会解析为元素 甚至不会解析为 html 节点 文本区域在屏幕上的位置或是否绝对位置似乎并不重要 当其聚焦时 填充始终存在 有时
  • AFNetworking 的 setImageWithURLRequest 在滚动后在错误的单元格中设置图像(iOS、Swift)

    我使用表dequeueReusableCellWithIdentifier and afnetworking uiimageview 我的一些细胞有图像 有些则没有 如果我在加载图像之前滚动表格 成功块会将图像放入重复使用的错误单元格中 例
  • Parse.com 因超出突发限制而拒绝服务

    我使用 Parse 创建了一个 iOS 应用程序 其中使用的是从 Parse com 网站下载的 iOS SDK 为了创建此类应用程序 ApplicationID 和 ClientID 密钥都嵌入在 iOS 应用程序中 并在使用应用程序时从
  • 如何在 Flutter 中为 Button 添加渐变?

    有没有办法改变ElevatedButton背景颜色渐变 如果没有一些小瑕疵或问题 例如缺少涟漪效应 不需要的边框 不尊重主题的内容 上述所有解决方案都无法真正发挥作用minWidth对于按钮 The 下面的解决方案没有上述问题 关键部分是使
  • 如何通过情节提要向导航栏添加后退按钮?

    我现在很困惑 我在网上到处都看到添加自定义后退按钮的教程 但我什至似乎无法启动默认按钮 在我的 MainViewController 中 我有performSegueWithIdentifier 然后在另一端 我希望导航栏在左侧有后退按钮
  • 操作按钮未出现在通知 iOS 10 中

    我在我的应用程序中使用本地推送通知 在 iOS 10 中为通知添加操作按钮时 它不会出现在通知下方 通知正在显示 但通知底部缺少操作按钮 下面给出了 appdelegate 代码 import UIKit import CoreData i
  • 从 NSString 获取子字符串,直到到达特定单词

    假设我有这个NSString Country Address Tel number 我该如何获取之前的子字符串Tel 国家地址 然后我该如何获取后面的子字符串Tel 数字 使用 NSScanner NSString string Count
  • 枚举 NSString 的最佳方法

    我正在寻找枚举 objc 对象 例如 NSString 的方法 我记得 Xcode4 版本中有一个新功能 它提供了一种新的 enum 方法 但不清楚 有人知道吗 好吧 我自己回答 我想我犯了一个错误 这就是我上面提到的新功能 typedef
  • UITableView 如何一次显示两个不同的数组?

    下面的代码有效 但不符合我的意愿 我希望当我单击 UIbutton 时 它会自动更新 UITableview 中的新值而不是旧值 下面的代码仅在我按下 UIbuttons 时有效 之后当我滚动 UITableview 时它会更新具有新值的
  • Rails 应用程序中的持久 TCP 连接

    我有一个在服务器上运行的第三方应用程序 它对客户端进行身份验证并返回响应 我的问题是 对于我收到 Rails 应用程序的每个请求 我都需要建立 TCP 连接并获取数据 是否可以有一个持久连接 以便我可以减少建立连接的开销 我希望你使用的是
  • 横向 xib 显示为纵向

    我有一个视图控制器和单独的纵向和横向笔尖文件 旋转时 我加载相应的笔尖 方法 shouldAutorotateToInterfaceOrientation and willRotateToInterfaceOrientation 接到电话
  • Swift:转义闭包捕获非转义参数“onCompletion”

    我的 swift 有问题 我正在尝试发送 API 请求 然后检索数据 但收到以下错误消息 Swift 转义闭包捕获非转义参数 onCompletion 有谁知道我该如何解决这个问题 提前致谢 Code class RestApiManage
  • 如何使用 Expo 播放 Youtube 视频

    我正在尝试使用反应本机 YouTube 组件 https github com inProgress team react native youtube在我的世博项目中 但是 我无法让它发挥作用 到目前为止 我所拥有的只是带有红色边框的黑屏
  • NativeScript:禁用 iOS WebView 缩放控件的方法?

    我正在尝试找出一种方法来防止用户通过捏合手势和双击来放大和缩小 iOS WebView tns ios 3 4 1 本质上禁用所有缩放 就像苹果之前使用的 html 元标记一样让用户决定是否要使用 iOS 10 及更高版本进行缩放 我找到了
  • UITableView 自动调整行大小约束在 iPhone 6Plus 上神秘破坏

    我有一个自定义的 UITableViewCell 它有一个缩略图和一堆文本 行高配置为使用自动计算 tableView estimatedRowHeight 129 tableView rowHeight UITableViewAutoma
  • iOS:启动图像多语言

    我有一个多语言应用程序 我的问题是启动图像 根据设备的语言使用启动图像的方法是什么 有什么东西在info plist file 解决方案是像项目中的任何其他资源一样本地化 Default png 从 Xcode 的项目列表中选择 Defau
  • 如何检测文本是否可读?

    我想知道是否有一种方法可以告诉给定的文本是人类可读的 我所说的人类可读的意思是 它有一些含义 格式就像某人写的文章 或者至少是由软件翻译器生成的供人类阅读的文章 这是背景故事 最近我正在制作一个应用程序 允许用户将短文本上传到数据库 在部署

随机推荐

  • QT学习_02_Lambda表达式——槽函数的正确打开方式

    1 带参数的信号 假设发送的信号带参数 信号是可以重载的 我用同一个函数名称 一个带参数 一个不带参数 在点击 切换到主窗口 按钮的时候 同时发射这两个信号 subwidget h ifndef SUBWIDGET H define SUB
  • ubuntu学习笔记

    ubuntu学习笔记 前言 一 ubuntu 22 04 更换阿里源 二 ubuntu22 04安装搜狗输入法 三 linux系统分区 个人向 四 vi及vim文本编辑器使用 五 nano文本编辑器使用 六 查看IP及网关DNS并设置IP地
  • 第09课:生活中的工厂模式——你要拿铁还是摩卡

    用程序来模拟生活 从剧情中思考工厂模式 工厂模式的模型抽象 类图 模型说明 简单工厂的优点 简单工厂的缺点 模型的拓展应用 应用场景 拓展 工厂三姐妹 简单工厂模式 工厂方法模式 抽象工厂模式 进一步思考
  • 遇到问题--Nginx---tomcat启动web程序访问静态资源时404找不到

    http blog csdn net zzq900503 article details 76927074 给web站点配置域名转发后 tomcat启动web程序访问静态资源时404找不到 经过确认项目资源路径都没问题 后来经过排查后发现是
  • 配置samba服务

    什么是samba服务 是 和windows 进行 文件打印机共享的组件 结果就是linux windows 之间可以互相访问它们的共享文件 说明 我用的是ubuntu系统 ubuntu系统安装samba服务 确定自己是否安装samba dp
  • (一)Google发布了一个新的Tensorflow物体识别API

    做图像识别有很多不同的途径 谷歌最近发布了一个使用Tensorflow的物体识别API 让计算机视觉在各方面都更进了一步 这篇文章将带你测试这个新的API 并且把它应用在youtube上 可以在GitHub上获取用到的全部代码 https
  • JDBC连接数据库URL示例

    jdbc mysql localhost 3306 crm useSSL false useUnicode true characterEncoding UTF 8
  • matlab扩充内存,matlab中内存不够用的解决方案

    1 在命令行中输入pack函数来整理内存 pack函数到底是什么机制呢 这里参考了MATLAB的help文档 话说回来 help始终是学习MATLAB的 金参考标准 用法 pack pack filename pack filename 第
  • Struts配置文件详解

    Struts1配置文件
  • 最好的工程师像投资者一样思考,而不是建设者

    我在大学期间住在图书馆 我学习的教科书理论越多 我就会成为一名更好的工程师 我想 然而 当我开始工作时 我注意到业内最优秀的工程师并不一定比应届毕业生了解更多的理论 他们只是带来了不同的心态 即投资者的心态 正是这种心态帮助他们提出更聪明的
  • 谈一谈,自身对技术经理这个职位的理解吧

    前言 19年初在上一家公司离职 在上一公司服役了4年半 成长了不少 收获了不少东西 在上一公司也带过很多团队 多的时候6 7个人 少的时候2人 也总结了很多的所谓的经验吧 由于一系列原因吧 离职来到了我现在的公司 岗位职责 到这边以后 入职
  • 什么是MyBatis

    一 MyBatis概述 1 1 原始的JDBC操作 谈及mybatis 必然需要先了解Java和数据库的连接技术 JDBC Java DataBase Connectivity 但是原始JDBC操作中 却存在如下缺点 数据库连接创建 释放频
  • 计算机制作节日贺卡教案,《制作节日贺卡》教学设计.doc

    文档介绍 制作节日贺卡 教学设计 小学信息技术 第五册第1单元第3课吴信平肥西县三河镇三河学区中心学校电子邮箱 ahicon 电话 教材分析本课是制作电子贺卡单元的第3课 教材内容为指导学生完整地制作一张贺卡 让学生学会如何制作一个简单的电
  • Spark是否能替代Hive

    在实际生产环境中已经形成了离线以Hive为主 Spark为辅 实时处理用Flink的大数据架构体系及Impala Es Kylin等应用查询引擎 但是有很多学习Spark的程序员普遍认为Spark必然会替代Hive成为新的一代大数据仓库标准
  • Linux设备驱动开发入门之——hello驱动

    1 Linux驱动程序的分类 Linux 中主要分为三大类驱动 字符设备驱动 块设备驱动和网络设备驱动 1 字符设备驱动 因为软件操作设备是是以字节为单位进行的 是按照字节流进行读写操作的一种设备 典型的如LCD 蜂鸣器 SPI 触摸屏等驱
  • dfs 遍历二叉树

    dfs 遍历二叉树 为了更好的理解dfs 手写了dfs 遍历二叉树的两种方式 方法 一种是采用常用的递归执行 另一种是采用循环执行 使用栈来代替递归 二叉树定义 class Node get set方法省略 private Node lef
  • ZF预编码,R-ZF预编码,脏纸预编码(DPC预编码)

    如何理解通信中的迫零预编码 正则化迫零预编码与脏纸预编码 ZF预编码可以理解为把user自身因为多天线空间信道传输而产生的在同时同频的自干扰消掉 但没有考虑消去高斯分布的noise 从而最小化了真实信号和估计的误差平方和 而从统计来看就是M
  • 从零开始研究Gitlab(利用vscode进行同步)

    1 vscode添加远程gitlab仓库 这个一步步按着做就好了 最开始的ssh秘钥创建可以直接在gitlab页面里点击 获取更多 查看步骤 https jingyan baidu com article afd8f4de9dcad475e
  • os.walk和os.listdir

    1 os walk 可以一级一级循环低递归到最下面的一级目录 for root img names in os walk img dir for img name in img names img path os path join roo
  • 搭建iOS开发环境

    1 准备 当前移动开发主要分为安卓开发和iOS开发 安卓是谷歌在2007年宣布开源的移动操作系统 iOS是苹果2007年发布的 两个系统出现的时间大致相同 在随后的十年间引领了移动开发浪潮 如今各种移动开发技术层出不穷 一些跨平台的技术也相