截至到上一篇博客到现在为止差不多有一个月了,时光飞逝,从来没有觉得时间过的如此之快。在这一个月中其实发生了很多事:学完了日语中级上册,记了整整一本笔记;装上了黑苹果,因此也有机会接触到IOS相关的内容,所以大致过了一遍swift3的语法;养了一只小仓鼠,生活变的有趣许多;整理了一下github,切换了主邮箱。其他来说,生活依旧在继续,折腾一直未停止,为了生活,为了编程.我一直在努力,也从未放弃。记一篇swift入门的博客以作慰藉。
前言
因为本人是在学习swift中,所以这篇文章更多的成份算是自己的笔记,只是将自己的经历分享出来。请大牛们勿喷,小白们别当权威。如果有错误请指出,我一定会虚心改正。最后,与君共勉,早日成为独当一面的人物。
一.基本环境
OS x 10.11.6 Xcode 8.2.1 swift 3.0.2 swift package manager 3.0.2 pod 1.2.1 carthage 0.20.1
因为xcode是严格和os x版本对照的,所以我的10.11.6黑苹果就止步于8.2.1版本的xcode,因此swift3.1也玩不了,表示很心痛.
二 swift能做些什么
- IOS手机APP开发(据说也能开发android应用,期待大一统)
- Mac电脑应用,同样的软件,在mac上看着就是高雅,这不得不说是apple的功劳
- watchOS和TvOS,暂时没接触到
- 服务端开发,也就是说可以开发网站或者其他各种东西,对应框架有Perfect,Vapor,Kitura 和 Zewo. 附一篇文章介绍
- 其他待挖掘,世界各国的计算机科学家们可不是打酱油的.
三. SPM是什么鬼
Swift Package Manager(SPM)是苹果最新的官方工具,可以用来管理 Swift 代码的分配,它为 Swift 编译系统集成了自动进行下载、编译和连接依赖的过程,不过目前还处于早期开发阶段。
支持的平台
✔ macOS
✔ Linux
✘ iOS
✘ watchOS
✘ tvOS
在此之前我们常用的工具是Cocoapods
和Carthage
。
如何下载 下载对应版本 ,然后安装 在终端中执行
export PATH=/Library/Developer/Toolchains/swift-latest.xctoolchain/usr/bin:"${PATH}"
验证是否安装成功
|
|
- 怎么使用
首先,使用
mkdir
创建一个新的目录,用来放置你的包或者应用。 这里我们使用helloworld
作为例子:mkdir helloworld
。 然后,使用cd
命令进入helloworld
目录,运行命令:swift build --init
。
|
|
我们看看 swift build --init
生成的内容:
Package.swift
:包的”配置信息”(manifest)。swift build --init
使用你创建的目录名作为包名。Sources
目录:按照 SwiftPM 的要求,所有的源代码文件都放到 Sources 目录下。main.swift
:Swift 应用使用main.swift
(有且只有一个)作为程序执行的入口。Tests
目录:存放应用的测试用例。.gitignore
:一个便捷的git gitignore
文件,忽略一些本地编译时用到的配置目录和文件,比如:.build
和Packages
目录(一些你不想加入到 git 库的东西)。
在这个 helloword
例子中,Package.swift
文件内容如下:
|
|
运行 swift build
会创建可执行文件 .build/debug/helloworld
,运行这个文件就会在终端输出 Hello, world!
.
如果你想编译一个 Swift 库,只需要删除 main.swift
文件,然后替换成你的库代码。在没有 main.swift
的情况下,SwiftPM
会创建一个静态的库。
怎么在xcode中打开 在项目根目录运行
swift package generate-xcodeproj
,会生成xcodeproj
,此时可以用xcode打开这个项目 我们来看看生成的代码是什么样子的怎么添加其他依赖 我们以引入Alamofire为例 项目根目录有一个
Package.swift
的文件,打开这个文件,加入Alamofire的地址.Package(url: "https://github.com/Alamofire/Alamofire.git", majorVersion: 4)
文件内容如下
|
|
然后运行再次在项目根目录运行 swift build
就会下载Alamofire的依赖
四. pod又是干咩的
- CocoaPods是什么? 当你开发iOS应用时,会经常使用到很多第三方开源类库,比如JSONKit,AFNetWorking等等。可能某个类库又用到其他类库,所以要使用它,必须得另外下载其他类库,而其他类库又用到其他类库,“子子孙孙无穷尽也”,这也许是比较特殊的情况。总之我的意思就是,手动一个个去下载所需类库十分麻烦。另外一种常见情况是,你项目中用到的类库有更新,你必须得重新下载新版本,重新加入到项目中,十分麻烦。如果能有什么工具能解决这些恼人的问题,那将“善莫大焉”。所以,你需要 CocoaPods。 CocoaPods应该是iOS最常用最有名的类库管理工具了,上述两个烦人的问题,通过cocoaPods,只需要一行命令就可以完全解决,当然前提是你必须正确设置它。重要的是,绝大部分有名的开源类库,都支持CocoaPods。所以,作为iOS程序员的我们,掌握CocoaPods的使用是必不可少的基本技能了。
- 如何下载和安装CocoaPods?
在安装CocoaPods之前,首先要在本地安装好Ruby环境。至于如何在Mac中安装好Ruby环境,请google一下,本文不再涉及。
假如你在本地已经安装好Ruby环境,那么下载和安装CocoaPods将十分简单,只需要一行命令。在Terminator(也就是终端)中输入以下命令(注意,本文所有命令都是在终端中输入并运行的。什么,你不知道什么是终端?那请我吃饭,我告诉你):
sudo gem install cocoapods
如果下载不了可能又是伟大的墙在发挥作用,请自行翻墙或修改国内镜像源. 正常来说,等上十几秒钟,CocoaPods就可以在你本地下载并且安装好了,不再需要其他设置。
好了,安装好CocoPods之后,接下来就是使用它。所幸,使用CocoPods和安装它一样简单,也是通过一两行命令就可以搞定。
我在这里用两种使用场景来具体说明如何使用CocoaPods。
场景1:利用CocoaPods,在项目中导入Alamofire类库
Alamofire类库在GitHub地址是:https://github.com/Alamofire/Alamofire.git
为了确定Alamofire是否支持CocoaPods,可以用CocoaPods的搜索功能验证一下。在终端中输入:
pod search Alamofire
如果能正确返回Alamofire
相关信息。这说明,Alamofire是支持CocoaPods,所以我们可以利用CocoaPods将Alamofire导入你的项目中。
我们创建一个swift的ios项目,然后在终端中切换到该项目的根目录,运行以下命令:
pod init
这个命令会在根目录下生成一个Podfile
,我们在这个文件中添加相应的依赖就可以了.
修改Podfile文件,添加依赖
|
|
然后运行 pod install
|
|
注意提示: 告诉我们要关掉xocode,选择
cocopodsDemo.xcworkspace
打开项目,目录结构现在应该是这个样子的.
添加Alamofile
依赖Product
=>Schemes
=>Manage Schemes
,将Alamofile
勾上,
此时,我们就可以使用Alamofile
来做些有趣的事情了。
关于 Podfile.lock
当你执行pod install之后,除了 Podfile 外,CocoaPods 还会生成一个名为Podfile.lock的文件,Podfile.lock 应该加入到版本控制里面,不应该把这个文件加入到.gitignore中。因为Podfile.lock会锁定当前各依赖库的版本,之后如果多次执行pod install 不会更改版本,要pod update才会改Podfile.lock了。这样多人协作的时候,可以防止第三方库升级时造成大家各自的第三方库版本不一致
场景2:如何正确编译运行一个包含CocoPods类库的项目
你也许曾经遇到过(特别是新手iOS开发者)这种情况,好不容易在GitHub上找到一份代码符合自己想需求,兴冲冲下载下来,一编译,傻眼了,发现有各种各样错误。一看,原来是缺失了各种其他第三方类库。这时候莫慌,你再仔细一看,会发现你下载的代码包含了Podfile。没错,这意味着你可以用CocoaPods很方便下载所需要的类库。
下面,我以代码 UAAppReviewManager 为例来说明如何正确编译运行一个包含CocoPods类库的项目。 UAAppReviewManager是一个能够让你方便地将提醒用户评分的功能加入你的应用中。当你去UAAppReviewManager的GitHub地址下载这份代码之后,打开Example工程(UAAppReviewManagerExample),编译,你会发现Xcode报告一大堆错误,基本都是说你编译的这份代码找不到某某头文件,这就意味着你要成功编译UAAppReviewManager的Example代码,必须先导入一些第三方类库。同时你会发现在UAAppReviewManagerExample文件夹下面有三个跟CocosPods相关的文件(文件夹):Podfile,Podfile.lock和Pods
这时候,打开终端,进入UAAppReviewManagerExample所在的目录,也就是和Podfile在同一目录下,和场景1一样,输入以下命令(由于已经有Podfile,所以不需要再创建Podfile):
$ pod update
这时候,再回到UAAppReviewManagerExample
文件夹看一看,会看到多了一个文件UAAppReviewManagerExample.xcworkspace
根据终端的信息提示,你以后就需用新产生的UAAppReviewManagerExample.xcworkspace
来运行这个Example
代码了。
打开UAAppReviewManagerExample.xcworkspace
,编译运行,成功
注意,这里有个小问题,如果刚刚你不是输入$ pod update
,而是输入$ pod install
,会发现类库导入不成功
这里的意思大概是Podfile
文件过期,类库有升级,但是Podfile
没有更改。$ pod install
只会按照Podfile
的要求来请求类库,如果类库版本号有变化,那么将获取失败。但是 $ pod update
会更新所有的类库,获取最新版本的类库。而且你会发现,如果用了 $ pod update
,再用 $ pod install
就成功了。
那你也许会问,什么时候用 $ pod install
,什么时候用 $ pod update
呢,我又不知道类库有没有新版本。好吧,那你每次直接用 $ pod update
算了。或者先用 $ pod install
,如果不行,再用 $ pod update
。
五. Carthage
说到Carthage,就要先说swift,2014年苹果发布swift初期,用swift编写的第三方库就只能通过拖动源代码到自己的项目中才能被调用, 由于当时只有寥寥无几的开源库,且不能打包,加上swift1.0并不是那么好用,许多人对swift持着观望的态度。随着swift逐步趋于稳定,并且从ios8.0开始支持将自己写的swift打包成framework,越来越多的纯swift编写框架开始出现,就在这时候carthage突然出现在人们的视野中,而且陆陆续续几乎所有的开源框架都开始支持carthage。
安装使用Carthage
|
|
如果你不喜欢使用终端,也可以从网站https://github.com/Carthage/Carthage/releases 下载最新版的Carthage.pkg来更新。
当你安装好Carthage后,在终端执行$ carthage version
即可看到当前的carthage版本, 当我写这篇文章的时候,Carthage的版本为0.20.1 。现在,你已经安装好了Carthage,接下来就是在你的项目中使用carthage了:
- 通过终端进入到项目所在的文件夹
- 创建一个空的carthage文件
- 使用xcode打开cartfile文件
open -a Xcode Cartfile
- 添加内容
|
|
- 保存并关闭cart file文件,在终端执行命令
carthage update --platform iOS
,carthage会为你下载和编译所需要的第三方库,当命令执行完毕,在你的项目文件夹中会创建一个名为Carthage的文件夹 - 添加依赖
六. 如何选择
google出来多半都是使用SPM
和cocoapods
,所以我们暂时也从这里面二选一吧。前面提到目前 swift 3.0.1
只支持mac os
和 linux
系统,所以开发ios应用的话选用cocoapods
会好一些,我会花了更多的时间在cocoapods
上面。但是,我更期待SPM
能够支持IOS
,让我们拭目以待吧。
七. 使用Alamofire来玩点有趣的吧
未完待续