主要是在VitrualBox里安装mac系统和xcode,参考这篇教程,VirtualBox的版本是4.3.18 r96156,OSX版本是10.11 El Capitan,XCode版本是7.1 (7B91b)。
经过几天的初步使用,感觉用虚拟机开发iOS基本能够满足要求,i5/8g/ssd的配置目测能达到真机70%的开发效率。主要存在的问题是:1)在宽屏上无法满屏,两边会留有黑框,导致鼠标无法顺利停靠在两侧 2)键盘敲击频率过快(约5Hz)时字符乱序出现在编辑器里,例如快速输入“update”可能会得到“updaet”。
调整分辨率
以管理员方式启动virtualbox和cmd命令行(重要!),执行下面的命令
cd "C:\Program Files\Oracle\VirtualBox"
VBoxManage setextradata "OSXElCapitan" VBoxInternal2/EfiGopMode 3 (注意,参数值 0=640×480, 1=800×600, 2=1024×768, 3=1280×1024, 4=1440×900, 5=1920×1200)
VBoxManage setextradata "OSXElCapitan" "CustomVideoMode1" "1360x768x32" (必须8的整数倍,我这里没有成功)
参考链接:How to Guide for Mavericks VM on Mavericks
通过Virtualbox的远程桌面连接到虚拟机
如果是NAT方式,目标地址是127.0.0.2,用guest里通过ifconfig查看到的10.0.2.xx是不行的。 远程桌面的方式比直接使用虚拟机卡不少,作为开发使用并不实用。
修饰键
苹果键盘与Windows键盘几个修饰键的对应关系如下(在设置里可以改,这里是缺省情况):
Command键(花键 ⌘):对应windows键
Control键(⌃):对应ctrl键
Shift键(⇧):对应shift键
Option键(⌥):对应alt键
两种键盘上这几个修饰键物理布局最大的区别,在于Command键与Option键位置相反,可以去“偏好设置->键盘”里改过来,这样切换两种键盘时就比较容易适应了。
常用快捷键
官方文档
跳到行首:“Command+左键”(Home键是跳到页首)
结束任务:Command+Option+Esc
代码辅助:control+.
打开/关闭左侧Navigator边栏:Command+0(数字0)
打开/关闭右侧Utilities边栏:Option+Command+0(数字0)
快速打开文件(Open Quickly):Shift+Command+O(字母O)
转到定义(Go to Definition):Command+鼠标点击,或Option+Command+J
自动格式化代码:Control+I(需要先全选,否则只格式化当前行)
调整模拟器大小:Command+3(50%)
官网:swift.org
官方文档:The Swift Programming Language, 中文版
斯坦福免费视频公开课:Developing iOS 8 Apps with Swift,中文翻译
国内视频教程:精通iOS移动开发(Xcode7&Swift2)
cocoachina专题:从今天开始学些Swift
30DaysofSwift项目
常量
多数项目里都需要一些常量,java里通常定义在interface里,用swift时可以定义在一个struct里,作为静态的存储成员(static let)。
时间
NSTimeInterval:自1970年的秒数(注意不是毫秒数)
NSDate:相当于java.util.Date
NSDateFormatter:用来帮助在String与NSDate类型之间做转换 参考
TableView
基本使用:可以用ViewController里放TableView,也可以直接用TableViewController,参考How to make a simple tableview with iOS 8 and Swift
使用TableViewController时显示Activity Indicator View(菊花)有问题,不太完美的解决方案见:UITableView Activity Indicator the Apple way
CollectionView
相当于Android里的GridView,可以显示多列数据,只是没有cell的默认实现,也就是必须使用自定义cell。
要让每个cell的宽度恰好等于collection view的一半,可通过实现下面的方法实现(参考链接):
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize { return CGSize(width: CGFloat(self.view.frame.size.width / 2), height: self.view.frame.size.height) }
异步加载TableView/CollectionView里的远程图片
官方示例
依赖包管理/Carthage
先安装Homebrew(osx的包管理工具),然后通过Homebrew安装Carthage(比cocoapods灵活,去中心,只支持ios8和以上版本)。
在工程目录下新建“Cartfile”文件,并填写要依赖的包,然后执行carthage update命令,此时如果提示“unable to find utility "xcodebuild", not a developer tool”,可使用"sudo xcode-select --switch"命令解决,这样就下载了依赖包。为了让xcode能用到carthage编译的framework,先从Finder把刚才生成的.framework文件拖到工程的General -> Linked Frameworks and Libraries区域(在Navigator里点击工程根目录即可看到)里,然后在Build Phases里添加一个新内容是“/usr/local/bin/carthage copy-frameworks”的Run Script,并在Input Files里增加所需的编译后的依赖包如“$(SRCROOT)/Carthage/Build/iOS/SwiftyJSON.framework”。 参考Carthage的Getting Start
经测试还需要在工程的Build Setting -> Framework Search Path里添加“$(SRCROOT)/Carthage/Build/iOS”,否则build会失败。参考资料
依赖包管理/CocoaPods
有些第三方依赖只支持cocoapods,所以也要装一个cocoapods。cocoapods的资料比较多,例如这篇,也比较容易安装使用。一个需要注意的问题是,执行pod setup命令后提示Setting up CocoaPods master repo要等很久,大约1小时。
在swift文件里使用object-c开发的库,需要借助一个bridging文件,通常名称是“项目名-Bridging-Header.h”。可以让xcode生成这个文件,方法是在工程里创建一个空的Objective-C文件,最后一步时xcode会提示是否创建bridging文件,点YES然后再删掉这个空文件即可。在bridging文件里使用类似#import <AFNetworking/AFNetworking.h>的方式包含依赖包。
HTTP
据说SwiftHTTP是个坑,暂时绕开,使用系统提供的NSURLSession简单封装一下。使用方法参考链接
iOS9里默认要求所有http请求都使用https,如果一定要用http,在工程的info.plist里修改“App Transport Security Settings -> Allow Arbitrary Loads”为true。
JSON
暂时使用SwiftyJSON,感觉还好。
下拉刷新/上拉翻页
下拉刷新:iOS8起内置了UIRefreshControl可以方便的实现下拉刷新功能 用法
上拉翻页/加载更多:暂时没有发现原生的简便方法实现,第三方库倒是比较多,例如SVPullToRefresh和MJRefresh
进度条
由于TableViewController显示Activity Indicator有问题,目前在用SVProgressHUD作为替代方案。