截至到上一篇博客到现在为止差不多有一个月了,时光飞逝,从来没有觉得时间过的如此之快。在这一个月中其实发生了很多事:学完了日语中级上册,记了整整一本笔记;装上了黑苹果,因此也有机会接触到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 Package Manager(SPM)是苹果最新的官方工具,可以用来管理 Swift 代码的分配,它为 Swift 编译系统集成了自动进行下载、编译和连接依赖的过程,不过目前还处于早期开发阶段。
支持的平台
✔ macOS
✔ Linux
✘ iOS
✘ watchOS
✘ tvOS
在此之前我们常用的工具是Cocoapods
和Carthage
。
1. 如何下载
下载对应版本,然后安装
在终端中执行 export PATH=/Library/Developer/Toolchains/swift-latest.xctoolchain/usr/bin:"${PATH}"
$ swift build --version
Swift Package Manager - Swift 3.0.2
mkdir
创建一个新的目录,用来放置你的包或者应用。 helloworld
作为例子:mkdir helloworld
。 cd
命令进入 helloworld
目录,运行命令:swift build --init
。# cd helloworld
# swift build --init
Creating Package.swift
Creating .gitignore
Creating Sources/
Creating Sources/main.swift
Creating Tests/
我们看看 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
文件内容如下:
import PackageDescription
let package = Package(
name: "helloworld"
)
运行 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)
文件内容如下
import PackageDescription
let package = Package(
name: "spg",
dependencies: [
.Package(url: "https://github.com/Alamofire/Alamofire.git", majorVersion: 4)
]
)
然后运行再次在项目根目录运行 swift build
就会下载Alamofire的依赖
sudo gem install cocoapods
好了,安装好CocoPods之后,接下来就是使用它。所幸,使用CocoPods和安装它一样简单,也是通过一两行命令就可以搞定。
我在这里用两种使用场景来具体说明如何使用CocoaPods。
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文件,添加依赖
# Uncomment the next line to define a global platform for your project
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, ’10.2’
target 'cocopodsDemo' do
pod 'Alamofire', '~> 4.4'
# Comment the next line if you're not using Swift and don't want to use dynamic frameworks
use_frameworks!
# Pods for cocopodsDemo
target 'cocopodsDemoTests' do
inherit! :search_paths
# Pods for testing
end
target 'cocopodsDemoUITests' do
inherit! :search_paths
# Pods for testing
end
end
然后运行 pod install
Analyzing dependencies
Downloading dependencies
Installing Alamofire (4.4.0)
Generating Pods project
Integrating client project
[!] Please close any current Xcode sessions and use `cocopodsDemo.xcworkspace` for this project from now on.
Sending stats
Pod installation complete! There is 1 dependency from the Podfile and 1 total pod installed.
注意提示: 告诉我们要关掉xocode,选择
cocopodsDemo.xcworkspace
打开项目,目录结构现在应该是这个样子的.
添加Alamofile
依赖
Product
=>Schemes
=>Manage Schemes
,将Alamofile
勾上,
此时,我们就可以使用Alamofile
来做些有趣的事情了。
当你执行pod install之后,除了 Podfile 外,CocoaPods 还会生成一个名为Podfile.lock的文件,Podfile.lock 应该加入到版本控制里面,不应该把这个文件加入到.gitignore中。因为Podfile.lock会锁定当前各依赖库的版本,之后如果多次执行pod install 不会更改版本,要pod update才会改Podfile.lock了。这样多人协作的时候,可以防止第三方库升级时造成大家各自的第三方库版本不一致
你也许曾经遇到过(特别是新手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,就要先说swift,2014年苹果发布swift初期,用swift编写的第三方库就只能通过拖动源代码到自己的项目中才能被调用, 由于当时只有寥寥无几的开源库,且不能打包,加上swift1.0并不是那么好用,许多人对swift持着观望的态度。随着swift逐步趋于稳定,并且从ios8.0开始支持将自己写的swift打包成framework,越来越多的纯swift编写框架开始出现,就在这时候carthage突然出现在人们的视野中,而且陆陆续续几乎所有的开源框架都开始支持carthage。
安装使用Carthage
$ brew update
$ brew install carthage
如果你不喜欢使用终端,也可以从网站https://github.com/Carthage/Carthage/releases下载最新版的Carthage.pkg来更新。
当你安装好Carthage后,在终端执行$ carthage version
即可看到当前的carthage版本, 当我写这篇文章的时候,Carthage的版本为0.20.1 。现在,你已经安装好了Carthage,接下来就是在你的项目中使用carthage了:
open -a Xcode Cartfile
github "Alamofire/Alamofire" ~> 4.4
github "SwiftyJSON/SwiftyJSON"
carthage update --platform iOS
,carthage会为你下载和编译所需要的第三方库,当命令执行完毕,在你的项目文件夹中会创建一个名为Carthage的文件夹google出来多半都是使用SPM
和cocoapods
,所以我们暂时也从这里面二选一吧。前面提到目前 swift 3.0.1
只支持mac os
和 linux
系统,所以开发ios应用的话选用cocoapods
会好一些,我会花了更多的时间在cocoapods
上面。但是,我更期待SPM
能够支持IOS
,让我们拭目以待吧。
1