原文地址: https://kemchenj.github.io/20...

Swift 3的 beta 版现在已经出来了,Chris Lattner 之前在邮件里也大概提到说 Swift 3在八月就基本上全面完工

大家在写小 demo 或者是项目迁移到 Swift 3.0 的时候遇到最大的一个问题应该是第三方库的添加

Swift 社区一直都是热情爆满,诸如 Alamofire,Decodable等第三方库都有 Swift 3.0 的分支,但如果在导入的时没有处理一下,就总是会出各种奇奇怪怪的问题,我在这里分享一下我自己的解决方案

其实主要要处理的问题就只有两个

  1. 指定第三方库的某个特定分支

  2. 指定工程文件内 Swift 编译的版本

Cocoapods

这里以 Alamofire 为例,主要是需要在 podfile 里面多加点东西

指定分支

首先是指定分支,cocoapods本身只支持 name 跟 version 两个参数,但我们可以通过指定 git 仓库,然后再指定 branch,具体格式如下:

pod 'Alamofire',:git => 'https://github.com/Alamofire/Alamofire.git',:branch => 'swift3'

指定编译版本

还有就是指定 Swift 的版本,只要在项目的最后加上下面这几句就可以了,这里的几句话对项目里的 target 做了个遍历,修改了全部 target 的 Swift 编译版本

post_install do |installer| 
    installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
            config.build_settings['SWIFT_VERSION'] = '3.0'
        end
    end
end

但是这么写有一个缺点,Objective-C 跟 Swift 的混编项目,如果想要引入 OC 的库的话,就不能这么做了,但是一个一个去设置编译版本又太麻烦,我觉得最简单的还是直接进去项目里,把SWIFT_VERSION这一项删掉就可以了

完整 podfile 如下:

project 'sample.xcodeproj'

platform :ios,'9.0'

target 'sample' do
    use_frameworks!

    pod 'Alamofire',:branch => 'swift3'
end

post_install do |installer| 
    installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
            config.build_settings['SWIFT_VERSION'] = '3.0'
        end
    end
end

Carthage

Carthage 的具体用法我就不解释了,其实我个人而言还是更喜欢 Carthage,自己操作过一遍基本上都能理解第三方库导入的过程了

指定分支

Carthage由于本身就是一个去中心化的包管理器,所以在 cartfile 里面选择分支就可以了

github "Alamofire/Alamofire" "swift3"

指定编译版本

Carthage编译就很简单了,Swift 3的话直接 carthage update 就行了,xcodebuild 指向了Xcode 8的前提下,默认 Swift 3,但是 Swift 2.3的话就需要指定一下版本,如下:

TOOLCHAINS=com.apple.dt.toolchain.Swift_2_3 carthage update --platform ios

然后编译的时候有一点需要注意的是,Carthage 默认会调用 xcode build 去变异,如果我们电脑同时有两个版本的 Xcode 的时候,需要确认一下 Xcode build 的版本

如果不是 Xcode 8的话,就运行一下这条命令去修改就可以了

sudo ./xcode-select -switch /Applications/Xcode-beta.app/

最后

Swift 的各方各面都让人觉得欲罢不能,比起有点年纪的 Objective-C,每天的接触都能感受到 Swift 各种神奇的写法

Swift 像是个什么都想要的任性的女朋友,跟她一起会很累,累的是你必须为了她的进步而更加努力去学习更多东西,接触更多新的东西

"Swift 从入门到重新入门"看起来好像很悲催,但如果改成"女朋友从认识到重新认识",其实也挺带感的...

初级 iOS 开发,广州地区求职 ing
简历: https://kemchenj.github.io/re...
联系方式: chenkem95@outlook.com

Swift 2.3 / 3.0如何添加第三方库的更多相关文章

  1. Html5 滚动穿透的方法

    这篇文章主要介绍了Html5 滚动穿透的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  2. HTML5 拖放(Drag 和 Drop)详解与实例代码

    本篇文章主要介绍了HTML5 拖放(Drag 和 Drop)详解与实例代码,具有一定的参考价值,有兴趣的可以了解一下

  3. 跨域修改iframe页面内容详解

    这篇文章主要介绍了跨域修改iframe页面内容详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  4. ios – Xcode找不到Alamofire,错误:没有这样的模块’Alamofire’

    我正在尝试按照github(https://github.com/Alamofire/Alamofire#cocoapods)指令将Alamofire包含在我的Swift项目中.我创建了一个新项目,导航到项目目录并运行此命令sudogeminstallcocoapods.然后我面临以下错误:搜索后我设法通过运行此命令安装cocoapodssudogeminstall-n/usr/local/bin

  5. ios – bug编译alamofire – 未知选项字符`X’: – Xlinker

    尝试使用cocoapods将alamofire添加到项目中.Xcode版本:6.1.1版Podfile:这是错误:解决方法通过升级到Cocoapods0.36beta解决了这个问题.我也不得不删除旧版本.

  6. ios – 暂停调度队列是否会暂停其目标队列?

    我想创建两个串行队列A&B.队列B是队列A的目标.我想在B上排队一些块,并暂停它直到我准备执行它们,但是我想继续在队列A上执行块.如果我暂停B,这还会暂停它的目标队列(队列A)吗?我的想法是,我想安排这些特定的块在稍后日期执行但是我不希望它们同时运行而我不这样做想要处理信号量.但我希望队列A继续处理它的块,而B则被暂停如果不清楚这里是一些示例代码解决方法queueB被挂起,但queueA未被挂起.queueA和queueB被挂起.

  7. ios – “没有这样的模块’Alamofire’”将无法识别框架

    我正在尝试使用Swift将Alamofire添加到一个新的XCode项目中.我觉得我已经尝试了一切.每次我尝试添加进口Alamofire我得到“没有这样的模块”.我已按照https://github.com/Alamofire/Alamofire所述尝试安装,我尝试先手动完成,然后是Carthage和Cocoapods,但结果相同.我已经尝试删除DerivedData文件夹并重建项目,没有任何运气

  8. xcode – tvos:Alamofire框架的iTunesConnect验证失败:不包含bitcode

    解决方法我想你是在项目设置中用appletvsimulator提交Framework.检查此链接Carthageissue

  9. ios – 错误域= com.alamofire.error.serialization.response代码= -1011“请求失败:禁止

    任何人都可以帮我解决以下错误–>在AFNetworking2.5中使用“删除”方法时出错解决方法我发现,如果我的手机时钟不同步……它不允许我更新…也许检查你的手机设置到正确的时间“自动区”,看看是否有效…

  10. ios – 使用CocoaPods post install hook将自定义路径添加到HEADER_SEARCH_PATHS

    解决方法在Podfile中定义一个方法:然后在post_install中调用该方法:

随机推荐

  1. Swift UITextField,UITextView,UISegmentedControl,UISwitch

    下面我们通过一个demo来简单的实现下这些控件的功能.首先,我们拖将这几个控件拖到storyboard,并关联上相应的属性和动作.如图:关联上属性和动作后,看看实现的代码:

  2. swift UISlider,UIStepper

    我们用两个label来显示slider和stepper的值.再用张图片来显示改变stepper值的效果.首先,这三个控件需要全局变量声明如下然后,我们对所有的控件做个简单的布局:最后,当slider的值改变时,我们用一个label来显示值的变化,同样,用另一个label来显示stepper值的变化,并改变图片的大小:实现效果如下:

  3. preferredFontForTextStyle字体设置之更改

    即:

  4. Swift没有异常处理,遇到功能性错误怎么办?

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  5. 字典实战和UIKit初探

    ios中数组和字典的应用Applicationschedule类别子项类别名称优先级数据包contactsentertainment接触UIKit学习用Swift调用CocoaTouchimportUIKitletcolors=[]varbackView=UIView(frame:CGRectMake(0.0,0.0,320.0,CGFloat(colors.count*50)))backView

  6. swift语言IOS8开发战记21 Core Data2

    上一话中我们简单地介绍了一些coredata的基本知识,这一话我们通过编程来实现coredata的使用。还记得我们在coredata中定义的那个Model么,上面这段代码会加载这个Model。定义完方法之后,我们对coredata的准备都已经完成了。最后强调一点,coredata并不是数据库,它只是一个框架,协助我们进行数据库操作,它并不关心我们把数据存到哪里。

  7. swift语言IOS8开发战记22 Core Data3

    上一话我们定义了与coredata有关的变量和方法,做足了准备工作,这一话我们来试试能不能成功。首先打开上一话中生成的Info类,在其中引用头文件的地方添加一个@objc,不然后面会报错,我也不知道为什么。

  8. swift实战小程序1天气预报

    在有一定swift基础的情况下,让我们来做一些小程序练练手,今天来试试做一个简单地天气预报。然后在btnpressed方法中依旧增加loadWeather方法.在loadWeather方法中加上信息的显示语句:运行一下看看效果,如图:虽然显示出来了,但是我们的text是可编辑状态的,在storyboard中勾选Editable,再次运行:大功告成,而且现在每次单击按钮,就会重新请求天气情况,大家也来试试吧。

  9. 【iOS学习01】swift ? and !  的学习

    如果不初始化就会报错。

  10. swift语言IOS8开发战记23 Core Data4

    接着我们需要把我们的Rest类变成一个被coredata管理的类,点开Rest类,作如下修改:关键字@NSManaged的作用是与实体中对应的属性通信,BinaryData对应的类型是NSData,CoreData没有布尔属性,只能用0和1来区分。进行如下操作,输入类名:建立好之后因为我们之前写的代码有些地方并不适用于coredata,所以编译器会报错,现在来一一解决。

返回
顶部