├── .gitignore ├── README.md └── article ├── 1.md ├── 10.md ├── 11.md ├── 12.md ├── 13.md ├── 14.md ├── 15.md ├── 16.md ├── 17.md ├── 18.md ├── 19.md ├── 2.md ├── 20.md ├── 21.md ├── 22.md ├── 23.md ├── 24.md ├── 25.md ├── 26.md ├── 27.md ├── 28.md ├── 29.md ├── 3.md ├── 30.md ├── 31.md ├── 32.md ├── 33.md ├── 34.md ├── 35.md ├── 36.md ├── 37.md ├── 38.md ├── 39.md ├── 4.md ├── 40.md ├── 41.md ├── 42.md ├── 43.md ├── 44.md ├── 45.md ├── 46.md ├── 47.md ├── 48.md ├── 49.md ├── 5.md ├── 50.md ├── 51.md ├── 52.md ├── 53.md ├── 54.md ├── 55.md ├── 6.md ├── 7.md ├── 8.md └── 9.md /.gitignore: -------------------------------------------------------------------------------- 1 | # Created by https://www.gitignore.io 2 | 3 | ### OSX ### 4 | .DS_Store 5 | .AppleDouble 6 | .LSOverride 7 | 8 | # Icon must end with two \r 9 | Icon 10 | 11 | # Thumbnails 12 | ._* 13 | 14 | # Files that might appear in the root of a volume 15 | .DocumentRevisions-V100 16 | .fseventsd 17 | .Spotlight-V100 18 | .TemporaryItems 19 | .Trashes 20 | .VolumeIcon.icns 21 | 22 | # Directories potentially created on remote AFP share 23 | .AppleDB 24 | .AppleDesktop 25 | Network Trash Folder 26 | Temporary Items 27 | .apdisk 28 | 29 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # iOSWeekly 2 | 3 | iOS Weekly issue for InfoQ CN. 4 | 5 | 首发在 InfoQ 中文网 [iOS 开发周报](http://www.infoq.com/cn/mobile-weekly)专栏,文章版权属于 InfoQ 所有。这个 repo 仅只是对这系列文章的整理和汇总。 6 | -------------------------------------------------------------------------------- /article/1.md: -------------------------------------------------------------------------------- 1 | # WWDC 15看点汇总 - iOS移动开发周报 2 | 3 | 标签(空格分隔): 移动 移动开发 iOS 移动开发技术周报 WWDC 4 | 5 | 摘要:距离今年的 WWDC 只有不到两周的时间了。WWDC 15上新的iOS和OSX系统肯定是没跑儿了,另外新的音乐流服务和电视服务呼声也很高。最后相信关于WatchKit的深入介绍和改进也会是本届大会的看点。 6 | 7 | --- 8 | 9 | ##公告 10 | 11 | 很遗憾的通知大家,由于个人原因,唐巧将不再负责撰写本站的 iOS 移动开发周报。从本期开始,iOS移动开发周报由王巍([@onevcat](http://weibo.com/u/2210132365))负责撰写,欢迎在微博上@他提供线索。 12 | 13 | 王巍是资深的一线iOS开发者,毕业于清华大学,目前旅居于日本。拥有丰富的 Cocoa 和 Objective-C 开发经验,另外他也活跃于使用 C# 的 Unity3D 游戏开发界。他还是翻译项目 [objc 中国](http://objccn.io/)的组织者和管理者,为中国的 Objective-C 社区的发展做出了贡献。同时,他也很喜欢为开源社区贡献代码,代表作品有 Xcode 插件 [VVDocumenter](https://github.com/onevcat/VVDocumenter-Xcode) 和Web图像缓存库 [Kingfisher](https://github.com/onevcat/Kingfisher)。另外,他还是 Swift 进阶书籍《Swifter:100 个 Swift 开发必备 Tip》的作者。 14 | 15 | ## 新闻 16 | 17 | 1. [WWDC 15 看点汇总](http://www.macrumors.com/roundup/wwdc/):距离今年的 WWDC 只有不到两周的时间了。如果你很幸运地拿到了门票的话,提醒一下现在已经需要办理签证和预定住宿了。WWDC 15 上[新的 iOS 和 OSX 系统](https://github.com/WebKit/webkit/blob/3f05ab43e61377874819cdc78840db426f97ae28/Source/WTF/wtf/Platform.h#L548)肯定是没跑儿了,另外新的音乐流服务和电视服务呼声也很高。最后相信关于 WatchKit 的深入介绍和改进也会是本届大会的看点。另外,我们还给首次参加 WWDC 的朋友们准备了一份[出行攻略](http://www.glimsoft.com/04/24/complete-guide-for-wwdc-newcomers-2014-edition/)。 18 | 19 | 2. [Apple 更新了 15 寸 MacBook Pro](http://www.apple.com/cn/macbook-pro/) :现在这款设备也配置了 Force Touch 触控板。另外,5K 的 iMac 价格也进行了下调,想要升级设备的朋友不妨关注一下。 20 | 21 | ## 教程 22 | 23 | 1. [《ObjC 中国 - 音频》](http://objccn.io/issue-24/):这个月 objc.io 给我们带来的是关于 iOS 上音频处理的一些技术。想要做出有意思和高质量的 app,免不了与视频或者音频方面打交道。这一期话题从音频处理的基本思路开始一直衍生到了 iOS 中的 API 介绍,可以作为音频信号处理的入门。 24 | 25 | 2. [《面向轨道编程 - Swift 中的异常处理》](http://blog.callmewhy.com/2015/04/20/error-handling-in-swift/):得益于 Swift 的 enum 可以携带数据的特性,在 iOS 开发中对错误的处理可以用一种新的思路来进行,作者通过形象的例子阐述了这种思路。 26 | 27 | 3. [《project.pbxproj,最熟悉的”陌生人”》](http://www.olinone.com/?p=215):简单介绍了每个工程都会有的 `pbxproj` 文件的基本结构。其实我们也可以使用像是 [Xcodeproj](https://github.com/CocoaPods/Xcodeproj) 这样的项目来按需求更改工程文件,Xcodeproj 同时也是 CocoaPods 的核心组件。 28 | 29 | 4. [《A FIRST LOOK AT REACTIVECOCOA 3.0》](http://blog.scottlogic.com/2015/04/24/first-look-reactive-cocoa-3.html):ReactiveCocoa 是 iOS 开发中函数式和响应式编程的一个解决方案。还在 beta 中的 3.0 版本加入了对 Swift 的支持。作者在这篇文章中带领大家初步概览了 ReactiveCocoa Swift 版本的基本 API 和思想。 30 | 31 | 5. [《深入理解RunLoop》](http://blog.ibireme.com/2015/05/18/runloop/):iOS 开发中对 Runloop 和 Thread 的概念的理解和使用往往是区分开发者层次的重要部分。这篇文章中从基础开始详细介绍了 Runloop 的种种,很值得学习。 32 | 33 | 6. [《移动IM开发那些事》](http://xiangwangfeng.com/2015/05/20/移动IM开发那些事/):为 iOS 开发一个 IM app 从来都不是一件容易的事。作者介绍了一些自己在开发 IM SDK 的时候面临的问题和选择。 34 | 35 | ## 开源项目 36 | 37 | 1. [DeepLinkKit](https://github.com/usebutton/DeepLinkKit):如果你的 app 要处理很复杂的 URL Scheme 的话,这个项目可能会帮你减轻很多负担。它为 app 提供一个很方便的 router,可以让你轻松地通过 URL Scheme 让你能调用不同的逻辑。另外,它还能和 [AppLinks](http://applinks.org) 协同工作。 38 | 39 | 2. [SwiftLint](https://github.com/realm/SwiftLint):Realm 开源的一个 Swift 的静态分析工具,可以帮你找出你的 Swift 源代码中的隐患。 40 | 41 | 3. [Bond](https://github.com/SwiftBond/Bond):一个 Swift 的基于观察者模式的做 binding 的框架。可以方便地将 model 和 view 进行绑定。不过鉴于性能考虑,Apple 一直没有将 OS X 的 Cocoa Binding 移植到 iOS 开发中来,所以第三方的解决方案是否能够实用还需要时间的检验。 42 | 43 | 4. [CocoaConferences](https://github.com/Lascorbe/CocoaConferences):一个近期已经结束以及将要发生的 Cocoa 开发会议的列表。里面有很多很有意思的会议视频或者 keynote,可以作为开阔眼界和深造学习的资料。 44 | 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /article/10.md: -------------------------------------------------------------------------------- 1 | # Swift 2.0 中字符串设计的背后思想 - iOS移动开发周报 2 | 3 | 标签:iOS Mac 移动 移动开发技术周报 4 | 5 | 摘要:Swift 的创造者 Chris Lattner 在官方博客撰文为我们讲解了 Swift 2.0 中 String 的变动和思想;Apple 第三财季财报出炉,大中华区利润暴涨 6 | 7 | --- 8 | 9 | ## 新闻 10 | 11 | 1. [Apple 公布第三财季公报](https://www.apple.com/pr/library/2015/07/21Apple-Reports-Record-Third-Quarter-Results.html):iPhone 的销量持续增长,在 2015 年第三财季,Apple 共售出了 4750 万部 iPhone 手机。在 Apple Watch,Mac 和 App Store 的协力下,本季度 Apple 同比完成了 33% 的利润增长,相较去年同期的增长率而言稳中有升。但是一个很明显的现象是 iPad 的销售并不如人意,这大概是因为大屏 iPhone 面世所造成的手机和 iPad mini 使用情景上有一些重叠的结果。值得一提的是,除了美国本土外,全球市场的销售利润占了 Apple 本财季 64% 的额度,其中在大中华区的利润增长率更是达到了惊人的 112%,已经成为 Apple 增长的最主要驱动力。 12 | 13 | 2. [iOS 9 和 OSX EI Capitan Public Beta 第二版发布](https://beta.apple.com/sp/betaprogram/):从去年开始 Apple 就开放了所谓的 public beta,允许一般用户使用和帮助测试最新的 beta 软件。相比于 developer beta,public beta 的测试版本更加稳定,之后也可以直接升级到正式版本。喜欢尝鲜但是又不需要为新版 OSX 系统做开发的朋友可以尝试一下。 14 | 15 | ## 教程 16 | 17 | 1. [《Strings in Swift 2》](https://developer.apple.com/swift/blog/?id=30):一篇来自官方的 Swift 博客,为我们讲述了新版本中 `String` 类型的设计思想的变化理由。对字符串的处理在各个语言中都是有很多细节需要注意的。在 Objective-C 里由于一些历史原因,`NSString` 其实是有很多不足的。Swift 1 中的 `String` 可以说是真正有机会抛开原来的历史包袱,而现在借着 Swift 2 中 protocol extension 的引入,`String` 也有了更好的实现方式。相信通过阅读这篇文章你能对字符串有更好地理解。 18 | 19 | 2. [《后台定位上传的代码实践》](http://adad184.com/2015/07/22/how-to-deal-with-background-location-update/):这篇文章为我们讲述了一些在后台定位用户位置以及上传位置信息的一些实践。文章总结了和比较了几种可能的实现方式和对应的 API 使用方法,虽然这个需求在一些基于位置推荐的 app 中是挺常见的,但是其实现在还并没有非常稳定和可靠的方法来做这件事情,测试和检证也相对比较困难,希望这篇文章能够为你在实现类似功能时提供一些思路。 20 | 21 | 3. [《Changes to the Swift standard library in 2.0 betas 2..<5》](http://airspeedvelocity.net/2015/07/23/changes-to-the-swift-standard-library-in-2-0-betas-2-5/#fnref-39939-gotcha):文章总结了 Swift 2.0 从 beta 2 到 5 的所有改动。虽然在 API 层面上可能看不出来,WWDC 上也并没有提及,但是很多语言的实现细节都发生了改变。很多内部类型的命名发生了改变,如果你有心仔细研究的话,会发现 Swift 语言设计上的一些考量。另外,因为 Swift 即将开源,如果你有心想读一读 Swift 的源码的话,也应该尽快熟悉这些思想和内部的类型,应该会对理解 Swift 非常有帮助。 22 | 23 | ## 开源项目 24 | 25 | 1. [RazzleDazzle](https://github.com/IFTTT/RazzleDazzle):如果你用过 IFTTT 的 app 的话,应该会注意到它们的 app 的初始引导页面制作非常精美。之前 IFTTT 开源过一个 Objective-C 的基于帧动画的 scroll view 的框架 [JazzHands](https://github.com/IFTTT/JazzHands),这次的 RazzleDazzle 是由 JazzHands 为基础使用 Swift 改写的项目。相比于 JazzHands,这个框架的接口更易于理解和使用,我们可以通过更多的行为描述而非过程描述来构建漂亮的 scroll view 动画。 26 | 27 | 2. [jot](https://github.com/IFTTT/jot):IFTTT 最近开源的另一个质量很高的项目。使用触屏随意绘画并且使画出的曲线平滑是一件很有讲究的事情,虽然看上去不难,但是一旦你实际动手做的话就会知道其中暗藏玄机。这个框架为我们提供了一个成熟的触屏绘画和操作内容的解决方案,非常适合用来制作一些像图片标注这样的 app。 28 | 29 | 3. [ResponseDetective](https://github.com/netguru/ResponseDetective):app 开发中难免会与网络请求打交道,在调试 app 的网络部分时,我们往往会使用一些工具来截取发出的请求和收到的响应的内容。像是 [Charles](http://www.charlesproxy.com) 或是 [Paw](https://luckymarmot.com/paw) 这样的 Mac app 就是这类工具的代表。而现在 ResponseDetective 采用 30 | 31 | 4. [SignalKit](https://github.com/yankodimitrov/SignalKit):一个 Swift 的 binding 框架,例如可以将 model 类型的属性绑定给 UI 元素,或者将一个按钮的点击事件绑定到一段代码上。通过这种对数据流或者事件流的监测和绑定,你可以用更为描述性的语言来书写代码,这会使代码逻辑更清晰,代码本身更简洁。框架的思想类似于 ReactiveCocoa,但是显然要轻量级得多。如果你想开始尝试一下信号驱动的响应式编程,又不太确定自己是否能够驾驭 ReactiveCocoa 的话,这个框架会是你入门的好选择。 32 | -------------------------------------------------------------------------------- /article/11.md: -------------------------------------------------------------------------------- 1 | # 新款 Apple TV 和 SDK 可能在 9 月发布 - iOS移动开发周报 2 | 3 | 标签:iOS Mac 移动 移动开发技术周报 4 | 5 | 摘要:新款 Apple TV 和 SDK 可能在 9 月发布;Pinterest 开源高效的图片下载和缓存框架 6 | 7 | --- 8 | 9 | ## 新闻 10 | 11 | 1. [新款 Apple TV 可能在 9 月发布?](http://9to5mac.com/2015/07/30/apple-tv-september-unveil/):虽然在国内可能用处比不上其他形形色色的更符合中国特色的电视盒子,但是作为这一类产品的始祖之一,Apple TV 在国外市场一直还是比较受欢迎的。Apple 可能在 9 月推出新款的 Apple TV,与以往不同,传言本次的产品将搭载 A8 处理器,一个类似触摸板的遥控器,以及完整的开发 API 和 App Store 支持。这是不是意味着它会搭载一个类似 iOS 的系统,让我们的 app 或者游戏能在电视上运行?如果成真的话,这将会是一个对现有生态的巨大改变,让我们拭目以待。 12 | 13 | ## 教程 14 | 15 | 1. [《处理键盘通知》](https://github.com/nixzhu/dev-blog/blob/master/2015-07-27-keyboard-man.md):在 iOS 8 中引入第三方键盘扩展后,键盘相关事件的通知经常会出现问题。作者在本文中简单分析了这个现象出现的规律。另外作者也给出了一种解决方案,并将它开源发布在了[这里](https://github.com/nixzhu/KeyboardMan)。 16 | 17 | 2. [《Dynamic Swift》](http://owensd.io/2015/07/22/dynamic-swift.html):在 Xcode 7 beta 4 中,久违的 `performSelector` 又回到了 Swift 中。这篇文章简单说明了如何在 Swift 中使用 `performSelector` 并获取返回的结果。 18 | 19 | 3. [《AsyncDisplayKit Tutorial: Node Hierarchies》](http://www.raywenderlich.com/107310/asyncdisplaykit-tutorial-node-hierarchies):`AsyncDisplayKit` 是 Facebook 开源一套 UI 渲染框架。不同于 UIKit,如果你使用这套框架的话,可以在一个 View 和 Layer 的异步抽象层中执行 UI 操作,这可以让你的 UI 显得更加平滑。这篇教程结合一个实际的例子讲解了如何配置一个基于 AsyncDisplayKit 的项目,以及使用它来加速我们的 UI 渲染。 20 | 21 | 4. [《如何轻松实现iOS9多任务管理器效果(iCarousel高级教程)》](http://adad184.com/2015/08/01/advanced-icarousel-tutorial-copycat-of-ios9-task-tray/):文章带领大家实现了一个类似 iOS 9 中 app switcher 的动画效果。虽然只是用 Core Animation 的相关内容也是可以实现类似效果的,但是作者选用了 iCarousel 这个特性丰富的强大动画库,这节省了非常多的时间和代码量。对这个动画框架感兴趣的朋友不妨参照示例代码阅读本文,相信可以收获很多使用 iCarousel 和制作漂亮动画的心得技巧。 22 | 23 | ## 开源项目 24 | 25 | 1. [NVActivityIndicatorView](https://github.com/ninjaprox/NVActivityIndicatorView):一系列漂亮的 loading 动画。自定义的 loading 动画经常被用在网页前端开发中,如果你厌倦了系统提供的 UIActivityIndicatorView 的默认样式,想要在 app 中添加一个个性化的元素的话,这个框架会是一个不错的选择。 26 | 27 | 2. [PINRemoteImage](https://github.com/pinterest/PINRemoteImage):Pinterest 作为图片社交 app 的始祖之一,每天要处理千万计的图片,它们在图片下载和显示方面的能力自然也是毋庸置疑的。最近 Pinterest 开源了一个 iOS 下的图片下载和缓存的框架。PINRemoteImage 除了常规的异步下载和缓存之外,还可以支持像是 WepP 或者 gif 这样的图片。另外,这个框架还提供对 JPG 图片的逐步下载,即可以迅速显示部分或者模糊的图片,在过程中等待下载的完成,最后显示完整图片。这在增强用户体验方面会十分有用。 28 | 29 | 3. [GuillotineMenu.swift](https://github.com/Yalantis/GuillotineMenu):一个对 [Dribbble](https://dribbble.com/shots/2018249-Side-Topbar-Animation) 上这个效果的 swift 实现。菜单将从上方以很漂亮的物理效果扇形进入画面,可以说是一种很新颖的菜单交互方式。实现的话也并不困难,使用自定义的 Transition Animation 就可以实现,作者也在自己的[博客](https://yalantis.com/blog/how-we-created-guillotine-menu-animation/)上说明了实现思路。如果你想提高自己在 view controller 转场方面的能力的话,其实这个效果也特别适合作为练习。 30 | 31 | 4. [R.swift](https://github.com/mac-cain13/R.swift):如果你熟悉 Android 开发,你可能知道在 Android 中有一个 [R 类](http://developer.android.com/reference/android/R.html),你可以通过 R 来安全地获取到应用包中的各种资源。而在 iOS 开发中,我们往往需要通过指定资源的名字来获取一个资源 (例如 `UIImage` 的 `imageWithName:`)。R.swift 在 iOS 开发中实现了一个类似 Android R class 的功能,使用这个框架,你可以用更安全的方式来获取资源。值得一提的是这个库对资源的检查都是在编译时完成的,本身并不会进入到你的项目中去,也不会对 app 的性能产生影响。 32 | -------------------------------------------------------------------------------- /article/12.md: -------------------------------------------------------------------------------- 1 | # 微软开源 WinObjC,用 Objective-C 开发 Windows app - iOS移动开发周报 2 | 3 | 标签:iOS Mac 移动 移动开发技术周报 4 | 5 | 摘要:微软开源 WinObjC 项目,可以使用 Objective-C 开发 Windows app 6 | 7 | --- 8 | 9 | ## 新闻 10 | 11 | 1. [微软开源 WinObjC](https://github.com/Microsoft/WinObjC):本周微软开源了他们 Windows Bridges 计划中的重要一环 - Windows Bridges iOS - 中的关键内容。iOS 开发者们现在可以使用熟悉的 Objective-C 语言和微软全盘重新实现的 Cocoa 框架来在 Windows 平台上开发 app。你甚至可以直接把原来的 Xcode 项目导入到 Visual Studio 中经过调整运行,来构建一个 Windows app。这是继 Windows Mobile 中内嵌 Android 后微软为了拯救自家移动平台的又一努力,但是开发者们会不会有所转变还有待观察。 12 | 13 | 2. [Apple 官网改版,商店不再使用独立二级域名](http://www.apple.com):最近 Apple 将原来的 store.apple.com 的停用,而将商店和购买的选项合并到了产品介绍的页面上。之前的设计其实被诟病已久,经常会有客户无法找到购买按钮。而现在用户能在同一个站点上了解产品特性并很方便地进行购买了,在设计上可以说是巨大的进步。 14 | 15 | ## 教程 16 | 17 | 1. [WWDC15 Session笔记 - 30 分钟开发一个简单的 watchOS 2 app](http://onevcat.com/2015/08/watchos2/):Apple Watch 和 watchOS 第一代产品只允许用户在 iPhone 设备上进行计算,然后将结果传输到手表上进行显示。在这个框架下,手表充当的功能在很大程度上只是手机的另一块小一些的显示器。而在 watchOS 2 中,Apple 开放了在手表端直接进行计算的能力,一些之前无法完成的 app 现在也可以进行构建了。这篇文章通过一个很简单的天气 app 的例子,讲解了 watchOS 2 中新引入的一些特性 (如 complications 和 WatchConnectivity) 的使用方法。 18 | 19 | 2. [Using Cocoapods with watchOS 2](https://medium.com/@JTEhlert/using-cocoapods-with-watchos-2-723b92eae04f):watchOS 2 的依赖库现在也随着 watch app 一起转移到了手表上,这样一来,之前直接使用 CocoaPods 为 watch extension 设置依赖的方法也失效了。这篇文章说明了如何在 podspec 中添加 watchOS 2 的支持,以及在使用时应该如何更改 Podfile 以支持 watchOS 2。 20 | 21 | 3. [Advanced NSOperations](http://limboy.me/ios/2015/08/08/advanced-nsoperations.html):这篇文章从 `NSOperation` 和 `NSOperationQueue` 的基础入手,阐述了基于 Operation 的思路来构建一个 app 的基本方法,思路非常新颖。这种架构方法的基本思想是将复杂的任务拆分成粒度更细的 Operation,然后再进行组装。当然,在实际操作中可能会遇到不少挑战和对最佳实践的探索,但是作为加深对 `NSOperation` 的理解的话,这篇文章是绝对值得一读的。 22 | 23 | 4. [How Not to Crash](http://inessential.com/hownottocrash):作者是 Omni 系列软件的开发者之一。这个系列是作者今年开始的专题,列举和分析了一些在 iOS/OSX 开发中常见的由开发者引入的导致 app 崩溃的错误代码。其中每篇文章都结合了作者自己丰富的软件架构经验和感悟,不论对于新人还是已经富有经验的 iOS 开发者,逐条对照并反思自己在开发中的做法,能有效避免在今后引入这些潜在的问题。这个系列依然在继续,可以持续关注。 24 | 25 | ## 开源项目 26 | 27 | 1. [WinObjC](https://github.com/Microsoft/WinObjC):虽然这个项目不知道能不能改善 Windows Phone 的现状,但是它还是本周最值一提的开源项目。虽然这个项目还处于非常前期,虽然我们可能在之后一段时间里并不使用它进行 Windows app 的开发,但项目里的一些内容还是很值得玩味的。微软在这个项目中完整地重新实现了包括 UIKit 在内的一些 Cocoa 框架,目测应该是在对 Apple 的框架进行逆向后的改写。如果你想了解一下 Cocoa 内部的实现,也许闲暇的时候看看这个项目的源码会是很有意思的选择。 28 | 29 | 2. [spacetime](https://github.com/facebookexperimental/spacetime):Facebook 开源的一个实验性质的库,它可以用来实时地对 layer 进行变形操作。你可以将这个库想象为在 `CALayer` 上添加了一些网格,通过操纵这些网格的形状和数量来让一个 layer 呈现不同的形状,比如圆柱形或者锥形的 view。这个框架使用了 `CAReplicatorLayer` 以及 time hierarchy 来进行实现,在一般开发中这两者都是鲜为人知的,阅读看看是如何实现的会很有意思。 30 | 31 | ## 工具 32 | 33 | 1. [Pixel Winch](http://www.ricciadams.com/projects/pixel-winch):一款可以在截图上测量各个元素之间距离的 OSX app,开发者可以截取模拟器或者真机上的图片来确定 UI 元素的位置是否满足设计需求,设计师也可以用它很方便地来进行一些标注工作。 34 | -------------------------------------------------------------------------------- /article/13.md: -------------------------------------------------------------------------------- 1 | # iOS开发周报:iOS 8.4.1 发布,iOS 8 时代谢幕 2 | 3 | 标签:iOS Mac 移动 移动开发技术周报 4 | 5 | 摘要:本周 Apple 发布了 iOS 8 的最后一个补丁,iOS 8 在这一年内取得了很好的成绩,让我们开始期待 iOS 9 的表现吧。 6 | 7 | --- 8 | 9 | ## 新闻 10 | 11 | 1. [Apple 发布 iOS 8.4.1](https://support.apple.com/en-us/HT205030):本周 Apple 发布了新的系统补丁,主要修正了一些 Apple Music 的问题,以及修复了一些安全隐患。如果不出意外的话,这将是 iOS 8 时代的最后一个补丁。在这一年内,Apple 在 iPhone 上的销售取得了巨大的成功,大屏幕的 iPhone 再一次激活了市场,也成功地将一些原来的大屏安卓用户转化为了 iOS 用户。在系统方面,现在已经有 [85% 的设备](https://developer.apple.com/support/app-store/)在运行 iOS 8,可以说 iOS 8 取得了巨大的成功。作为继任者的 iOS 9 即将在秋天和新一代 iPhone 一起发布,让我们开始期待新系统的特性给我们的开发和生活带来的改变吧。 12 | 13 | 2. [自动驾驶汽车?Apple Car?](http://www.theguardian.com/technology/2015/aug/14/apple-self-driving-car-project-titan-sooner-than-expected):有资料显示,Apple 正在湾区和硅谷测试一款无人驾驶的汽车,这让人不禁浮想联翩,莫非这会是 Apple Car 或者 iCar 的原型?早有传言说 Apple 有意进军汽车行业,但是到现在为止,我们只看到了 Apple 和汽车厂商合作推出的 CarPlay - 一个能让你配合你的汽车使用 iPhone 的桥接方案。在 Google,特斯拉,以及一些其他科技厂商都在不断尝试在汽车这一传统领域做些什么的时候,我们也有理由相信 Apple 可能也会有所动作。如果这属实的话,我们至少接下来应该还能听到不少关于 Apple Car 的消息,让我们拭目以待吧。 14 | 15 | ## 教程 16 | 17 | 1. [Cloud​Kit](http://nshipster.cn/cloudkit/):NSHipster 的一篇文章的中文译文。如果想自己独立制作应用,有时可能需要写一些后端代码。即使对于能够胜任这项工作的移动开发者而言,这不仅意味着要写代码,更多的是长期维护。相比于直接自己书写后端代码,我们可能更倾向于选择一些现有的服务,[Parse](https://parse.com) 和 [LeanCloud](http://leancloud.cn) 就是不错的选择。而从 iOS 8 开始我们现在可以使用 Cloud Kit 框架来作为 app 的后台支持。这篇文章讲述了一些 CloudKit 的基础知识和使用,可以带领你入门这个框架。 18 | 19 | 2. [Don't let your UIViewController think for itself](http://blog.ios-developers.io/dont-let-your-uiviewcontroller-think-for-itself/):为 ViewController 瘦身一直是 iOS 开发中的一个热门话题,可以毫不夸张地说,看一个项目水平如何,是否具有优良的可维护性,一个重要的指标就是看项目中 View Controller 的复杂程度和代码行数。如果我们能有效地减少 View Controller 的复杂度,就意味着 app 的实现逻辑会更加清晰,项目可维护性也会更好。作者通过一系列文章介绍了良好的 View Controller 的设计方法,这是其中的一篇,主要基于 MVVM 的模式对 View Controller 的实现和新功能的追加进行了一些讨论。 20 | 21 | 3. [Rich Text, Core Text](https://github.com/rnapier/richtext-coretext/blob/master/Rich%20Text%2C%20Core%20Text.pdf):在 iOS 上,我们可以使用 Core Text 来处理富文本和排版的需求,但是这个框架并不是非常直观,而且有不少小技巧和需要注意的地方。这篇文章介绍了一些 Core Data 的最佳实践和注意事项,如果你在和 Core Text 打交道的话,推荐阅读。 22 | 23 | ## 开源项目 24 | 25 | 1. [SIFloatingCollection](https://github.com/ProudOfZiggy/SIFloatingCollection_Swift):一个很有意思的项目,它尝试仿照实现了 Apple Music 里风格选择的界面。相比于使用 `UIKit`,这个项目可以说是另辟蹊径,使用了 `SpriteKit` 来进行制作和模拟,因此我们也可以很轻易地使用我们自己的形状来重用这个库,以满足设计要求。虽然不能说这个实现十全十美,但是这确实给我们在实现一些动画效果时提供了新的思路,除了 `UIKit` 和 `UIDynamic` 以外,我们还可以直接用像是 `SpriteKit` 和 `box2d` 这样的东西来进行创作。 26 | 27 | 2. [Parse-SDK-iOS-OSX](https://github.com/ParsePlatform/Parse-SDK-iOS-OSX):著名的 BaaS 公司 Parse 最近开源了它们的 iOS/OSX SDK。Parse 的服务虽然在国内可能访问速度不是很理想,但是它们在服务的稳定性和 SDK 质量上一直有非常优异的表现。此次开源的 SDK 对于日常工作是 SDK 开发的开发者来说,是一个难得的学习机会。Parse 的存取操作涉及到很多多线程的问题,从 Parse SDK 的源代码中可以看出,这个 SDK 的开发者对 iOS 开发多线程有着非常深厚的理解和功底,让人叹服。我个人推荐对此感兴趣的朋友可以尝试从阅读 `internal` 文件夹下的两个 `EventuallyQueue` 文件开始着手,研究下 Parse 的底层多线程处理思路。 28 | 29 | 3. [Loggerithm](https://github.com/honghaoz/Loggerithm):一个在 Swift 中更好地输出 log 的工具。可能并不是所有人都知道,我们在 Swift 中最常用的 `println` 只会在 Debug 下进行输出,如果我们希望在 Release 版本中留下些什么有用的信息 (比如之后进行调试或确定 bug 时可能会需要) 的话,我们还是只能使用 `NSLog` 才能在系统 log 文件中进行写入。使用这个项目提供的 API 进行输出的话,可以让我们能无缝地在 Debug 和 Release 时使用合适的输出方式;另外,这个框架提供分级输出,配合 [`XcodeColors`](https://github.com/robbiehanson/XcodeColors) 的话还可以直接在控制台将不同级别的输出用不同的颜色标记出来,看起来十分方便直观。 30 | 31 | 4. [Koloda](https://github.com/Yalantis/Koloda):Swift 实现的很漂亮的卡片界面和动画效果,对于一些基于卡片的 app 来说,可能是非常好的界面参考。框架的开发者选择了和 `UITableView` 以及 `UICollectionView` 类似的 API,因此使用起来也非常方便。 32 | -------------------------------------------------------------------------------- /article/14.md: -------------------------------------------------------------------------------- 1 | # iOS开发周报:iPhone 6s 和 iPad Pro 最新情报 2 | 3 | 标签:iOS Mac 移动 移动开发技术周报 4 | 5 | 摘要:iPhone 6s 发布日期临近,已经有运营商准备在 9 月 18 日发售新 iPhone,iPad Pro 也将进入大规模生产期。 6 | 7 | --- 8 | 9 | ## 新闻 10 | 11 | 1. [下一代 iPhone 也许将于 9 月 18 日开始销售](http://www.macworld.co.uk/news/iphone/iphone-7-6s-plus-rumours-release-launch-date-new-features-images-bendgate-pink-3530504/#launch):从德国和日本的运营商透露的消息来看,新的 iPhone 也许将于下个月 18 日正式发售。一般来说,新品发布会都会在发售之前至少一周进行,同时 AppStore 将会开放接收针对新系统的 app 提交。也就是说,如果你的 app 需要适配 iOS 9 的话,基本留给你进行调试的时间就只剩两周左右了,加油吧! 12 | 13 | 2. [iPad Pro 即将进入量产](http://www.digitimes.com/news/a20150819PD209.html):大屏的 iPad 传言已久,有情报显示 Sharp 将会成为这块分辨率高达 2732 x 2048 的 12.9-inch 屏幕的供应厂商。如果 Apple 计划遵循以前的发布周期,在今年第四季度发布新的 iPad 的话,9 月和 10 月就将是这款 iPad 开始批量生产开始的时间了。届时应该会有一些更多的情报释出。 14 | 15 | ## 教程 16 | 17 | 1. [《详解CALayer 和 UIView的区别和联系》](http://www.jianshu.com/p/079e5cf0f014):作者对 `UIView` 和 `CALayer` 的关系和区别进行了一些整理。在 iOS 开发中,`UIView` 和 `CALayer` 两者有不少相似和共通的地方,但是本质上它们承担的职责以及在 app 中的作用是完全不同的。这个知识点也经常成为 iOS 开发职位面试时的题目。作者在这篇文章中从四个方面阐述了自己对两者的理解,可以参考。 18 | 19 | 2. [《谁让APP工程师产生了泡沫?》](http://blog.jobbole.com/89810/):虽然这并不是一篇技术教程,但是却值得我们这些 iOS 开发者参看。移动互联网已经火热了多年,而其中存在一些泡沫也是人人心知肚明的。如何在这个风口中掌握自己的方向,磨练自己的能力,是值得每个开发者思考的问题。如果当这阵风停下的时候,你会是继续翱翔的雄鹰,没有了风口的小猪,这一切其实是由你每天日常工作和学习的态度所决定的。 20 | 21 | 3. [UICollectionView Custom Layout Tutorial: A Spinning Wheel](http://www.raywenderlich.com/107687/uicollectionview-custom-layout-tutorial-spinning-wheel):使用 Collection View 进行布局的灵活性和便利程度是有目共睹的,Ray Wenderlich 的这篇教程带领我们用 Collection View 实现了一个轮盘式的视图。如果你有 Collection View 的使用经验的话,我建议你在跟随这篇教程动手实践之前,可以先自己思考下如何实现。然后对照例程的实现,相信这样这样能有更多的心得和体会。 22 | 23 | ## 开源项目 24 | 25 | 1. [GitUp](https://github.com/git-up/GitUp):GitUp 是一个图形化的 git 客户端,它以 branch graph 的方式呈现项目。借助设计良好简洁的图形界面,使用 GitUp 可以快速地完成大部分日常的 git 操作。最近他们开源了自己的客户端,并且同时公开了 GitUpKit 这个实现这些 git 操作的框架,这意味着个人开发者可以在这个框架的基础上构建自己的 git 图形应用。如果你对此有兴趣,那么这个 app 是你绝对不能错过的。 26 | 27 | 2. [SafariAutoLoginTest](https://github.com/mackuba/SafariAutoLoginTest):在 iOS 9 中 Apple 加入了一种全新的在 app 中浏览网页的方式,那就是使用 `SFSafariViewController`。通过使用这个类,我们可以巧妙地设计 URL scheme 跳转,读取设备 Safari 中存储的 cookie 信息,来实现例如用户登陆过你的网站后,在你的 app 里自动登陆这样的功能。这个技术将会彻底改变 web app 和 native app 的可能的交互方式,非常值得一看。如果你对背后的思想和原理感兴趣的话,还可以参看下[这篇文章](https://library.launchkit.io/how-ios-9-s-safari-view-controller-could-completely-change-your-app-s-onboarding-experience-2bcf2305137f)。 28 | 29 | 3. [ImagePickerSheetController](https://github.com/larcus94/ImagePickerSheetController):一个仿照 iMessage 中选择照片的 ViewController,可以横向滑动在不同的照片中切换,以及扩大查看和选择复数张照片,非常灵活。API 设计和 `UIAlertController` 很类似,因此使用起来也很简单。如果你的 app 中有类似聊天发送图片或者分享图片的需求的话,这个框架会非常方便。 30 | 31 | 4. [SwiftMongoDB](https://github.com/danappelxx/SwiftMongoDB):如果你对服务端比较熟悉的话,可能会听过甚至用过 MongoDB。这个框架可以让你用 Swift 和 MongoDB 进行交互。在 iOS 上去运行一个 MongoDB 的 daemon 显然不太现实,所以暂时这个项目只能在 OSX app 中使用。但是随着 Swift 开源的临近,其实这门语言将会很有希望在 app 制作以外有所作为。如果在服务端能够使用 Swift 进行开发的话,这个项目就会很有意思。Swift 在未来的可能性也值得我们去思考一下这门语言到底还能做些什么。 32 | -------------------------------------------------------------------------------- /article/15.md: -------------------------------------------------------------------------------- 1 | # iOS开发周报:Apple 将于 9 月 9 日召开秋季新品发布会 2 | 3 | 标签:iOS Mac 移动 移动开发技术周报 4 | 5 | 摘要:Apple 将于 9 月 9 日召开秋季新品发布会,公布 iPhone 6s 系列新品。Xcode 7 beta 6 发布,Swift 2 try 语法改进 6 | 7 | --- 8 | 9 | ## 新闻 10 | 11 | 1. [Apple 2015 秋季发布会定于 9 月 9 日召开](http://www.apple.com/apple-events/september-2015/):按照惯例,Apple 会在秋季新品发布会上发布新款的 iPhone,不出意外的话今年将会是 iPhone 6s 以及 iPhone 6s Plus 机型。作为 Apple 彻底迈向大屏时代的作品,iPhone 6 和 6 Plus 在过去的一年中取得了巨大成功。s 系列的新机型在继承外观设计的基础上一般会加入创新性的功能。在 iPhone 5s 时我们得到了 Touch ID,而新一代 s 机型里 Apple 可能会带给我们已经出现在 Mac Book 上的 [Force Touch 技术](https://developer.apple.com/osx/force-touch/)以及相应的 API,作为一种新的交互方式,我们似乎已经可以开始思考能使用 Force Touch 来做些什么了。 12 | 13 | 2. [除了 iPhone,还有 Apple TV](http://www.macrumors.com/2015/08/30/apple-tv-4-october-launch-sub-200-price/):有消息称在 9 月 9 日的发布会上 Apple 会一同宣布新的 Apple TV。Apple 已经与电视节目供应商合作已久,而据称新款 Apple TV 将配置双核 A8 处理器,并可以访问 App Store,以及拥有一套源生的 API。如果这些消息都属实的话,那么对于 Apple 开发者来说会是一个进军客厅市场的好机会。不过如果考虑到国内现在对电视盒子的政策现状和 Apple TV 本身对本地化内容支持还不完善,所以 Apple 想打开国内客厅智能设备的市场仍需时日。 14 | 15 | ## 教程 16 | 17 | 1. [动画框架整理](https://github.com/sxyx2008/awesome-ios-animation):作者整理了几个 iOS 下比较常用的开源动画框架和一些示例。UI 动画在 iOS app 中的重要性不言而喻,它在很大程度上决定用户交互的体验。有时候使用 `UIView` 或者 CA 动画会比较复杂的话,就可以考虑尝试用一些第三方的动画框架来简化工作。这里收录的项目基本都是成熟可靠的第三方框架,即使不会马上用上,也不妨随意看看作为积累,这样在你遇到实际问题时可能可以回想到合适的方案。 18 | 19 | 2. [Reducing FOOMs in the Facebook iOS app](https://code.facebook.com/posts/1146930688654547/reducing-fooms-in-the-facebook-ios-app/):虽然移动设备的配置一直在进步,但是相比于桌面设备来说,它始终是性能受限的平台,最为突出的限制就是内存。Facebook 的这篇文章为我们介绍了一些确认内存耗尽崩溃的方法,以及相应的调试和解决方案。 20 | 21 | 3. [为什么人人都该懂点LLVM](http://geek.csdn.net/news/detail/37785):LLVM 是现在 Apple 开发使用的编译器,对于 iOS 开发者来说,了解一点 LLVM 的基本使用方式和原理会对开发有所帮助 -- 最直接的就是你能明白 Xcode 项目的 Build Setting 中那一堆东西到底都是在做什么,这篇文章介绍了一些 LLVM 的基本工作流程,可以让你对 LLVM 有个大致的了解。 22 | 23 | 4. [Swift Interview Questions and Answers](http://www.raywenderlich.com/110982/swift-interview-questions-answers):一组 Swift 从入门到高级的面试题目及答案,对于 Swift 的必备的基本概念考察还是比较完善的。因为 Swift 语言的特性,有些问题是颇有难度的。另外,想分享一句话给正在或者想要学习 Swift 的开发者:学习一门语言最快的途径就是去使用它,而不是不停看书或者文档。有些朋友会陷入越看书越绝望的情境中,诚然书籍很重要,但是我们学习一门程序语言的目的最终还是去使用它,也只有在实际使用时,才能真正学会这门语言。 24 | 25 | 5. [iOS面试题集锦](https://github.com/ChenYilong/iOSInterviewQuestions):总结了 @我就叫Sunny怎么了 在他的[博文](http://blog.sunnyxx.com/2015/07/04/ios-interview/)中的面试题目,并细心地给出了每个题目的参考答案。可以说如果你能把这些问题都答上个七七八八,可以说明你是具有担任 iOS 开发的高级职位的能力的。 26 | 27 | 6. [Swift学习: 从Objective-C到Swift](https://github.com/100mango/zen/blob/master/Swift学习:从Objective-C到Swift/Swift学习:从Objective-C到Swift.md):文章从比较 Swift 和 Objective-C 的一些差异和某些语法在 Swift 中的改进入手,介绍了一些 Swift 中的基本概念。对于已经掌握 Objective-C 的开发者来说,是一篇不错的快速入门的文章。 28 | 29 | ## 开源项目 30 | 31 | 1. [BonMot](https://github.com/Raizlabs/BonMot):在 Cocoa 里和 `NSAttributedString` 打交道是一件挺痛苦的事儿,因为相应的 API 基本都是基于 `Range` 的,并不很直观。BonMot 框架希望改变这个现状,这个框架为我们提供了一系列方便的方法来方便地生成 `NSAttributedString`。 32 | 33 | 2. [Uther](https://github.com/callmewhy/Uther):一个很简单,但是很完整的 Swift 小项目,实现了收到消息后解析情感并返回对应情感的颜文字、使用动画切换颜文字以及显示并可编辑历史消息这些功能,对于初学者来说,是一个很理想的可以学习的完整项目。作者把其中用到的一些库和思路整理在了[博客](http://blog.callmewhy.com/2015/08/09/how-to-make-uther/)里,可以参考。 34 | 35 | 3. [Just](https://github.com/justhttp/Just):使用起来非常简单的 HTTP 请求库。对于一些轻量级的使用场景,用这个库来做请求可以省掉大量写 request 和解析下载得到的数据的模板代码,十分方便和干净。而框架本身虽然很简单,但是也提供了对于一个常规 HTTP 场景下足够的功能,处理认证或者 cookie 都没有问题,可以说是恰到好处的简单。 36 | -------------------------------------------------------------------------------- /article/16.md: -------------------------------------------------------------------------------- 1 | # iOS开发周报:iPad Pro?9 月 9 日发布会是否会有新惊喜 2 | 3 | 标签:iOS Mac 移动 移动开发技术周报 4 | 5 | 摘要:传闻 9 月 9 日的发布会中可能公布 iPad Pro;开发者应当拥抱变化,尽快适应 Swift 的新时代 6 | 7 | --- 8 | 9 | ## 新闻 10 | 11 | 1. [iPad Pro 和 iPad mini 4 可能于秋季发布会一并公开](http://9to5mac.com/2015/09/02/ipad-pro-sep-9-ipad-mini-4-november/):9to5mac 给我们带来了关于发布会的新消息。据称 Apple 将在 9 月 9 日的发布会上一并将最新的 iPad 系列产品进行公布。这其中包含了传闻已久的大屏 iPad - iPad Pro。这款产品会用到 Force Touch 技术,而开发者们也被期望使用 Force Touch 来完善应用的交互特性。如果属实,那么这款设备很可能会在 11 月份正式上架开卖。所以如果在 9 月 9 日的发布会没有宣布的话,在秋季我们很可能还会迎来另一场 Apple 发布会。实际到底如何,让我们拭目以待吧。 12 | 13 | 2. [Xcode 7 GM 和 Swift 2 即将正式发布](http://www.allenpike.com/2015/moving-swiftly/):按照惯例,在秋季发布会结束后,Xcode 7 的 GM 版本即将公开。开发者们可以使用 GM 版本提交适配最新 iOS 系统的应用。同时,Swift 2 也将随之正式发布。在经过一年的发展后,Swift 语言取得了很大进步以及更多的开发者的支持,而随着 iOS 6 和 7 逐渐退出历史舞台,以及 Swift 即将开源,这门语言的优势将逐渐体现,并且也会随环境而变得相对稳定。拥抱变化,尽快适应 Swift 的新时代,将会是很多开发者在未来几年里所要面临的课题,提早准备相信会是不错的主意。 14 | 15 | ## 教程 16 | 17 | 1. [ReactiveCocoa2 源码浅析](http://nathanli.cn/2015/08/27/reactivecocoa2-源码浅析/):虽然 [Reactive Cocoa 3](https://github.com/ReactiveCocoa/ReactiveCocoa/pull/1382) 已经准备就绪,蓄势待发,但是在稳定地大规模投入产品环境之前,ReactiveCocoa 2 还是在 Cocoa 平台上实践 FRP 的首选框架。这篇文章从解析源码入手,深入地分析了 RAC 各个部件的构成和实现方式。如果你不满足于仅只会使用 RAC,而想要更深入地了解一些背后的机制的话,请一定不要错过这篇文章。 18 | 19 | 2. [图片变形的抗锯齿处理方法](http://adad184.com/2015/08/31/image-rotate-with-antialiasing/):通过给图片增加一个像素的透明边,以此来消除在图像变形或旋转时产生的锯齿。这种做法原理上非常巧妙,而且实施起来也很简单。作者用该方法对比使用 iOS 7 的 `allowsEdgeAntialiasing` 甚至得到了更好的帧率结果。有时候这样的小优化所积累起来的运行速度也会成为影响 app 质量的重要因素。 20 | 21 | 3. [Protocol Oriented Programming in the Real World](http://matthewpalmer.net/blog/2015/08/30/protocol-oriented-programming-in-the-real-world/):面向接口编程是 Swift 2 中引入 protocol extension 后被大家开始广泛重视的一中编程范式。使用面向接口的方法,可以很大程度上保证耦合程度最低,同时也为开发者提供了比继承和类更加灵活的代码组织方式。这篇文章结合一个 Twitter 客户端的实际例子,为我们展示了在日常开发中使用面向接口编程的新思路。 22 | 23 | ## 开源项目 24 | 25 | 1. [APNGKit](https://github.com/onevcat/APNGKit):一个可以在 iOS 上读取和显示 APNG 格式图像的框架。APNG 是 PNG 的一个扩展,它是一种动画图像格式。与现在流行的 GIF 格式相比,APNG 最大的好处是支持 24 bit 颜色以及 8 bit 的透明度,这意味着比 GIF 好更多的动画品质。APNGKit 架构在 libpng 的基础上,来对 APNG 格式进行解析,因此也十分高效。作为利益相关说明,这个框架是笔者的作品。 26 | 27 | 2. [LiquidFloatingActionButton](https://github.com/yoavlt/LiquidFloatingActionButton):水滴特效的按钮菜单。在移动设备上制作带有水滴或者液体特效的动画并不是一件容易的事情。这个框架实现了一套用 layer 动画来模拟水滴效果的引擎,并将其使用到一个菜单展开的效果中,非常漂亮。UI 中有类似需求的话,可以参看一下这个框架的实现。 28 | 29 | 3. [AlamofireImage](https://github.com/Alamofire/AlamofireImage):自从 Mattt “失踪” 以后,[Alamofire](https://github.com/Alamofire/Alamofire) 的维护工作就由 [cnoon](https://github.com/cnoon) 接手,最近 cnoon 发布了一个基于 Alamofire 的图片下载和缓存框架。这个框架不仅可以完成从 URL 下载和显示图片的功能,还提供了一些方便的 API 来处理图片,比如圆角或者使用滤镜等等。如果你正好在使用 Alamofire 进行网络请求,又有一些图片方面的需求的话,使用这个框架是很理想的选择。 30 | 31 | 4. [ActiveLabel.swift](https://github.com/optonaut/ActiveLabel.swift):一个处理标签中 # 符号, @ 符号,以及超链接文本的框架。它可以识别并标注 label 视图中的这些要素,并为它们添加点击事件。你通过监听点击事件即可简单地实现相关的逻辑。这在很多微博类或者文字类的 app 中都是十分常见的功能,可以为这类开发者节约不少时间。 32 | -------------------------------------------------------------------------------- /article/17.md: -------------------------------------------------------------------------------- 1 | # iOS开发周报:Apple 发布会带来革新交互技术,Xcode 7 GM 和 iOS 9 GM 发布 2 | 3 | 标签:iOS Mac 移动 移动开发技术周报 4 | 5 | 摘要:Apple 秋季发布会更新了绝大部分产品线,Xcode 7 GM 和 iOS 9 GM 发布,开发者已经可以开始提交应用。tvOS 平台和 3D Touch 技术成为开发新热点。 6 | 7 | --- 8 | 9 | ## 新闻 10 | 11 | 1. [Apple 发布会,iOS 9 及 tvOS](http://www.apple.com/apple-events/september-2015/):9 月 9 日 Apple 召开了 2015 年的秋季新品发布会,发布会上公布了包括新款 iPhone 在内的一系列新产品,发布会的召开同时也意味着新的 iOS 系统和 Xcode 正式发布的邻近,开发者们现在已经可以使用 GM 版本的 Xcode 提交适配新系统的应用了。在发布会上值得开发者们特别关注的内容还有全新的 tvOS 平台以及 3D Touch 技术,如何利用新平台和新技术打磨自己的应用会是开发者接下来要面临的重要课题。 12 | 13 | 2. [iPhone 6s 和 iPhone 6s Plus 预购开始,网友表示出现多次扣款](http://www.apple.com/cn/shop/buy-iphone/iphone6s):本次 iPhone 6s 系列是继 iPhone 5s 后 Apple 第二次在首发地区中包含中国大陆,这也直接说明了大陆地区的市场对 Apple 的重要程度。但是在预定之前,Apple 的网站无法连接达到数个小时,直到预定时间前一两小时才修复完毕。而在预订开始后,很多朋友出现了付款困难或者被多次重复扣款的情况。看来在不断完善产品体验的同时,Apple 也需要在网上购买体验上多做功课。 14 | 15 | ## 教程 16 | 17 | 1. [tvOS SDK: An iOS Developer’s Initial Impressions](http://www.raywenderlich.com/114313/tvos-initial-impressions):Ray Wenderlich 总是能在第一时间给我们带来一些平易近人的信息。在 tvOS 公布后,他们就发布了一篇关于 tvOS 平台和 API 的第一印象,以及基本的开发方式。虽然现在 Apple TV 在国内的前景还不是很明确,但是因为它的价格优势以及同类产品竞争对手的缺乏,在国外市场上 Apple TV 还是属于非常流行的设备。如果你的应用比较适合国外市场以及在客厅中使用的话,这篇文章将将你引入新平台开发的大门。 18 | 19 | 2. [开源项目:MMPopupView](http://adad184.com/2015/09/08/opensource-mmpopupview/):iOS 系统自带的 Alert 虽然使用很简便,但是有时候功能上无法达到我们的要求。而写一个弹出框虽然看起来并不是什么难事,但是其中还有有一些诀窍和需要注意的地方。这篇文章中作者讲述了如何实现一个可高度自定义的弹出框,实现方式也代表了使用 view 进行弹出的一般思路。 20 | 21 | 3. 数据的秘密 [上](http://blog.devtang.com/blog/2015/09/02/why-we-need-monitor-data/) [下](http://blog.devtang.com/blog/2015/09/03/how-to-monitor-data/):虽然并不直接和技术相关,但是作者为我们讲述了在信息时代数据的重要性。作为开发人员,很可能我们很多时候对运营要求添加的各种统计功能并不在意,但是这些数据的细节却对产品的迭代和决策起着不可忽视的作用。这个系列专题从运用数据的例子入手,为我们揭示了使用数据的意义以及一些具体的作法。了解一些这方面的知识对于我们更好地进行团队合作及决策会大有裨益。 22 | 23 | 4. [Thinking in Swift, Part 1: Saving ponies](http://alisoftware.github.io/swift/2015/09/06/thinking-in-swift-1/):因为 Cocoa Touch 的 API 是共通的,所以很多时候从 Objective-C 新转向 Swift 的开发者会习惯性地按照习惯将 Objective-C 的做法简单粗暴地“翻译”为 Swift。这篇文章以及接下来的系列将会结合例子来对从 Objective-C 到 Swift 的迁移实践进行一些引导。 24 | 25 | 5. [UIKey​Command](http://nshipster.cn/uikeycommand/):iPad Pro 的超大屏幕和外配键盘决定了键盘将会是应用的重要输入手段。在原来的 iOS 开发中对于键盘和快捷键的处理并不是很重要,但是这一状况很可能在今后发生改变。iOS 9 的可发现特性可以说也正是为了配合键盘输入而存在的。`UIKey​Command` 是 iOS 7.0 开始加入的一组处理键盘事件的 API,在 iOS 9 中可能会有不少使用场景,如果你对此不熟悉的话不妨看看这篇文章。 26 | 27 | 6. [Swift-Best-Practices](https://github.com/schwa/Swift-Community-Best-Practices):经过一年多而发展,Swift 社区逐渐总结了一些比较成熟和先进的最佳实践。这篇文章为我们介绍了包括像是命名,单例,常量,类型等等一系列的推荐使用方式。 28 | 29 | ## 开源项目 30 | 31 | 1. [FBSimulatorControl](https://github.com/facebook/FBSimulatorControl):Facebook 发布的一个可以同时运行多个模拟器的辅助框架。在 iOS 应用进行测试时一般每次我们只能选择一种机型进行测试,这使得每次测试前都需要重新将应用打包并安装到不同的测试设备中去。在项目规模变大后,这一部分的工作也会相当耗费时间。这个框架让多个模拟器实例可以同时运行,以节省测试时间。在 Xcode 7 中 Apple 新加入了 UI 测试,我们很可能会有在多种不同设备上进行测试的需求,相信 FBSimulatorControl 能在一定程度上帮助我们应付这种场景。 32 | 33 | 2. [DGRunkeeperSwitch](https://github.com/gontovnik/DGRunkeeperSwitch):很漂亮的带有动画的 segment 控件,可以改善系统原生控件效果比较单调和简陋的不足。控件也提供了很多自定义的选项,可以灵活地满足不同的设计需求。 34 | 35 | 3. [xctool](https://github.com/facebook/xctool):xctool 是 Facebook 推出的用来替代 `xcodebuild` 命令的工具,在各种 CI 和集成服务中被大量使用。xctool 并不是一个新项目,但是最近 Xcode 7 的最后一个 beta 中 xctool 出现了一些问题,这使得大部分依赖这个框架的 CI 服务都不得不转回使用原始的 `xcodebuild`。不过现在这个工具在 Xcode 7 中也获得了修正,如果你还没有使用过 xctool 进行项目构建和自动化测试的话,推荐可以进行一些了解和使用。 36 | 37 | 4. [DFImageManager](https://github.com/kean/DFImageManager):一个非常全面的图片框架,可以负责图片的下载,缓存以及处理等等工作。你不仅可以简单地使用这个框架完成一些日常应用开发时的常见任务,也可以通过依赖注入等方式来自定义框架的行为和功能。框架不仅仅支持常规图片操作,对于一些在 iOS 上并不太常用的图片格式和细节也有相当好的支持。如果你需要一款“一站式”的图片管理框架,那 DFImageManager 绝对是值得关注和考虑的对象。 38 | -------------------------------------------------------------------------------- /article/18.md: -------------------------------------------------------------------------------- 1 | # iOS开发周报:XcodeGhost 事件提醒开发者提高安全意识,新版本 iOS 首周表现良好 2 | 3 | 标签:iOS Mac 移动 移动开发技术周报 4 | 5 | 摘要:XcodeGhost 木马爆发,一系列知名应用被感染;iOS 9 正式发布,前三天适配率已经超过 30%。 6 | 7 | --- 8 | 9 | ## 新闻 10 | 11 | 1. [XcodeGhost 肆虐,iOS 开发者安全意识大危机](http://security.tencent.com/index.php/blog/msg/96):本周最大的新闻应该就是 XcodeGhost 恶意代码事件了。XcodeGhost 的作者通过篡改 Xcode 工具链,并利用国内网络不畅的因素,将植入恶意代码的 Xcode 进行大范围传播。这导致使用被篡改后的 Xcode 进行编译的应用中都会包含上传用户信息和接收第三方服务器响应来进行弹窗的木马。迫于舆论压力,作者在 GitHub 上开源了 [XcodeGhost 的代码](https://github.com/XcodeGhostSource/XcodeGhost),并辩解说只是一次实验。但是从代码中对调试器的防范,上传用户数据时精心选择的密码,以及上传用户信息所使用的具有迷惑性的域名来看,很难让人相信这只是一次没有恶意的个人行为。这次事件造成的损失和后续发展会如何,我们还有待观察,不过对于 iOS 开发从业者来说,我们确实应该反思,从这次事件中吸取教训,并树立良好的安全意识。 12 | 13 | 2. [iOS 9 发布,3 天安装率超过 30%](https://mixpanel.com/trends/#report/ios_9/):iOS 9 于本周正式发布。根据 Mixpanel 的数字,在 iOS 9 发布 24 小时内,装机率就占到了活跃的 iOS 设备的 12%;在第三天的时候,这一数字已经超过 30%。该速度和一年前的 iOS 8 的安装率持平,但是低于全新设计的 iOS 7。对于 iOS 开发者来说这是一个好消息,因为随着 iOS 9 的逐渐普及,在不久的将来 iOS 7 的占有率可能会跌到 5% 以下,这也意味着我们可以逐渐放弃对 iOS 7 的支持,以提供更加稳定和一致的应用体验了。没有碎片化,一直是 iOS 开发吸引人的一个重要方面。 14 | 15 | ## 教程 16 | 17 | 1. [UIStackView Tutorial: Introducing Stack Views](http://www.raywenderlich.com/114552/uistackview-tutorial-introducing-stack-views):`UIStackView` 是 iOS 9 SDK 加入的新布局方式,类似 Android 中的 Linear Layout,在制作一般的线性视图时使用 `UIStackView` 会非常方便。这篇教程详细介绍了这种新布局方式的使用方法。 18 | 19 | 2. [Swift 最佳实践](https://github.com/KevinHM/ios-good-practices-the-lastest-version/blob/master/Swift-Best-Practices.md):上周周报中提到的 Swift-Community-Best-Practices 的中文版本。Swift 社区逐渐总结了一些比较成熟和先进的最佳实践。这篇文章为我们介绍了包括像是命名,单例,常量,类型等等一系列的推荐使用方式。 20 | 21 | 3. [iOS9AdaptationTips](https://github.com/ChenYilong/iOS9AdaptationTips):向我们介绍了为 iOS 9 做适配的时候需要注意的内容,包括像是 BitCode 启用,App Transport Security (ATS) 以及 URL Scheme 的政策改变等等。虽然这些内容点在 WWDC 视频中都有介绍,但是这里将需要特别关注的内容都进行了汇总,方便开发者进行查阅和比对。 22 | 23 | 4. [Pattern Matching in Swift](http://oleb.net/blog/2015/09/swift-pattern-matching/):Swift 的内建模式匹配是很强大的语言特性,但是在使用中经常容易被忽视。这篇文章中作者扩展了内建的模式匹配,为它实现了像是匹配大于/小于这样的功能,并给出了实用的例子。在此基础上,作者继续探讨了诸如自定义模式匹配操作符,字符串匹配等一系列小技巧,可以加深我们对 Swift 中模式匹配的理解。 24 | 25 | ## 开源项目 26 | 27 | 1. [iOS-9-Sampler](https://github.com/shu223/iOS-9-Sampler):每年新版本 iOS 发布后,shu223 都会将自己所整理的新 SDK 中的功能实例用法开源出来,今年也不例外。作者在这个 repo 中向我们展示了像是 Spotlight 搜索,`SFSafariViewController` 等新特性的使用方式。 28 | 29 | 2. [MonkeyKing](https://github.com/nixzhu/MonkeyKing):一个 Swift 库,提供在应用内将链接和图片简单地分享到微信或 QQ 的功能。使用这个框架可以避免集成庞大和闭源的相关 SDK,以提高应用的安全性。框架使用了满足分享到社交平台的 scheme 来绕开 SDK 的流氓限制和设计,是一种比较干净的实现方式。作者还撰写了一遍[博客](https://github.com/nixzhu/dev-blog/blob/master/2015-09-18-monkey-king.md)来解释了这个项目的由来和使用方法。 30 | 31 | 3. [Watchdog](https://github.com/wojteklukaszuk/Watchdog):阻塞主线程是 iOS 开发新人经常犯的一个错误,对于那些耗时的非 UI 操作,我们都应该将它放到其他线程中执行,以保证用户响应的处理和界面的流畅。但是有时候即使是有经验的开发者也确实会忘掉这件事情。这个框架可以监视主线程的情况,并在可能发生阻塞 (主线程超过一定时间还没有进入空闲状态) 的时候,向我们给出警告,这在开发时提醒我们注意线程问题很有帮助。 32 | 33 | 4. [TKSubmitTransition](https://github.com/entotsu/TKSubmitTransition):漂亮的按钮控件,带有 loading 动画效果和展开转场特效,非常适合使用在用户注册后或登录时的展示。它的实现使用了基本的 Layer 动画以及 UIViewController 转场动画,是在制作动画时比较基本的技术,如果你对 UI 动画和效果感兴趣的话,不妨深入看看它的实现。 34 | -------------------------------------------------------------------------------- /article/19.md: -------------------------------------------------------------------------------- 1 | # iOS开发周报:iPhone 6s 本周发货,Dropbox 开源组群通讯工具 2 | 3 | 标签:iOS Mac 移动 移动开发技术周报 4 | 5 | 摘要:iPhone 6s 本周发货,苏宁易购 iOS 项目代码泄露,Dropbox 开源组群通讯工具 6 | 7 | --- 8 | 9 | ## 新闻 10 | 11 | 1. [iPhone 6s 本周发货,国内供货稳定](http://www.apple.com/cn/iphone-6s):本次 iPhone 6s 是大陆地区第二次进入全球首发地区。和两年前的 iPhone 5s 时的火爆场面相比,今年的首发显得并没有那么火爆。一方面是因为网购和快递的便利性越来越深入人心,另一方面消费者对于 iPhone 作为一款普通消费品的价值也有了更好的认识。最为热门的玫瑰金现在在官网购买的话,预计发货为一到两周。在之后不久应该就会开放在 Apple Store 直接购买。不过新设备拥有速度惊人的 Touch ID,3D Touch 带来的可能性,随时待命的 Siri,Liveing Photo 和 2GB 的内存等一系列新特性,还是很值得关注。这里有一篇第一时间的[评测](http://tech.sina.com.cn/mobile/n/c/2015-09-22/doc-ifxhytwr2281470.shtml)可以帮助你了解这款 iPhone。 12 | 13 | 2. [苏宁易购 iOS 项目代码泄露](http://v2ex.com/t/223610):上周 XcodeGhost 风波未平,这周苏宁易购的项目泄露事件又起。一名 ID 为 gdby 的用户将苏宁易购的整个 iOS 项目上传到了 GitHub 的公开仓库,并在众多国内开发者的 “努力” 下携 2000 余次 forking 一举冲到了 GitHub 排行榜第一 。由于苏宁官方还并未对此事作出回应,所以现在无法确定这是因为员工工作失误导致,还是个人的恶意行为。不过不论如何,这再一次为开发者和企业敲响了安全意识的警钟。 14 | 15 | ## 教程 16 | 17 | 1. [RxSwift 入坑手册 Part0 - 基础概念](http://blog.callmewhy.com/2015/09/21/rxswift-getting-started-0/):[RxSwift](https://github.com/ReactiveX/RxSwift) 是一个帮助你在 Swift 语言中使用 Reactive 概念进行编程的框架。最近 ReactiveCocoa 也推出了适合 Swift 的 3.0 版本。和 ReactiveCocoa 相比,RxSwift 显得更加学院派一些,算是根正苗红地继承了 [Rx.NET](https://github.com/Reactive-Extensions/Rx.NET) 的思想。如果你打算尝试的话,这篇文章和配套的 Playground 会是不错的示例。 18 | 19 | 2. [Beginning tvOS Development with TVML Tutorial](http://www.raywenderlich.com/114886/beginning-tvos-development-with-tvml-tutorial):相比于新的 iPhone 和 iOS 9 SDK,今年开发者所面临的最大变化其实是两个新平台 watchOS 和 tvOS。Apple TV 在国内上架的可能性并不大,但是在国外市场 Apple TV 还是很受欢迎的产品。带有 App Store,可以进行 app 开发的 Apple TV 肯定会改变客厅的面貌,如果你打算面向全球用户,这绝对是一个非常好的新机会。Raywenderlich 的这篇教程为我们介绍了用 TVML 来快速开发 tvOS 应用的方法。 20 | 21 | 3. [Swift 2.1](http://www.russbishop.net/swift-2-1):本周 Apple 发布了 Xcode 7.1 的第二个 beta 版本,其中包含了 Swift 2.1。新版本的 Swift 中强化了与 C 的协作,提供了更好的字符串输出,支持[协变与逆变](https://zh.wikipedia.org/wiki/协变与逆变)等。另外,在 Swift 2.0 中的一个 bug 也得到了修正。 22 | 23 | ## 开源项目 24 | 25 | 1. [zulip-ios](https://github.com/zulip/zulip-ios):Dropbox 以 Apache Licens 2.0 为协议开源了一个群组聊天工具 [zulip](https://zulip.org)。你可以在自己的服务器上运行这套工具,可以说是企业实时交流的好工具。开源的部分包括全部的服务器端和客户端,不论是对于专注于 iOS 的开发者还是对于以全栈为目标的工程师,这个完整项目都是很好的参考和学习对象。 26 | 27 | 2. [BluetoothKit](https://github.com/rasmusth/BluetoothKit):Apple 在 iOS SDK 中提供了 CoreBluetooth 以方便开发者使用蓝牙特性,但是因为作为通用库,CoreBluetooth 必须包含所有的蓝牙特性和稍微低层的抽象,这导致直接使用 CoreBluetooth 来做开发会有一定困难,即便是最简单的数据传输和通讯都需要不少工作。BluetoothKit 在其上进行了封装,提供了一个更为简单和高层的蓝牙通讯 API。 28 | 29 | 3. [Neon](https://github.com/mamaral/Neon):Auto Layout 为我们提供了在不同屏幕尺寸的布局时的灵活性,但是直接使用 Auto Layout 来布局面临着一些问题,其中最为严重的就是约束添加的难度以及可读性不强。针对这个问题,已经有像 [Masonry](https://github.com/SnapKit) (或者在 Swift 下对应的 [SnapKit](https://github.com/SnapKit/SnapKit)) 来解决。与这种思路不同,Neon 更倾向于使用锚点和边角关系来定义布局,为我们提供了一种新的布局思路,有兴趣的朋友可以看看项目介绍页面上的例子。 30 | 31 | 4. [SwiftGo](https://github.com/Zewo/SwiftGo):当 Swift 遇到 Go 会如何?Go 的并行特性是这门语言最大的特点之一,SwiftGo 这个项目提供了一种在 Swift 中使用类似 Go 的并行特性的方式。最大的亮点在于整个项目是不依赖像 Foundation 这样的 Cocoa 框架的,是一个纯正的 Swift 实现,也就是说,在 Swift 开源后,我们可以在其他平台 (比如 Linux) 上使用这个框架。相信随着 Swift 开源的邻近,如何用 Swift 跨平台开发会逐渐成为一个热门话题。 32 | -------------------------------------------------------------------------------- /article/2.md: -------------------------------------------------------------------------------- 1 | # 原生WatchKit即将发布 - iOS移动开发周报 2 | 3 | 标签:移动 iOS 移动开发技术周报 WatchKit 4 | 5 | 摘要:可以运行在 Apple Watch 上的 native 版的 WatchKit SDK 将可能在 WWDC 上公布,这将带来 Apple Watch app 的爆发式增长。 6 | 7 | --- 8 | 9 | ## 新闻 10 | 11 | 1. [iOS bug 导致接收到特定字符信息时设备崩溃](http://9to5mac.com/2015/05/26/ios-messages-crash-bug/):其实这种事情已经不是第一次了,以前有过 CoreText 导致崩溃的[案例和分析](http://www.zhihu.com/question/21568134)。此次崩溃的罪魁祸首其实也还是 CoreText,[这里](http://www.theregister.co.uk/2015/05/27/text_message_unicode_ios_osx_vulnerability/)有一个简单的分析。只能说,对于复杂文字的处理确实是一个复杂的问题。 12 | 13 | 2. [native 版的 WatchKit SDK](http://9to5mac.com/2015/05/27/native-apple-watch-apps/):Apple 的高级运营副总裁 Jeff Williams 在接受采访时表示在 WWDC 时有可能发布源生的 WatchKit SDK。这将允许开发者直接在 Apple Watch 上运行代码。现在的 WatchKit 只支持在手机上运行程序,app 受限严重。相信如果这个 native WatchKit 给力的话,会带来一片全新的市场。另外在采访中 Jeff 还透露了关于 [Project Titan](http://9to5mac.com/2015/02/19/bloomberg-apple-planning-to-launch-its-own-car-by-the-year-2020/) 的一些信息。虽然大家都猜测,这会是 Apple Car,但是 Jeff 还只是仅仅提及了关于软件方面的信息。 14 | 15 | 3. [Jonathan Ive 的职位变动](http://www.fastcodesign.com/3046661/design-moves/jony-ive-is-apples-first-chief-design-officer):虽然在 Apple 官网上还没有改变,但是通过一封泄露的 Cook 的[邮件](http://9to5mac.com/2015/05/25/jony-ive-chief-design-officer/) 我们得知原来的 Apple 的设计高级副总裁,光头[乔尼](https://www.apple.com/pr/bios/jonathan-ive.html) 被调任到了一个全新设置的职位,首席设计官 (Chief Design Officer)。这更偏向于一个管理职位,也很有可能表明 Apple 设计的乔纳森时代快要结束。 16 | 17 | ## 教程 18 | 19 | 1. [《NSJSONSerialization和NSNumber给我们挖的一个大坑》](http://www.tanhao.me/pieces/150523.html/):在进行 JSON 解析中由于数据类型的改变,导致在本地数据库中存储和读出的内容都和原来的发生了偏差。作者一步步探究原委,最后给出了一种解决的方案。 20 | 21 | 2. [《ReactiveCocoa 和 MVVM 入门》](http://yulingtianxia.com/blog/2015/05/21/ReactiveCocoa-and-MVVM-an-Introduction/):一篇使用 ReactiveCocoa 和 MVVM 开发的教程译文。虽然 Apple 推荐使用 MVC 架构,但是无疑 MVVM 会是一种更易于扩展和更改的方式。而 ReactiveCocoa 的响应式特性又能天然地与 MVVM 配合,通过这篇教程相信您可以快速了解这两者。 22 | 23 | 3. [《iOS学习:AVFoundation 视频流处理》](https://github.com/100mango/zen/blob/master/iOS学习:AVFoundation%20视频流处理/iOS学习:AVFoundation%20视频流处理%20.md):一篇对于使用 AVFoundation 做视频处理的工作流程进行说明的文章,作者最后通过一个二维码识别应用的实例展示了这一流程。 24 | 25 | 4. [《How To Create a Cool 3D Sidebar Animation Like in Taasky》](http://www.raywenderlich.com/87268/3d-effect-taasky-swift):一篇来自 Raywenderlich 的教程,一步一步为我们介绍了如何制作一个像 [Taasky](http://www.taasky.com) 侧栏那样的 [3D 动画](https://dribbble.com/shots/1078102-Sidebar-animation)。实现上其实并不复杂,所以这篇教程非常适合那些会使用 UIKit 的基本控件,但是对于实现某些特殊效果还没什么思路的朋友阅读。 26 | 27 | 5. [《Objective-C类成员变量深度剖析》](http://quotation.github.io/objc/2015/05/21/objc-runtime-ivar-access.html):非常深入地分析了 Objective-C 类成员变量的原理。如果你对底层实现和结构感兴趣的话,不妨看看这篇文章。 28 | 29 | ## 开源项目 30 | 31 | 1. [JSPatch](https://github.com/bang590/JSPatch):使用 Objective-C 实现的 Objective-C 和 JavaScript 的桥接引擎。使用这个框架,可以方便地用 JavaScript 来调用 Objective-C 的方法。这为使用脚本语言动态地为 app 添加某些功能或者紧急修复某些 bug 提供了一种可能性。 32 | 33 | 2. [VVeboTableViewDemo](https://github.com/johnil/VVeboTableViewDemo):[VVebo](http://vvebo.me) 是一款优秀的微博客户端,这个项目是 VVebo 作者开源的一个经过高度优化的 TableView 组件。例子中展示了如何通过将内容渲染到同一张图片来减少 table view cell 的层级关系,并按照滑动速度按需加载内容来让 TableView 更加高效。 34 | 35 | 3. [APAddressBook](https://github.com/Alterplay/APAddressBook):在通讯录的访问和管理上,Apple 提供的是一套 C 语言的 API,可以说很不直观,非常难用。这个项目将这些低层级的 API 进行了包装,让我们能在处理通讯录的相关工作时更加轻松一些。 36 | 37 | 4. [HighstreetWatchApp](https://github.com/GetHighstreet/HighstreetWatchApp):一个完整的 WatchKit app 的项目,其中展示了很多 WatchKit app 的效果和思路。如果你正在为 Apple Watch 进行开发的话,不妨可以配合[这篇](http://highstreetapp.com/blog/open-sourcing-the-highstreet-watchkit-app)介绍的文章一起看看有没有可以值得借鉴和参考的地方。 -------------------------------------------------------------------------------- /article/20.md: -------------------------------------------------------------------------------- 1 | # iOS开发周报:Apple Music 入华,App Store 中国区开始征收交易税 2 | 3 | 标签:iOS Mac 移动 移动开发技术周报 4 | 5 | 摘要:本周包括 Apple Music 和电影,图书等服务在内的 iTunes Store 在中国地区开始营业;Apple 开始向中国区 app 征收交易税,开发者收入将略微减少。 6 | 7 | --- 8 | 9 | ## 新闻 10 | 11 | 1. [Apple Music 入华,iTunes Store 电影图书业务也在中国区开业](http://www.apple.com/cn/music/):在之前的[周报](http://www.infoq.com/cn/news/2015/07/Apple-Music-MKMapView)中我们就提到过音乐版权清理和 Apple Music 之间可能的关系,本周 Apple Music 以低调姿态在国内开始提供服务。个人每月 10 元和家庭共享每月 15 元的价格可以说非常低廉。与此同时,iTunes 的电影和图书的销售也同时开始了。相信这一系列举动将对音乐、电影、图书等作品在国内的版权正规化起到极大的推进作用。 12 | 13 | 2. [OSX 10.11 正式发布](http://arstechnica.com/apple/2015/09/os-x-10-11-el-capitan-the-ars-technica-review/):新版本的 OSX 操作系统和国庆节一起来到了我们身边。对比 Yosemite,El Captain 的升级力度和新功能可能没有那么突出。基本可以将 El Captain 看做像是 Snow Leopard 或者 Mountain Lion 这样的细节打磨升级。新版本操作系统的流畅性和稳定性确实有明显的上升,如果你还在使用像是 OSX 10.9 这样的系统的话,十分建议升级。 14 | 15 | 3. [Apple 调整中国区定价政策,app 销售开始收取交易税](http://www.ithome.com/html/it/179944.htm):本周开发者们收到了来自 Apple 的一封邮件,从 9 月 30 日起,App Store 将向中国的开发者收取交易税,并且将在扣除交易税后再跟开发者三七分成,同时日本区也将适用新的消费税政策。日本区的消费税从 5% 上涨到 8% 是明面的,但是中国区的税率并没有被提及。从 Apple 提供的价格表来看,最终开发者从中国区得到的分成似乎会减少 2% 左右。在这两个地区有 app 和内购销售的开发者不要忘了去签订新的合约。 16 | 17 | ## 教程 18 | 19 | 1. [给女朋友的 iOS 开发教程 iOS With Girlfriend](https://ruby-china.org/topics/27549):来自国内开发者 Kevin 的一个系列视频教程,从设计入手讲述如何开发一个 iOS 应用。现在视频还在连载中,前面三期着重讲解了 iOS 应用的设计理念和一些原则,比较适合刚起步不久的独立开发者观看。 20 | 21 | 2. [Tuples + Pattern Matching](https://medium.com/the-traveled-ios-developers-guide/tuples-pattern-matching-1f4ae9817112):Swift 中的 switch 语句其实是基于模式匹配的,Swift 的模式匹配非常灵活,对于像多元组我们也可以使用模式匹配来控制代码的执行。这篇文章为我们介绍了 Swift 中使用 tuple 来做模式匹配的一些例子。 22 | 23 | 3. [10 Ways to Write Cleaner Code](https://www.codeschool.com/blog/2015/09/29/10-ways-to-write-cleaner-code/):对整洁代码的追求应该是永无止境的,这篇文章并不是专门针对 iOS 开发的,而是介绍了十种对于一般的开发中应该考虑遵守的代码规范。读者可以逐条对比自己日常工作中的习惯来看看,有则改之,无则加勉,以求写出更漂亮的代码。 24 | 25 | ## 开源项目 26 | 27 | 1. [Async](https://github.com/duemunk/Async):GCD 是 iOS 开发中处理多线程任务的一个简单易用的特性,但是很多时候使用 GCD 时其实都是一些很模板化的代码。Async 这个项目对 GCD 进行了一些封装,使得在线程间的跳转和调用更加简洁清晰。这不仅有助于我们写出和维护简洁的代码,也能帮助理解线程之间的关系,减少 bug 的产生。 28 | 29 | 2. [Eureka](https://github.com/xmartlabs/Eureka):在 iOS 应用中构建表单并不是十分困难,但是却相当花时间。在 iOS 9 中引入 stack view 之前,开发者基本只能使用 table view 来构建表单。[XLForm](https://github.com/xmartlabs/XLForm) 是 Objective-C 时代 xmartlabs 开源的一款很好的表单构建框架,而他们最近发布了对应的 Swift 版本框架 - Eureka。与自己构建表单相比,Eureka 提供了绝大多数情况下可以使用到的表单项组合,可以为开发者节省大量时间。 30 | 31 | 3. [SourceKitten](https://github.com/jpsim/SourceKitten):和 Xcode 以及 Swift 打交道的开发者应该对 SourceKit 都不陌生,最近一年隔三岔五 Xcode 就会提示我们 SourceKit 挂了,然后代码高亮,自动补全什么的就统统没有了。SourceKit 可以说是 Xcode IDE 的核心,它负责对项目和源文件进行语法分析,创建 AST (抽象语法树),然后为 IDE 的操作层和 UI 提供一切支援。SourceKitten 这个框架可以让我们和 SourceKit 打交道,完成一些和语言相关的事情,比如获取所有 token,解析 AST 等等。在制作 Xcode 插件或者一些工具的时候,这个框架会很有用。比如 [CocoaDocs](https://github.com/CocoaPods/cocoadocs.org) 在解析注释文档时所依赖的 [jazzy](https://github.com/Realm/jazzy) 就使用了这个库进行 AST 获取。 32 | -------------------------------------------------------------------------------- /article/21.md: -------------------------------------------------------------------------------- 1 | # iOS开发周报:Apple 下周发布 21.5 inch 4K iMac,新款键鼠套装有望配备 Force Touch 2 | 3 | 标签:iOS Mac 移动 移动开发技术周报 4 | 5 | 摘要:Apple 即将更新 21.5 inch iMac,将配备 Retina 显示屏。OSX 10.11 beta 版中出现新款 Magic Mouse 和 Keyboard 代号 6 | 7 | --- 8 | 9 | ## 新闻 10 | 11 | 1. [21.5 寸 4K iMac 即将发布](http://www.macrumors.com/2015/10/06/retina-imac-launching-next-week-ipad-pro-november/):据称 Apple 有可能在 10 月 13 日对 21.5 inch 的 iMac 作出更新,将为其配备分辨率为 4096 x 2304 的 4K 显示屏。另外,在 OSX 10.11 beta 版的代码中有人找到了第二代 Magic Mouse 和 Keyboard 的字样,据称新版本外设将配备蓝牙 4.2 以及可能具有 Force Touch 特性。 12 | 13 | 2. [《哈利波特 - 增强版》登陆 iBooks Store](https://www.pottermore.com/news/enhanced-editions):哈利波特迷的果粉有福了。J.K. Rowling 和 Apple 达成了协议,将在 iBooks Store 以独占的方式上架《哈利波特 - 增强版》系列图书。这套电子书使用了 iBooks 的互动特性,不仅有图书原文,还包括了互动动画,原画集等内容。而最近 iBooks Store 才刚在中国开业,这对于整个 iBooks Store 生态是一个非常正面的消息。不过遗憾的是,暂时这套图书只在部分国家的 iBooks Store 发售,而中国并不在内。不过其他语言的版本现在似乎也在制作之中,我们还是有希望看到这套书在中国发售的。 14 | 15 | ## 教程 16 | 17 | 1. [iOS 9 by Tutorials](http://www.raywenderlich.com/117500/ios-9-by-tutorials-now-available):Raywenderlich 每年都会在新的 iOS SDK 发布后出版一本教程,涵盖绝大部分系统的新特性和开发者所需要和应该掌握的新技能,今年也不例外。今年的教程中包括了 Swift 2.0,Spotlight 搜索,多任务以及 UIStackView 等等多方面的内容。虽然教程的售价对于国内开发者可能略高,但是绝对物有所值。入门和中级开发者如果没有时间通看 WWDC 的话,跟随这本教程来学习 iOS 9 SDK 应该是最快的方式之一。 18 | 19 | 2. [guard & defer](http://nshipster.com/guard-and-defer/):guard 和 defer 是在 Swift 2 中新加入的流程控制关键字,它们的出现丰富了 Swift 的语法,也彻底解决了使用多个 if let 语句使得缩进过深,难以阅读的问题。这篇文章详细讨论了这两个关键字的使用方法和存在的价值。 20 | 21 | 3. [使用Xcode查找项目中的中文字符串](http://adad184.com/2015/10/09/tips-search-chinese-string/):应用想要打开全球市场的话,本地化是必不可少的。如果我们直接一开始就注意了这一点,使用 `NSLocalizedString` 的话,从源文件中提取需要本地化的字符串是一件很容易的事,但是如果一开始为了省事我们直接硬编码了中文字符串的话,想要在所有文件中一个不漏地找到这些字符串就不那么简单了。这篇文章介绍了如何准确地查找到所有中文字符串的方法。 22 | 23 | ## 开源项目 24 | 25 | 1. [FDStackView](https://github.com/forkingdog/FDStackView):`UIStackView` 是 Apple 在 iOS 9 SDK 中新加入的一类 UI 控件,也是 iOS 生态中缺失已久的一种布局方式。对于日常 app 开发,不夸张地说,可能 80% 的 UI 都可以使用 stack 的方式来进行布局。而如果我们不使用 `UIStackView` 的话,即使是最简单的线性布局,我们也不得不依赖于各种约束。但是现在 `UIStackView` 唯一的缺点就是只能在 iOS 9 上使用,这个项目通过巧妙的方式用自己的一套实现在非 iOS 9 中替换了 `UIStackView` 的链接和实现,让我们可以在低至 iOS 6 的系统上使用 `UIStackView`,并且保持和最新的 iOS 9 上同样的用法和语法。这在现在的兼容和之后的迁移中都有着巨大的价值。 26 | 27 | 2. [FlagKit](https://github.com/madebybowtie/FlagKit):像是在引导用户填写手机或或者是选择语言的时候,我们经常会需要按照用户需要显示国家或者地区的旗帜。这个库包含了设计漂亮,风格统一的一套旗帜,并且按照国家代码进行了编排,使得我们可以很容易地使用用户设备语言来选择和显示对应的旗帜,十分方便。 28 | 29 | 3. [JSQMessagesViewController](https://github.com/jessesquires/JSQMessagesViewController):一个聊天界面可能看起来简单,但是实际上需要关心的事情非常多,特别是在涉及到像是图片、链接等内容时。虽然 TextKit 已经大幅帮助我们简化了相关的工作,但是想要写出一个漂亮的聊天框和消息列表依然是费时费力的事情。JSQMessagesViewController 是一个比较成熟的方案,也可以进行一些自定义。如果你的项目里需要一个类似的比较标准的消息体验的话,这个框架会是很好的选择。 30 | 31 | 4. [swifter](https://github.com/glock45/swifter):使用 Swift 写的一个简单的 HTTP 服务器。有时候我们可能需要在我们的 app 中运行一个服务端,这样就可以通过其他设备来访问当前 app 中的内容了。不过因为这个框架使用到了一些 Foundation 的内容,所以即使是之后 Swift 开源也还并不能直接实现跨平台的移植,比较可惜。不过从最近 Swift 社区的倾向和积极程度来看,随着 Swift 开源日期的邻近,大家都在准备有一番作为,我们也希望这门语言能继续健康发展下去。 32 | -------------------------------------------------------------------------------- /article/22.md: -------------------------------------------------------------------------------- 1 | # iOS开发周报:Apple 更新 iMac 产品线,适配 iOS 9 分屏特性的 iWork 套件更新 2 | 3 | 标签:iOS Mac 移动 移动开发技术周报 4 | 5 | 摘要:本周 Apple 更新了 iMac 产品线以及键鼠触摸板套件,新外设配备了 Force Touch 技术。iWork 本周也得到更新,支持了 iOS 9 的分屏特性,iPad 向着生产力工具的方向又迈进了一步。 6 | 7 | --- 8 | 9 | ## 新闻 10 | 11 | 1. [iMac 产品线更新](http://www.apple.com/cn/imac/):在大家都认为本次只会新推出 21.5 inch retina iMac 的时候,Apple 对整个 iMac 产品线都进行了更新。根据 Geekbench 的[测评](http://browser.primatelabs.com/user/idanbo),新款的 iMac 性能与之前相比提高在 20% 左右。但是与此同时,有不少购买者也注意到 1TB 版本的 Fusion Drive 中内置的 SSD 从原来的 128GB 大幅缩水到了 24GB。这可能意味 Apple 认为 24 GB 已经足够使用,效果和 128GB 相同。不过最后事实如何,还是要看用户最终的使用结果。 12 | 13 | 2. [新款 Magic 系列配件更新,触摸板配备 Force Touch](http://www.apple.com/cn/shop/mac/mac-accessories):随着 iMac 更新一起,Magic 系列的鼠标,键盘,触摸板三件套也获得了更新。其中触摸板添加了 Force Touch 支持,这也意味着除了 Macbook Air 以外,其他的最新款的 Mac 设备上的触摸板都已经支持了 Force Touch,开发者已经可以更多地利用这个特性进行开发了。结合 iPhone 6s 的 3D Touch 来看,多一个维度的触碰已经可以说是交互的新方向。 14 | 15 | 3. [iWork 支持 iOS 9 分屏特性,iPad 迎来重新定位?](http://www.macrumors.com/2015/10/15/iwork-for-mac-ios-gain-el-capitan-ios-9-support/):在 iPad Pro 的发布会上微软 Office 团队的演示向我们展示了 iPad Pro 在办公领域的可能性。iOS 9 更新已经有一段时间了,Apple 自家的 iWork 却迟迟没有加入对分屏的支持。上周 iWork 办公三件套终于得到了更新,加入了分屏的支持。iPad 在大屏 iPhone 问世以后就陷入了定位上的尴尬,作为家庭娱乐的终端之一 iPad 非常成功,但是在生产力上却一直不太出色。可以看出,Apple 希望借助 iOS 9 和 iPad Pro 来重新定位 iPad。 16 | 17 | ## 教程 18 | 19 | 1. [Swift Summit](https://www.swiftsummit.com):Swift Summit 是国外 Swift 社区开发者组织的 Swift 技术会议,不少顶尖的欧美开发者都将登坛演讲。之前举办的 [Swift Summit London](https://realm.io/news/swift-summit/) 就获得了很大的成功,而在下周最新的会议将在旧金山召开。按照之前的经验,会议的视频和演示文档都将在会后放出,相信会是 Swift 开发者非常好的学习资料。如果你之前没有看过 London 时的视频的话,抽空研究下感兴趣的主题相信会给你带来不少收获。 20 | 21 | 2. [一种头像缓存策略](https://github.com/nixzhu/dev-blog/blob/master/2015-10-08-navi.md):应用中显示用户的头像是非常常见的需求,因为头像的特殊性,我们应该设计一些缓存机制来避免多次下载和无用请求。这篇文章通过实际的场景作为例子为我们展示了一种头像存储和显示的策略。作者同时也将文章中设计的代码和例子整理在了[这里](https://github.com/nixzhu/Navi),有兴趣和需求的朋友可以看看。 22 | 23 | 3. [Push / Pop modal SFSafariViewController (Hacking swipe from edge gesture)](http://www.stringcode.co.uk/push-pop-modal-sfsafariviewcontroller-hacking-swipe-from-edge-gesture/):iOS 9 新加入的 `SFSafariViewController` 为开发者提供了一种展示网页内容的即开即用的方式。相比起 `UIWebView` 和 `WKWebView`,`SFSafariViewController` 更接近与一个标准的浏览器,Apple 帮你做了大量的实现细节,因此使用起来很方便。不过有一个限制是 `SFSafariViewController` 只能使用 modal 的方式来展现,用户在浏览网页后想要关闭的话需要点击右上角的完成按钮,而不能试用过边缘侧滑的方式返回,这不是特别方便。这篇文章添加用自定义转场和一点小的 hack,让我们能够以 Push 的动画的方式来使用 `SFSafariViewController`。 24 | 25 | ## 开源项目 26 | 27 | 1. [SwiftTask](https://github.com/ReactKit/SwiftTask):一个 Swift 的 Promise 框架,和 Objective-C 的 [Bolts-Task](https://github.com/BoltsFramework/Bolts-iOS) 比较类似。你可以通过将一系列操作分解或者组合成一个个的任务,然后对任务进行安排来组织代码逻辑。相比起传统的编码方式,逻辑上会更加清晰。另外,使用 Promise 的方式,也很容易实现像是任务的重试、级联或者依赖等等,非常方便。 28 | 29 | 2. [wax](https://github.com/alibaba/wax):wax 是一个有些年头的项目了,它是 Objective-C 和 Lua 的桥梁,可以让你使用 Lua 来通过 runtime 实现和运行 Objective-C 的内容,这在调试 app 和在线热修复的时候会非常有用。不过 wax 的原作者最近一直没有进行维护,这个 repo 是阿里巴巴 fork 以后维护的版本,在原基础上添加了 64 位支持以及 block 的相互调用,可以说让这个项目又复活了。不过现在 Apple 主打的还是使用 JavaScript 来做为脚本交互语言,也有更方便的 JavaScriptCore,所以除非你是铁杆 Lua 粉丝,否则提供类似功能但是使用 JavaScript 的 [JSPatch](https://github.com/bang590/JSPatch) 可能会是更好的方向。 30 | 31 | 3. [Reachability.swift](https://github.com/ashleymills/Reachability.swift):如果你有使用 Objective-C 进行网络方面编程的经验的话,你一定不会对 Apple 的 [Reachability](https://developer.apple.com/library/ios/samplecode/Reachability/Introduction/Intro.html) 感到陌生。这个框架将原来的 Reachability 用 Swift 和闭包的方式进行了重写,现在使用起来比以前要方便得多。 32 | 33 | 4. [Interstellar](https://github.com/JensRavens/Interstellar):一个极简的 FRP (Functional Reactive Programming) 中 Signal 的实现。你可以用这个框架来创建简单的信号量并用函数式的方式来操作信号。如果你只是想在你的项目中比较合适的地方适当地用一些函数响应式编程,又不太想引入像是 [ReactiveCocoa](https://github.com/ReactiveCocoa/ReactiveCocoa) 或者 [RxSwift](https://github.com/ReactiveX/RxSwift) 这样重量级的框架的话,`Interstellar` 可能会是不错的选择。 34 | -------------------------------------------------------------------------------- /article/23.md: -------------------------------------------------------------------------------- 1 | # iOS开发周报:Xcode 7.1 和 Swift 2.1 更新,Apple TV 开发时代正式开启 2 | 3 | 标签:iOS Mac 移动 移动开发技术周报 4 | 5 | 摘要:本周 Apple 更新了 Xcode 7.1,其中包含了对应新款 Apple TV 的 tvOS SDK,开发者可以开发并提交 TV app 了。相比于移动领域,tvOS app 的使用场景完全不同,对于开发者来说可能是全新的机会。 6 | 7 | --- 8 | 9 | ## 新闻 10 | 11 | 1. [Xcode 7.1 发布,集成 tvOS SDK,Apple TV 开发大幕正式拉开](https://developer.apple.com/tvos/):本周 Apple 发布了 Xcode 7.1,其中包含了 tvOS 的 SDK。同时, tvOS GM 版本也已经提供下载。新一代的 Apple TV 将在本月底开售,针对新平台的开发也将拉开帷幕。如果你有意加入这个平台又没有第一时间研究的话,现在还为时不晚,Raywenderlich 的[相关教程](http://www.raywenderlich.com/?s=tvos&cof=FORID%3A10)和 [Apple 的官方文档](https://developer.apple.com/library/prerelease/tvos/documentation/General/Conceptual/AppleTV_PG/)将是良好的起点。 12 | 13 | ## 教程 14 | 15 | 1. [《不可变对象的魅力》](http://limboy.me/ios/2015/10/18/the-power-of-immutable-objects.html):在开发中,我们应当尽可能地减少可变对象和状态的存在,这也是 iOS 开发中更倾向和提倡使用 `NSArray` 或者 `NSDictionary` 而不是 `NSMutableArray` 以及 `NSMutableDictionary` 的原因。作者通过了一个简单的实例和在 ReactJS+Flux 中的类似案例来为我们说明了使用不可变对象背后的思想。 16 | 17 | 2. [《iOS 比 Android 还不安全? - 记一次和阿里资深安全工程师蒸米的交流》](http://blog.devtang.com/blog/2015/10/22/talk-with-zm-about-ios-security/):随着 XcodeGhost 和有米 SDK 非法获取用户 Apple ID 等事件后,iOS 系统的安全性和开发者的安全意识受到了高度重视。被我们认为安全的 iOS 系统实际上到底安全性如何?作为开发者我们应该做些什么来提高我们的应用的安全性?这篇文章对此进行了一些探讨。 18 | 19 | 3. [《Key Pinning in Mobile Applications》](https://www.paypal-engineering.com/2015/10/14/key-pinning-in-mobile-applications/):来自 PayPal 安全团队工程师的一篇关于移动应用 SSL key pinning 的分享。Key Pinning 是一种通过安全上下文和标识设置来对 TLS 连接进行验证的方式,用来保证客户端和服务端的通讯加密。 20 | 21 | 4. [《Exploring Apple’s 3D Touch》](https://medium.com/@rknla/exploring-apple-s-3d-touch-f5980ef45af5#.vbnhcafrl):3D Touch 是搭载在 iPhone 6s 的屏幕压感技术,通过使用 3D Touch 的简单的 API,我们可以实现像是 Peek and Pop 这样的操作或是从主屏幕上访问快捷菜单。但是 3D Touch 并不止于此,新的 SDK 中还有压感系数,施压角度,高度等等一系列 API。虽然大部分参数都是针对于 Apple Pencil 的,但是这些 API 也侧面反映了 3D Touch 的可能性。这篇文章中作者为我们介绍和分析了 3D Touch 中各 API 的使用方式和注意点。 22 | 23 | 5. [《iOS JSON 模型转换库评测》](http://blog.ibireme.com/2015/10/23/ios_model_framework_benchmark/):Objective-C 作为一门动态特性极强和和基于运行时的特性,在 model 转换处理上非常方便,这也使 iOS 开发中出现了不少 model 转换的框架。作者将自己的 [YYModel](https://github.com/ibireme/YYModel) 和其他一些 model 转换框架进行了性能评测和简单分析。YYModel 在实现时所考虑的性能上的注意点不仅在框架开发中适用,其实在我们的 app 开发中也一样值得注意。另外,作者的其他几个[开源框架](http://blog.ibireme.com/2015/10/23/daily/)质量也很高,非常值得一试。 24 | 25 | ## 开源项目 26 | 27 | 1. [StarWars Animation](https://github.com/Yalantis/StarWars.iOS):一个炫酷的 Star War 碎屏动画特效,想要实现这个效果本身的话其实并用不了多少代码,但是想要在保证运行效率的基础上做到实际可用,就需要花费大量精力和不断尝试了。这个项目分别用 `UIView` 动画,`UIDynamic`,以及 OpenGL 三种方式来进行了实现,并对它们的运行效率进行对比。结果也在大家预料之中,直接使用 OpenGL 拥有最好的效果,而经过层层封装,带有物理特性,写起来也最简单的 `UIDynamic` 运行最慢。在[这篇文章](https://yalantis.com/blog/uidynamics-uikit-or-opengl-3-types-of-ios-animations-for-the-star-wars/)中有对性能的进一步分析。 28 | 29 | 2. [Instructions](https://github.com/ephread/Instructions):在 app 开发中,一步步的引导教程是很常见的开发任务,但同时也是比较无趣和繁杂的部分,因为引导部分的定稿通常会在项目结束之前,这往往涉及到对现有实现的修改甚至 hack。但是引导教程本身又十分重要,它的好坏在很大程度上决定着用户对 app 的第一感官。Instructions 就是一个专门帮助开发者简化引导教程实现的框架,它以比较灵活的方式用标准的 Cocoa 设计思想来实现了简化引导界面的制作。 30 | 31 | 3. [BEMCheckBox](https://github.com/Boris-Em/BEMCheckBox):一系列优雅简洁的勾选框视图。相比于 iOS 系统的 `UISwitch` 控件,Checkbox 往往只在编辑列表的时候会被使用,如果你想要单独使用类似的 checkbox,其实并不是很容易。这个框架为我们提供了很漂亮的实现,甚至包括各式样的动画效果,十分漂亮。 32 | -------------------------------------------------------------------------------- /article/24.md: -------------------------------------------------------------------------------- 1 | # iOS开发周报:Swift 开源新消息,CocoaPods 获得 Capital One 支持 2 | 3 | 标签:iOS Mac 移动 移动开发技术周报 4 | 5 | 摘要:Chris Lattner 确认 Swift 年内开源计划不变,搭载 tvOS 的 Apple TV 正式发售 6 | 7 | --- 8 | 9 | ## 新闻 10 | 11 | 1. [Swift 开源新消息](https://www.reddit.com/r/swift/comments/3kbjjn/so_swift_isnt_open_source_yet_then/):在今年 WWDC 上 Apple 承诺 Swift 将在年内开源。今年只剩下最后两个月了,而 Swift 开源却一直没有其他特别的消息,猜测的声音也逐渐多了起来。最近 Swift 的创始者,Apple 编译器和开发工具团队的负责人 Chris Lattner 现身 Reddit,给出了关于 Swift 开源的一些信息。他表示包含 Linux 支持的 Swift 将按照预定在 2015 年底开源,并将在之后再给出一些详细信息。距离 Swift 开源的日子已经越来越近了,让我们静静等待吧。 12 | 13 | 2. [第四代 Apple TV 上市,TV App Store 正式开业](http://www.apple.com/tv/):被 Apple 寄予厚望的代表电视未来的第四代 Apple TV 已经上市了,随着这款产品的正式发售,新平台的 App Store 也正式开业。第三方开发者现在可以开发和提交针对电视平台的 app 了,以 Apple 拥有的开发者数量来看,这在机顶盒行业里这绝对会是里程碑式的事件。不过略微遗憾的是首发地区中并不包含中国,而新款 Apple TV 也暂时[无法用中国区的 Apple ID](http://onevcat.com/2015/10/apple-tv/) 进行使用。不知道 Apple TV 有没有可能在近期通过层层审核,在中国上市,这对国内 iOS 开发者来说也是一个非常诱人的机会。 14 | 15 | 3. [CocoaPods 获得 Capital One 支持](http://blog.cocoapods.org/Capital-One/):CocoaPods 是 iOS 开发中很常用的以来管理工具,这周 CocoaPods 宣布获得了 Capital One 这家企业的支持。在成为开发包管理的事实标准以后,CocoaPods 一直在依赖稳定性和 iOS,watchOS 和 tvOS 等不同平台支持上进行着努力。在获得资金支持后,CocoaPods 也宣布了 1.0 版本的开发进展。企业支持开源项目的做法在一方面是对开源社区和开发者的回馈,另一方面也可以为收获名声和提高在开发者心目中的地位,可以说是一举两得的做法。 16 | 17 | ## 教程 18 | 19 | 1. [《Parse源码浅析系列(一)---Parse的底层多线程处理思路:GCD高级用法》](https://github.com/ChenYilong/ParseSourceCodeStudy/blob/master/01_Parse的多线程处理思路/Parse的底层多线程处理思路.md):在之前的[周报](http://www.infoq.com/cn/news/2015/08/ios-weekly-ios841#rd)中我们曾经提到过 Parse 开源后一些值得一看的内容。这篇文章对 Parse 中的离线保存相关功能的实现进行了一些解读和分析,并以此展开了 Dispatch Source 和 Semaphore 这些在 GCD 里比较深入的应用的说明。文章写得非常详细易懂,很值得一看。 20 | 21 | 2. [《iOS 原生扫 QR 码的那些事》](http://c0ming.me/qr-code-scan/):在实现扫描二维码相关的需求,大家都可能接触过 ZXing 或 ZBar 这类第三方扫码库。但是从 iOS 7 开始,我们就可以通过 AVFoundation 中相关的方法,而不依赖第三方库来完成基本的二维码扫描的操作了。这篇文章通过例子为我们阐释了如何使用相关 API 来实现二维码扫描以及识别。 22 | 23 | 3. [《Enumerating tuple values in Swift》](http://softwaredesign.jeffverkoeyen.com/enumerating-tuple-values-swift/):Swift 中的 tuple 默认是不能进行循环访问的,但是很多时候其实我们可能会有类似的需求。这篇文章里作者利用 reflection 的方法很巧妙地实现了 tuple 多元组的循环访问。虽然最终在性能上可能存在一些问题,但是也为我们展示了 Swift 的另一种可能性。 24 | 25 | 26 | ## 开源项目 27 | 28 | 1. [PhoneNumberKit](https://github.com/marmelroy/PhoneNumberKit):一个用来解析,验证和处理不同格式电话号码的框架。处理用户输入或者其他来源的电话号码其实并非看上去那么简单,你需要考虑到除了国家代码,用户不同的输入习惯,空格横线的可能性等等一系列要素。这个框架为我们隐藏了不少实现细节,可以快速地完成和电话号码打交道的任务。 29 | 30 | 2. [Apple 开源加密库底层实现](https://developer.apple.com/cryptography/):iOS 和 OSX 开发中我们很多时候都会用到一些加密算法,这些算法基本都集中在 [Security 框架](https://developer.apple.com/library/ios/documentation/Security/Reference/SecurityFrameworkReference/index.html)和 [Common Crypto 库](https://developer.apple.com/library/mac/documentation/Security/Conceptual/cryptoservices/GeneralPurposeCrypto/GeneralPurposeCrypto.html)中。本周 Apple 将这两个框架的实现,以及它们所以来的一个更底层的实现 corecrypto 进行了开源。对于一般开发者来说这可能没有特别大的意义,但是作为跨国企业来说,安全方面的公开透明无论如何强调都是不为过的。现在在 Apple Open Source 的[网站](http://opensource.apple.com)上已经可以下载到这些框架的源代码了,不过说实话,这个网站体验并不很好,希望之后 Swift 开源能有一种更好的形式。 31 | -------------------------------------------------------------------------------- /article/25.md: -------------------------------------------------------------------------------- 1 | # iOS开发周报:iPad Pro 或于 13 日发布,App Store 添加新的购物分类 2 | 3 | 标签:iOS Mac 移动 移动开发技术周报 4 | 5 | 摘要:iPad Pro 或于 13 日发布,App Store 添加新购物分类,受 XcodeGhost 影响的第三方库继续“发挥余热” 6 | 7 | --- 8 | 9 | ## 新闻 10 | 11 | 1. [Apple 在 App Store 中新加了购物分类](https://itunes.apple.com/cn/genre/ios-shopping/id6024?mt=8):在以前,很多电商类的 app 都被放到了生活类下,不过其实生活类 app 包罗万象,像是日记类 app 或者食谱类 app 会更适合这个分类。最近,Apple 在 App Store 中添加了一个购物 (Shopping) 的分类,这将会是这类电商 app 更好的归宿。在 app 数量爆炸的今天,更多的分类意味着 app 曝光可能性的增加以及潜在用户更容易发现你的 app,这对开发者和消费者来说都是好消息。 12 | 13 | 2. [第三方零售商将于 13 日开始 iPad Pro 发货](http://www.macrumors.com/2015/11/06/ipad-pro-sams-club-november-13-launch/):虽然 Apple 官方并没有给出 iPad Pro 的具体发售日期,只是笼统地说会在 11 月发布,不过根据一些零售商的行为来看,这款设备已经离我们很近了。欧美一些零售商接受 iPad Pro 预订并将于本月 13 日开始发货。不出意外的话,这也将是 Apple 官方发布 iPad Pro 的日期。 14 | 15 | 3. [XcodeGhost 持续影响 iOS 开发](https://www.fireeye.com/blog/threat-research/2015/11/xcodeghost_s_a_new.html):如果你认为一个多月前的 XcodeGhost 事件已经彻底完结的话,你就大错特错了。近日美国一家信息安全公司发现有一些 XcodeGhost 的变种版本能够作用于 Xcode 7 和 iOS 9,并绕开 ATS (App Transport Security) 系统以及逃避静态分析工具的检测。另外,一些使用了被感染的 Xcode 编译的[第三方库中也会带有 XcodeGhost](https://possiblemobile.com/2015/11/a-lesson-in-xcode-ghost-third-party-frameworks/),这使得即使你的 Xcode 没有问题,但是只要使用了这样的第三方库,最后编译的 app 依然是被植入病毒的版本。 16 | 17 | ## 教程 18 | 19 | 1. [Why is Swift's String API So Hard?](https://www.mikeash.com/pyblog/friday-qa-2015-11-06-why-is-swifts-string-api-so-hard.html):在 Swift 中字符串类型的处理很有意思,对应的 API 远比我们想象的复杂。作为一门没有历史包袱的语言,Swift 为什么会在字符串上选择了现在这样的处理方式,以前 C 系语言的字符串处理有什么问题?这篇文章从深层次讲述了为何 Swift 的字符串会设计成现在的样子。 20 | 21 | 2. [Elastic view animation using UIBezierPath](http://iostuts.io/2015/10/17/elastic-bounce-using-uibezierpath-and-pan-gesture/):作者通过 `UIBezierPath` 实现了一个弹性下拉刷新的控件。这篇文章是这一实现过程的一个教程,写得非常详细。如果你对贝塞尔曲线的使用还不熟悉,或者对如何制作一个类似的自定义控件毫无头绪的话,这篇文章为你提供了一个很好的范例。 22 | 23 | 3. [关于 @synchronized,这儿比你想知道的还要多](http://yulingtianxia.com/blog/2015/11/01/More-than-you-want-to-know-about-synchronized/):一篇翻译文章,介绍了 `@synchronized` 背后的故事。如果你已经使用 Objective-C 编写过任何并发程序,那么想必是见过 `@synchronized` 了。它的作用类似于锁,用来防止不同的线程同时执行同一段代码。这篇文章对这背后都发生了什么进行了一些探索。 24 | 25 | 4. [被误解的 MVC 和被神化的 MVVM](http://blog.devtang.com/blog/2015/11/02/mvc-and-mvvm/):如何避免把 MVC (Model View Controller) 写成 Massive View Controller 可以说一直是 iOS app 架构上的重点,MVVM 是一种选择。但是 MVVM 也并不是万能的,辩证地看的话,在 MVVM 帮助解决耦合的通过,它也存在一些缺点。这篇文章简述了 MVC 和 MVVM 的一些各自的特点,可以作为我们在设计一个 iOS app 架构时的参考。 26 | 27 | ## 开源项目 28 | 29 | 1. [YYText](https://github.com/ibireme/YYText):功能强大的 iOS 富文本编辑与显示框架,相当于将 UILabel 和 UITextView 的开源实现。这组实现和 UIKit 中的类似,是基于并扩展了 CoreText 的特性。相较于系统的原生实现,这个开源实现让你有机会根据项目需求进行自己的调整,这在复杂的图文混排应用场景中会比较有用。 30 | 31 | 2. [Unbox](https://github.com/JohnSundell/Unbox):又一个 Swift 的 JSON 解析框架。因为在 Swift 中,不提倡像 Objective-C 那样大范围使用动态特性,因此在 JSON 解析方面一直没有特别好的自动化方案。这个项目和已有的像是 [Himotoki](https://github.com/ikesyo/Himotoki) 或者 [Argo](https://github.com/thoughtbot/Argo) 来说并没有特别大的不同,不过实现上要简单不少,可以作为备选的方案。 32 | 33 | 3. [Prephirences](https://github.com/phimage/Prephirences):如果你还在使用 `NSUserDefaults` 来保存用户设置的话,现在可以考虑更好一些的方式了。Prephirences 可以让我们很轻松地在 `NSUserDefaults`,Core Data,Keychain 等不同情境下保存用户设置。另外,你也可以轻易地合并不同的设置中的值。 34 | 35 | 4. [Armchair](https://github.com/UrbanApps/Armchair):Swift 写的用户评论管理,支持 iOS 和 OSX 中在一定条件下弹出让用户进行评论的对话框。这个框架和 Objective-C 中的 iRate 和 Appirater 等比较类似,包含了基本所有支持的本地化语言,并且可以通过各种条件来控制是否弹出评论提示。 36 | -------------------------------------------------------------------------------- /article/26.md: -------------------------------------------------------------------------------- 1 | # iOS开发周报:Apple 改进 App Store 搜索算法,下一代 Apple Watch 消息 2 | 3 | 标签:iOS Mac 移动 移动开发技术周报 4 | 5 | 摘要:最近 Apple 对 App Store 的搜索算法进行了改进,通过关键字的搜索现在也会将内容关联的 app 进行呈现。Apple Watch 第二代产品有望于明年二季度开始出货。 6 | 7 | --- 8 | 9 | ## 新闻 10 | 11 | 1. [App Store 搜索算法改进](http://www.macrumors.com/2015/11/13/apple-improves-app-store-search-algorithms/):有开发者发现最近 Apple 改善了 App Store 的关键字搜索算法。相比于之前的简单文字匹配,新的搜索算法会寻找与搜索内容功能相似或者类目相同的应用。这对 App Store 发现机制是一个很大的改善,内容实用的应用会得到更多的展示机会。 12 | 13 | 2. [下一代 Apple Watch 的消息](http://money.udn.com/money/story/5710/1308672):Apple Watch 一代的销量和市场反应并没有达到预期,最近关于这款产品第二代的消息已经开始被大家讨论了。台湾的广达电脑近日谈到了 Apple Watch 2 的生产情况,表示已经拿到首波代工订单,正式产品将于明年二季度开始小量出货,明年三季度放量生产。 14 | 15 | 3. [iPad Pro 正式发售](http://www.apple.com/cn/ipad-pro/):作为 Apple 眼中下一代生产力的代表,iPad Pro 于本周正式发售,相信更大的屏幕和专业级别的 Apple Pencil 能够在办公和绘画方面带来全新的体验。作为开发者,如果你的 app 想要利用大屏幕和 iOS 9 的话,建议尽快转到 [Size Class](https://developer.apple.com/library/ios/recipes/xcode_help-IB_adaptive_sizes/chapters/AboutAdaptiveSizeDesign.html) 的布局技术栈中,这样就能够很容易地使 app 工作在多任务模式中。 16 | 17 | ## 教程 18 | 19 | 1. [iOS 保持界面流畅的技巧](http://blog.ibireme.com/2015/11/12/smooth_user_interfaces_for_ios/):文章非常详细地分析了 iOS 界面构建中的各种性能问题以及对应的解决思路,同时给出一个开源的微博列表实现,通过实际的代码展示如何构建流畅的交互。文中所列举的要点都是在开发 iOS 应用时所必须注意的。 20 | 21 | 2. [Where "where" may be used?](http://blog.krzyzanowskim.com/2015/11/13/where-where-may-be-used/):`where` 关键字在 Swift 2 中的使用非常灵活,不论是结合 `if let` 还是 `switch` 语句,都能够大幅增加代码可读性。但是 Apple 的 Swift 官方文档中并没有为我们总结 where 可以使用的所有场景。这篇文章补充了文档在这方面的不足,通过例子列举了所有 where 的使用场合。 22 | 23 | 3. [The Sin in Singleton](https://sandofsky.com/blog/singletons.html):单例在 iOS 中使用得非常多,但是最近都认为应当少用单例。本文作者指出单例并不是反模式,而只是经常被开发者滥用。在最简单的使用例中,使用单例并不会太大问题,但是当情况变得复杂时,或者我们需要同时使用一个类型的单例版本和非单例版本的时候,经常会出现问题。这篇文章对单例使用中的边界例子进行了一些说明。 24 | 25 | 4. [Charles 从入门到精通(中国5折特惠)](http://blog.devtang.com/blog/2015/11/14/charles-introduction/):Charles 是在 Mac 下常用的网络封包截取工具,在做 移动开发时,我们为了调试与服务器端的网络通讯协议,常常需要截取网络封包来分析。Charles 通过将自己设置成系统的网络访问代理服务器,使得所有的网络访问请求都通过它来完成,从而实现了网络封包的截取和分析。这篇文章详细介绍了在 iOS 开发中如何使用 Charles 来获取和修改网络请求。同时现在 Charles 在国内开展了五折优惠,有需要的开发者也可以借此机会入手。 26 | 27 | ## 开源项目 28 | 29 | 1. [MPParallaxView](https://github.com/DroidsOnRoids/MPParallaxView):如果你使用过新的 Apple TV 的话,一定会对 tvOS 中的视差图片效果印象深刻。这个框架用 Swift 在 iOS 上实现了类似的效果,用户可以通过触控或者是重力加速度计来控制视差图片的效果。 30 | 31 | 2. [VirtualGameController](https://github.com/robreuss/VirtualGameController):虽然在 iOS 这样的触摸系统上更适合用点触和滑动来进行操作,但是也有不少游戏 (特别是 FPS 类) 选择使用虚拟手柄的方式来进行交互。自己实现一个虚拟手柄是有一定难度的,这个框架实现了一个可以定制的虚拟手柄。另外,除了单纯的 iOS 以外,框架还支持和 watchOS 以及 tvOS 的互联,功能十分强大。 32 | 33 | 3. [hound-swift](https://github.com/thoughtbot/hound-swift):[Hound](https://houndci.com) 是一项帮助审查代码格式的服务,在 [SwiftLint](https://github.com/realm/SwiftLint) 的基础上,Hound 也增加了对 Swift 的支持。虽然在官方网页上还没有正式更新,但是开发者已经可以在 Swift 项目中添加 Hound 来进行审查了。如果你想在你的项目中加入的话,可以参照[这里](https://github.com/thoughtbot/hound/pull/944)的文档进行配置。 34 | -------------------------------------------------------------------------------- /article/27.md: -------------------------------------------------------------------------------- 1 | # iOS开发周报:库克表示暂时不会考虑推出混淆 Mac 和 iPad 的产品,Apple 就证书过期事件向开发者作出解释 2 | 3 | 标签:iOS Mac 移动 移动开发技术周报 4 | 5 | 摘要:库克接受采访时表示 Apple 认为客户并没有在寻找一款类似 Surface Pro 这样融合笔记本电脑和平板电脑的产品,因此 Apple 不会推出类似产品。Mac App Store 应用损坏事件其实是 Apple 失误,开发者收到解释和道歉邮件。 6 | 7 | --- 8 | 9 | ## 新闻 10 | 11 | 1. [库克表示暂时不会考虑推出 Mac 和 iPad 的“融合”产品](http://www.independent.ie/business/technology/tim-cook-apple-wont-create-converged-macbook-and-ipad-34201986.html):虽然 Apple 推出了大屏的 iPad Pro,以图在办公领域获取到更大的蛋糕,但是这并不意味着 Apple 打算像微软那样彻底混淆平板电脑和笔记本之间的界限。Apple CEO 库克最近在接受采访时表示,Apple 暂时不会考虑推出 Mac 和 iPad 的融合产品,因为那样的产品无法满足用户体验上的要求,而且 Apple 判断用户并没有在寻找一款那样的混合型产品。Surface Pro 系列在近年取得了一定成绩,最新系列的 Surface Pro 4 更是直接将 Macbook Air 作为竞争对手进行比较。另一方面,现在 iPad 性能日益强大,羸弱的 iOS 系统似乎已经逐渐成为制约其进一步发展的因素。我们期待 Apple 能在近期对这一矛盾作出改善。对于开发者来说,在未来一段时间我们还是需要专注于为不同平台提供合适的交互和体验。 12 | 13 | 2. [Apple 向开发者发送邮件,对 Mac App Store 证书过期问题进行解释和道歉](http://www.macrumors.com/2015/11/17/apple-responds-mac-app-store-certificate/):Mac App Store 自 2011 年开业以来,一直承担了 OS X 上软件分发的重要角色。而像 Windows Store 等很多后来者,在用户体验和功能上也或多或少借鉴了 Mac App Store 的模式。上周,一些用户发现打开从 App Store 下载的 app 时会提示应用已经损坏,需要重新下载才能使用,这给广大用户造成了不小的麻烦。究其原因,是因为 Apple 之前升级了 App Store 的证书,而缓存在本地的证书到期导致了用户必须重启系统输入凭证以重新获取证书。但是新证书中使用了 SHA-2 算法,而不是之前的 SHA-1,这导致了一些使用早期版本的 OpenSSL 来做订单验证的 app 无法正确进行验证,继而无法启动。Apple 已经将证书回滚到使用 SHA-1,并向开发者发送了邮件进行解释和提醒,在邮件中 Apple 希望还在使用 SHA-1 的开发者能尽快进行升级。 14 | 15 | 3. [阿黛尔拒绝将新专辑《25》上架包括 Apple Music 和 Spotify 在内的流媒体音乐服务](http://www.theguardian.com/music/2015/nov/19/adele-new-album-25-not-stream-spotify-apple-music):阿黛尔的最新专辑《25》于上周正式发售,但是阿黛尔及其团队决定暂时不将这张专辑提供给流媒体服务。这也就是说,订阅了 Apple Music,Spotify 或者 Google Music 的用户将无法在第一时间听到这张专辑,而需要另行购买或者等待一段时间。作为回应,Apple 也拒绝了将《25》的实体 CD 放在 Apple Store 进行销售的请求。这可以说是传统音乐企业和唱片公司与数字音乐和流媒体服务的一次重要角力。流媒体音乐在最近几年取得了爆发式的发展,可以说已经威胁到唱片公司和音乐人代理的生存空间。也许《25》的销售情况将会影响到未来几年音乐服务的形态和走势。 16 | 17 | ## 教程 18 | 19 | 1. [ReactiveCocoa vs RxSwift](https://ashfurrow.com/blog/reactivecocoa-vs-rxswift/):Ash Furrow 是国外有名的开发者,从很早开始他就是 functional reactive programming (函数式响应编程,FRP) 的支持者和使用者。在这篇文章里作者并没有从技术的角度来对比 Reactive Cocoa 和 RxSwift 的异同或者优劣,而是从更高的层次向一个初次接触响应式编程的开发者提出了一些建议。使用哪种实现来实践响应式编程并不是重点,而重点应该是理解响应式的思想。作者还很俏皮地给了一个随机按钮帮你选择应该使用的框架,如果你之前没有了解过响应式编程,可以试试看在下一个项目中使用一点相关内容,会是对你编程思路的扩展。 20 | 21 | 2. [iOS Cookies](http://www.ioscookies.com/):这个网站按照功能分类收录了一些 Swift 的开源框架。如果平时没有特别注意在 GitHub 进行收藏的话,可能在开发中想要寻找某个框架会比较困难。不过在这个站点里你可以根据功能来找到需要的框架,会很方便。如果你发现了优秀的 Swift 框架,也可以通过提交的方式来将它加进到这个站点。 22 | 23 | 3. [Offline UI testing on iOS with stubs](http://tech.just-eat.com/2015/11/23/offline-ui-testing-on-ios-with-stubs/):Xcode 7 为我们带来了 UI 测试框架,这篇文章使用 Stub 模拟网络的方式,把 UI 测试和网络的单元测试结合起来,为 app 的完整的业务逻辑流程测试提供了一种思路。相对于单一分割的单元测试和 UI 测试,这类方式将测试综合进行可能从理论上来说并不是很优秀,但是在工程中却可以比分割的测试更能保证项目质量,有其可取之处。 24 | 25 | ## 开源项目 26 | 27 | 1. [Perfect](https://github.com/PerfectlySoft/Perfect):Swift 暂时还没有开源,但是随着 2015 年邻近结束,相信这一 Big Day 离我们也不会太远了。Swift 开源后能想到的最直接的使用场景就是在 Linux 上进行服务端开发,现在也已经有不少开发者在这方面做了一些努力了。Perfect 就是一次基于 Swift 的服务器的尝试,它的目的是让我们可以同时在客户端和服务端使用 Swift 进行开发。现在这个项目还只支持 iOS 和 OS X,但是 Linux 的支持只缺一个开源编译器。随着 Swift 的开源,可以预见这样的跨平台项目会越来越多。 28 | 29 | 2. [SQLite.swift](https://github.com/stephencelis/SQLite.swift):一个 Swift 写的 SQLite3 驱动。 SQLite 以其轻量和快速著称,而 Swift 最大的特点之一是类型安全。这个框架在 SQLite 上添加了 Swift 语言层进行包装,试图将两者的优点进行结合。使用 SQLite.swift,你可以用类型安全的方式来对数据库进行访问和操作,这对保证软件质量和减少崩溃会很有意义。 30 | 31 | 3. [SFFocusViewLayout](https://github.com/fdzsergio/SFFocusViewLayout):自从 tvOS 问世以来,基于 Focus 的交互已经迅速成为国外 app 设计的关键字。虽然在 iOS 上,应为触控操作非常方便,使得 Focus 的存在感并不如像在 tvOS 上那么强,但是偶尔加入一点类似的要素,还是很新颖和吸引眼球的交互方式。这个框架实现了一个带有 focus 要素的 collection view,滚动到最上方的 cell 将显示更多的内容,并占据加大的位置,非常醒目。 32 | -------------------------------------------------------------------------------- /article/28.md: -------------------------------------------------------------------------------- 1 | # iOS开发周报:新一代 iPhone 可能取消耳机插口,Facebook 发布 tvOS SDK 2 | 3 | 标签:iOS Mac 移动 移动开发技术周报 4 | 5 | 摘要:新一代 iPhone 可能为进一步降低机身厚度而取消耳机插口,改用 Lightning 接口。iPhone 6c 传言,2016 年可能迎来两次 iPhone 发布会。 6 | 7 | --- 8 | 9 | ## 新闻 10 | 11 | 1. [新一代 iPhone 可能取消耳机插口,改用 Lightning 接口](http://www.macotakara.jp/blog/rumor/entry-28639.html):虽然距离下一代 iPhone 发售还遥遥无期,但是最近已经有关于这款 “iPhone 7” 的一些传言了。据称新一代 iPhone 为了进一步降低机身厚度,将淘汰掉现在事实的耳机行业标准的 3.5mm 耳机几口。耳机接口成为机身厚度的瓶颈已经有一段时间了,但是鉴于市面设备的支持,手机产商往往只能做妥协。Apple 在很早以前就考虑过 2.5mm 的耳机插口,但是去年 Apple 推出的 Lightning 接口的耳机标准似乎暗示着 Apple 可能在今后的设备中更倾向于使用类似的技术。 12 | 13 | 2. [Apple 可能在 2016 年推出 4-inch 手机升级版 iPhone 6c](http://idropnews.com/rumor-claims-apple-is-building-a-new-4-iphone-5s-with-upgraded-internals):在早些时候,有传言表示 Apple 正在考虑在保持近来的大屏手机的趋势的同时,推出一款小屏幕手机的升级版。最近,有媒体给出了更新的消息。这款设备很可能被命名为 iPhone 6c,它将继承 iPhone 5s 的包括设备尺寸和主要功能在内的特性,并且进行硬件上的升级,以提供给那些更倾向于选择屏幕小一点的用户。这款设备有可能会在 2016 年上半年发布,而在下半年,将会按惯例发布新的旗舰机型。如果这个消息成真,那么它将会改变 iPhone 每年一次发布的传统。 14 | 15 | 3. [Facebook 推出 tvOS 版 SDK](https://developers.facebook.com/blog/post/2015/11/25/tvOS-SDK-beta/):随着新一代 Apple TV 的热销,以及 Apple 对 Apple TV App Store 的搜索算法的调整和分类目录的开放,现在 Apple TV 开发在国外可以说是相当火热。但是 tvOS 上一个比较大的限制就是不允许使用 WebView 来直接显示 web 的内容,而使用 Apple TV 的键盘输入体验又非常糟糕。这在很多时候,限制了像是注册或者登陆的用户体验。Facebook 本周发布了专门针对 tvOS 的 SDK,其中 “使用 Facebook 登陆” 功能专门针对 tvOS 进行了优化。用户可以使用手边的其他设备来进行登录,而不需要直接在电视上进行输入,这可能也会是今后 tvOS 应用的标准的登陆方式。 16 | 17 | ## 教程 18 | 19 | 1. [tvOS视差按钮的ObjC实现](http://anius.io/2015/11/18/tvOS视差按钮的ObjC实现/):在之前的[周报](https://github.com/DroidsOnRoids/MPParallaxView)中我们提到了一个 Swift 实现的在 iOS 上模拟 tvOS 的视差按钮效果的框架,这篇文章介绍的是使用 Objective-C 来进行的另一种实现。文章详细介绍了实现视差效果的思路和具体的方法,以及其中遇到的问题,值得一读。 20 | 21 | 2. [Optimizing Facebook for iOS start time](https://code.facebook.com/posts/1675399786008080/optimizing-facebook-for-ios-start-time/):应用的启动速度在用户体验中是非常重要的环节。如果应用启动迅速平滑的话,往往可以给用户留下很好的第一印象;而反之如果首次启动就要花费很长时间的话,也许你的应用就不会有第二次被打开的机会了。这篇来自 Facebook 工程师的文章介绍了一些优化启动时间的方案和需要注意的事项。 22 | 23 | 3. [iOS Unit Testing: Dependency Injection with Structs in Swift](http://natashatherobot.com/ios-unit-testing-dependency-injection-with-structs-in-swift/):依赖注入是一种常用的测试手段,在别的语言中,使用依赖注入通常需要通过子类化来完成。而事实上,Swift 编程更倾向于使用值类型,这在一定程度上和子类或者继承的概念是相违背的。不过如果我们通过使用面向 protocol 来进行构建的方式的话,就可以很容易地为值类型进行依赖注入测试了。这篇文章就为我们阐述了这方面的一些知识。 24 | 25 | 4. [fastlane Tutorial: Getting Started](http://www.raywenderlich.com/116065/fastlane-tutorial-getting-started):持续集成 (CI) 一直是企业开发中重要的一环。良好的 CI 不仅可以降低程序中的缺陷,也有利于让开发者愉快地工作和准时递交优质的代码产品。但是配置一个 CI 环境往往本身也很具有挑战。[fastlane](https://fastlane.tools) 是一系列开源的脚本组件,可以帮助我们迅速方便地建立自动化的测试,打包甚至提交流程。这篇教程通过实例讲解了使用 fastlane 的初步。 26 | 27 | ## 开源项目 28 | 29 | 1. [netfox](https://github.com/kasketis/netfox):一个可以在应用内监视所有网络请求和返回结果的调试用的框架。通过在项目中加入这个框架并启动后,所有的网络请求都将被记录并且可以被查看。在以往我们可能都需要依赖 Mac 上的网络代理来进行监视,在构建调试或者测试的应用时使用这个框架可以让我们免于配置和连接电脑的步骤,直接在项目中监视这些网络请求,十分方便。项目使用 Swift 2.1 进行构建的,但是你也可以在 Objective-C 的项目中使用这个框架。 30 | 31 | 2. [AutocompleteField](https://github.com/filipstefansson/AutocompleteField):为你的输入框添加自动补全功能的框架。通过设置备选列表,用户在输入时便可以得到满足前缀的词条的自动补全功能。虽然功能上比较简单,但是可以带来非常愉悦的用户体验。如果你的应用中有一些可以预测的用户输入,那么使用这个框架来为你的用户节省时间,这也会为应用带来不少好评。 32 | 33 | 3. [ALCameraViewController](https://github.com/AlexLittlejohn/ALCameraViewController):一个 Swift 写的用来引导用户通过摄像头或者是本地相册获取照片并进行裁剪的框架。获取照片并裁剪是在用户设置头像或者是上传照片时的必备需求,通常我们需要经过验证/请求权限,判断用户设备可用性,然后再进行摄制和裁剪。虽说整个过程和逻辑并不复杂,但是也要花费不少时间来编码和测试。这个框架为我们提供了一个“开袋即食”的解决方案,可以作为这个特性的参考或者备选实现方式。 34 | -------------------------------------------------------------------------------- /article/29.md: -------------------------------------------------------------------------------- 1 | # iOS开发周报:Swift 开源,新的包管理和 Swift 3.0 前瞻 2 | 3 | 标签:iOS Mac 移动 移动开发技术周报 4 | 5 | 摘要:Apple 开源 Swift,包括编译器,标准库,包管理系统等内容。知名 OS X 应用 Sketch 宣布推出 Mac App Store。 6 | 7 | --- 8 | 9 | ## 新闻 10 | 11 | 1. [Apple 开源 Swift](https://swift.org):WWDC 15 上 Apple 宣布会在年内开源 Swift,而本周 Apple 如约开源了 Swift。公开的源代码包括之前大家已经知道的 Swift 编译器,标准库和 REPL 环境等,另外这次 Apple 开同时开源了一个 Swift 重写的 NSFoundation 框架和一个全新的包管理系统。所有的项目都可以运行在 OS X 和 Linux 上,这也是 Apple 迈向跨平台的重要一步。Apple 以 Apache License 2.0 以及一个 runtime 例外的条款进行开源,这是一个比较宽松的条件,基本意味着你可以在自己的项目中保留版权说明的情况下随意使用。对于 app 开发者来说,Swift 开源意味着会有更多社区力量成为持续不断的开发,并推进这门语言的发展。同时 Swift 的路线图也在[这里](https://github.com/apple/swift-evolution)进行了公布,开发者们可以在这里找到 Swift 2.2 和 3.0 可能迎来的变化。 12 | 13 | 2. [Apple Watch 第三季度估算销量为 390 万部](https://www.idc.com/getdoc.jsp?containerId=prUS40674715):Apple 选择不在财报中单独列出 Apple Watch 的销量,这让业界纷纷猜测。最近国际数据公司 (IDC) 给出了一份全球可穿戴设备销量的预估。2015 年第三季度 Apple Watch 的估算销量在 390 万部左右,在可穿戴设备的市场上仅落后于 Fitbit。这个数字相信也可以为企业决定是否要开发适配 Apple Watch 的应用的决策提供了一些依据。 14 | 15 | 3. [知名 OS X 应用 Sketch 宣布推出 Mac App Store](http://blog.sketchapp.com/post/134322691555/leaving-the-mac-app-store):和 iOS 的 App Store 不同,因为 OS X 的开发者可以自行销售软件,所以上架 Mac App Store 并不是唯一选择。Sketch 是 OS X 上一款绘图软件,专注于为应用界面和 UI 进行绘制,受到很多开发者和设计师喜爱。本周 Sketch 开发团队宣布他们将退出 Mac App Store,而仅在自己的商店进行授权销售。此前,用户可以选择在 Apple 商店或者 Sketch 商店进行购买。Sketch 给出的理由是无法提供一些沙盒外的功能,较长的审核时间不利于 bug 修正,以及没有升级价格等问题。这些确实也是当前 Mac App Store 面临的主要问题,本次 Sketch 团队的退出是一个危险的信号,希望 Apple 能及时改进 App Store 的体验。 16 | 17 | ## 教程 18 | 19 | 1. [Objective-C 引用计数原理](http://yulingtianxia.com/blog/2015/12/06/The-Principle-of-Refenrence-Counting/):一篇比较底层的探索 Objective-C 中引用计数实现的文章。虽然在 ARC 时代对 iOS 开发者来说内存管理已经非常简单了,但是这一套内存管理从原理上并没有改变。从一个 iOS 入门者进阶的道路上,内存管理的方式和原理总是不可能绕过的门槛。这篇文章和之前的[黑幕背后的Autorelease](http://blog.sunnyxx.com/2014/10/15/behind-autorelease/)从比较底层的角度为我们详解了这方面的内容。不论是 iOS 开发新人还是已经有一定层次的开发者应该都能在这两篇文章中有所收获。 20 | 21 | 2. [Xcode插件: MMNavigatorFont](http://adad184.com/2015/12/04/xcode-plugins-MMNavigatorFont/):一个 Xcode 插件开发的教程,从目标开始到最终效果一步步为我们讲述了如何实现一个可以替换 Xcode 项目面板中字体的插件。Xcode 插件的开发现在没有 Apple 的官方支持,不过 Apple 对于插件开发是采取默许态度的。作为业余时间满足开发好奇心的话,开发 Xcode 插件还是很有意思的一项活动。如果你有需要 hack Xcode 的需求的话,这篇文章可以带领你入门 Xcode 插件开发。 22 | 23 | 3. [OS X Feast](http://www.raywenderlich.com/121284/introducing-the-os-x-feast):Raywenderich 推出了一系列 OS X 开发的教程,帮助开发者上手 OS X 开发。相对于 iOS 开发,OS X 相对来说复杂一些,但是同时竞争也不如 iOS 上那样激烈。如果你已经精通于 iOS 开发,想要尝试一些其他东西的话,OS X 开发会是一个很好的方向。因为两种开发使用的语言是一样的,而两者所使用的框架在最近也有融合的趋势,因此对 iOS 开发者来说转换到 OS X 平台的时候也会非常简单。 24 | 25 | ## 开源项目 26 | 27 | 1. [Swift](https://github.com/apple/swift):本周最大的新闻就是 Swift 开源了,这里是 Swift 的开源主仓库。可以看到 Swift 项目的第一行代码是在 2010 年提交的。对于语言设计者和编译器的开发者来说,Swift 会是非常好的学习材料。对于 Swift 的一般的使用者和应用开发者来说,语言开源本身意味着之后这门语言的发展将由开发者们一同决定。而在今后的应用开发中,相比起编译器,我们更有可能接触到的是 [Swift Package Manager](https://github.com/apple/swift-package-manager) 这个包管理系统。 28 | 29 | 2. [Crayons](https://github.com/Sephiroth87/Crayons):在应用开发中如果使用 Interface Builder 来构建界面的话,经常会需要为 view 指定颜色。Crayons 是一个帮助我们记录在 IB 中使用过的颜色的插件。你可以为项目添加定义颜色列表,然后在颜色选择界面中直接选择颜色,而不用再进行颜色输入。通过更改列表中的定义,还可以直接将 IB 中的颜色都进行更改,非常方便,这可以大大加快应用的界面开发的速度。 30 | 31 | 3. [Swiftline](https://github.com/Swiftline/Swiftline):随着 Swift 开源,相信会涌现出不少跨平台的命令行工具,而 Swiftline 就是一个帮助我们开发命令行工具的项目。它提供一系列工具链,可以让我们很轻易地处理命令行输入的参数,构建问答式的命令行交互,以及在命令行中输出彩色的字符串等等。如果你要用 Swift 构建命令行工具的话,这个项目会为你的项目提供很好的起点。 32 | 33 | 4. [Chatto](https://github.com/badoo/Chatto):Chatto 是一个 Swift 的聊天框架,可以很容易地实现类似信息 app 那样的聊天界面,包括图片发送,内容分页,可交互的键盘等等,是一个实现非常完整的解决方案。 34 | -------------------------------------------------------------------------------- /article/3.md: -------------------------------------------------------------------------------- 1 | # iPhone 6s 将配置 Force Touch - iOS移动开发周报 2 | 3 | 标签:移动 iOS 移动开发技术周报 WWDC iPhone6s 4 | 5 | 摘要:WWDC 15 开幕,iPhone 6s 将配置 Force Touch 6 | 7 | --- 8 | 9 | ## 新闻 10 | 11 | 1. [iPhone 6s 可能将全面配置 Force Touch](http://www.patentlyapple.com/patently-apple/2015/06/rumor-may-confirm-force-touch-coming-to-the-next-iphone.html):苹果供应商 GIS 已经“确认”下一代 iPhone6s 将会配备 Force Touch 技术。Force Touch 是一种可以感应压力的触摸技术,目前已经被用于 Apple Watch 的表面以及新款的 12 寸 Mac Book 触摸板上,相应的 API 也已经在最新的 SDK 中提供。随着 iPhone 6s 中配置 Force Touch,今后必然也会有更多的 app 加入利用这一特性的新要素。 12 | 13 | 2. [Swift 发布一周年](http://www.infoq.com/cn/news/2015/06/swift-anniversary):虽然没有正式的生日蛋糕,但是 Swift 已经满一周岁了。在这一年里 Swift 已经在很多 app 中被使用,而 Swift 的性能和稳定性也在不断得到改进和提升。我们有理由相信在 Apple 的继续推进下 iOS 开发者们能拥有越来越好的开发环境和工具。 14 | 15 | ## 教程 16 | 17 | 1. [《白板编程浅谈——Why, What, How》](http://lucida.me/blog/whiteboard-coding-demystified/):虽然这篇文章和具体的技术无关,但是作为技术人员,面试中的技术考察是必须要面对的。越来越多的企业在面试的时候会选择通过类似白板编程的方式来检验应聘者的技术能力,本文详述了白板编程的对应方法,可以帮助你更好地完成这一面试环节。 18 | 19 | 2. [《Objective-C Autorelease Pool 的实现原理》](http://blog.leichunfeng.com/blog/2015/05/31/objective-c-autorelease-pool-implementation-principle/):虽然在 ARC 时代内存管理的问题似乎离我们已经越来越远,但是不了解内存管理机制的话,还是难免会犯这样那样的错误。本文通过一些探索阐述了 autorelease 的工作机制和一些细节。想要深入了解这方面内容的朋友不妨看一看。 20 | 21 | 3. [《JSPatch实现原理详解》](http://blog.cnbang.net/tech/2808/):这篇文章是 [JSPatch](https://github.com/bang590/JSPatch) 的作者纂写的,从基础原理、方法调用和方法替换三块内容介绍了整个 JSPatch 的实现原理和细节。如果你对这个项目或者利用 Objective-C 动态特性来热更新有兴趣的话,这篇文章是不容错过的。 22 | 23 | 4. [《How To Create an Xcode Plugin》](http://www.raywenderlich.com/94020/creating-an-xcode-plugin-part-1):来自 Raywenderlich 的一篇 Xcode 插件制作教程。虽然开发一款 Xcode 插件并不是很容易的事情,但是确实充满了挑战和乐趣。有兴趣研究的同学不妨阅读这篇系列教程,相信你会对 Xcode 的工作方式以及 Objective-C 的动态特性有更深入的理解。 24 | 25 | ## 工具 26 | 27 | 1. [OSStatus](http://www.osstatus.com):如果你和 Apple 的音频处理或者其他一些较底层的框架打过交道的话,一定不会对 OSStatus 状态码陌生,它表示某些地方出错了。而在框架中这些状态码只会输出一个类似 “-10005” 这样的数字,没有任何其他提示。你想要知道这个数字代表什么的话,只能到茫茫文档中去查找,这通常会花费你数分钟甚至十多分钟。OSStatus.com 这个网站将这些状态码进行了汇总,并提供了搜索功能,相当方便。 28 | 29 | ## 开源项目 30 | 31 | 1. [PermissionScope](https://github.com/nickoneill/PermissionScope):一个 Swift 编码的框架,用来优雅地向用户提出权限请求。如果你厌倦或者不屑于简单粗暴地弹出一个窗口去向用户要权限的话,这个框架会是很好的选择。PermissionScope 不仅美观清晰,而且可以让权限使用请求的通过率大幅提升,这是一个有追求的 app 所必须的。 32 | 33 | 2. [SmileTouchID](https://github.com/liu044100/SmileTouchID):简单地在 app 中集成 Touch ID 和密码解锁的库。使用起来非常简单,并且提供了一些自定义外观的选项。 34 | 35 | 3. [EasyAnimation](https://github.com/icanzilb/EasyAnimation):对 `UIView` 的 `animateWithDuration:animations:` 方法进行了扩展,使得你可以直接在这个方法中进行 `CALayer` 的动画。对于动画比较丰富的 app,使用这个框架可以节省不少重复的代码量。 36 | 37 | 4. [CoreStore](https://github.com/JohnEstropia/CoreStore):Swift 写的一个很有意思的 CoreData 的封装。可以让你方便地使用类似 SQL 语句的语法来实现 CoreData 的一些操作。CoreData 的难点一直在与不同 context 间的合并和同步,CoreStore 在这方面也做了一些努力。 38 | 39 | 5. [Valet](https://github.com/square/Valet):又一个 Keychain 的封装。相比起已经有一些年头的项目,这个框架提供了像是 iCloud Keychain 和 TouchID 的支持,更为“现代”。另外 Valet 也添加了访问加密内容的时间限制,相比起简单的 Keychain 存储,这个框架具有更强的特性。 40 | 41 | -------------------------------------------------------------------------------- /article/30.md: -------------------------------------------------------------------------------- 1 | # iOS开发周报:iOS 9.2 发布,tvOS App Store 首月表现统计 2 | 3 | 标签:iOS Mac 移动 移动开发技术周报 4 | 5 | 摘要:iOS 9.2 本周发布,除了常规的 bug 修复以外,Apple 还更改了第三方 app 的 extension 在 Safari View Controller 中的行为;tvOS 发布一个月,tvOS App Store 统计。 6 | 7 | --- 8 | 9 | ## 新闻 10 | 11 | 1. [iOS 9.2 发布,包含一系列修正和 Safari View Controller 行为](http://www.macrumors.com/2015/12/08/apple-releases-ios-9-2/):Apple 本周发布了 iOS 9.2 的更新,其中包含了对 Apple Music 和 Mail 等一系列 app 的常规的 bug 修正。对于开发者来说,可见的主要区别在于系统对 Safari View Controller 的行为的调整。你的 app 内如果使用了这个控件的话,现在可以在其中直接调用第三方 app 的扩展了。 12 | 13 | 2. [tvOS 发布一个月,tvOS App Store 表现总结](http://blog.appfigures.com/everything-you-need-to-know-about-the-new-apple-tv-app-store/):第四代 Apple TV 上市已经一个月了,tvOS App Store 是继 iOS 和 Mac Store 之后 Apple 平台的第三个软件商店,其表现也值得期待。应用商店和行为统计服务商 app figures 发布了一个 tvOS App Store 的统计,在一个月的时点上,现在已经有接近 3000 个应用在进行销售。应用的增长速度十分稳定,预计在 2016 年初几个月内就可以达到 10000。同时这份分析也对应用分类和售价等进行了一些解读。 14 | 15 | ## 教程 16 | 17 | 1. [Swift Package Manager: Create and Use a X11 package on Linux](http://appventure.me/2015/12/08/swift-ubuntu-x11-window-app/):Swift Package Manager 是 Apple 上周开源的 Swift 中的一部分,这篇教程讲述了如何在 Linux 上创建和使用一个兼容 X11 的 package。这可以作为我们用 Swift 来创建一个 Linux X11 桌面 app 的基础和起步。 18 | 19 | 2. [Skilled.io](http://www.skilled.io):Skilled.io 是新成立的一个 Swift 开发者社区,由 Swift Summit 会议的组织机构驱动,会定期发布一些会议视频和分享文章等。Swift Summit 是一个水平很高的开发者会议,可以期待 Skilled.io 的内容也会很有意义。现在 Skilled.io 实行邀请注册制,如果你有意贡献内容的话,可以考虑申请一个邀请。 20 | 21 | 3. [接口编程那些事](http://www.olinone.com/?p=429):在 Objective-C 中,接口又可以理解为 Protocol,面向接口编程又可以理解为面向 Protocol 编程,或者面向协议编程。而在 Swift 中,苹果大幅强化了 Protocol 在这门语言中的地位,整个 Swift 标准库也是基于 Protocol 来设计的。在这篇文章中,作者比较了面向对象和面向接口的优劣,以及在实际业务中使用接口编程的一些好处,可以作为转变编程思想的一些指导。 22 | 23 | 4. [Swift Weak References](https://www.mikeash.com/pyblog/friday-qa-2015-12-11-swift-weak-references.html):Swift 开源以后,我们可以开始挖掘一些语法背后的机制。这篇文章分析了 Swift 中 weak 的实现方式。如果你想要读一读 Swift 的源码,却又不知道要如何入手的话,通过阅读这篇文章来熟悉 Swift 的代码和组织方式。 24 | 25 | 5. [Universal dynamic dispatch for method calls](https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20151207/001948.html):Chris Lattner 在 swift-evolution 的邮件列表中对于开发者疑问关于统一动态派发调用提案的回答。通过对比现有的其他语言实现方式,Chris 阐述了为何要混合动态和静态调用,以及一些语言设计层面的考虑。如果你对 Swift 的原理机制有兴趣的话,可以读一读这篇回复。 26 | 27 | ## 开源项目 28 | 29 | 1. [AFNetworking](https://github.com/AFNetworking/AFNetworking):AFNetworking 已经不需要更多介绍了,它是 iOS 开发中使用最广阔的框架之一,帮助我们节省了很多网络处理相关方面的代码。本周 AFNetworking 正式升级到了 3.0 版本。相比原来的版本,新版本中添加了 tvOS,Carthage,一系列 CI 的支持,以及更好的 Swift module 导出等。 30 | 31 | 2. [Laurine](https://github.com/JiriTrecak/Laurine):Swift 要解决的一个重要问题就是类型和对象的安全性,而直接使用字符串来访问 app 的资源其实是和这一要求相违背的。对于像是图像资源或者是 cell 或者 segue id,我们可以用 [R.swift](https://github.com/mac-cain13/R.swift) 这样的工具来进行提取和组织,而对于本地化字符串来说,Laurine 就是一个类似的工具,它可以帮助你通过读取项目中的本地化文件自动生成对应的结构,让你用安全的方式来访问和使用本地化字符串、 32 | 33 | 3. [SwiftyBeaver](https://github.com/skreutzberger/SwiftyBeaver):一个 Swift 的 log 系统,可以让你在 Xcode 或者是终端中显示彩色的输出信息。SwiftyBeaver 也支持不同级别的 log 输出,可以让我们在开发中轻易地控制输出内容,以及寻找到我们关心的输出。另外,这个框架也支持使用 Swift Package Manager 进行编译和使用在 Linux 中。 34 | -------------------------------------------------------------------------------- /article/31.md: -------------------------------------------------------------------------------- 1 | # iOS开发周报:Apple Pay 预定来年入华,国内首次 Swift 开发者会议即将召开 2 | 3 | 标签:iOS Mac 移动 移动开发技术周报 4 | 5 | 摘要:Apple Pay 预定来年入华,计划将在明年和银联合作在中国开始 Apple Pay 业务;国内首次 Swift 开发者会议即将召开; 6 | 7 | --- 8 | 9 | ## 新闻 10 | 11 | 1. [Apple 和中国银联达成 Apple Pay 合作](http://www.apple.com/cn/pr/library/2015/12/18Apple-China-UnionPay-to-Bring-Apple-Pay-to-China.html):Apple Pay 是 Apple 推出的使用手机管理信用卡信息和进行支付的服务,本周 Apple 和中国银联达成 Apple Pay 合作,计划将在明年在中国开始 Apple Pay 业务。在此之前,Apple Pay 仅在美国地区可以使用,选择中国作为 Apple Pay 的第二站,也从侧面表现了中国地区业务现在对 Apple 的重要性。现在已经有一些用户收到了 Apple Pay Beta 版的邀请,而国内部分商店也陆续开始装置支持 Apple Pay 的支付设备。对于存在应用内支付的应用来说,现在应该就可以考虑开始进行 Apple Pay 的支持和开发了。 12 | 13 | 2. [中国首届 Swift 开发者大会 @Swift 将于 1 月在京召开](http://atswift.io):@Swift 是由 @Conf 团队组织的一场非营利的技术大会,是国内开发者自己组织的一次 Swift 技术分享的会议。类似的会议在国外是一种开发者们互相交流心得和成果的常见方式,而在国内的 Swift 开发社区还属首次。本次会议邀请了像 objc.io 的 Chris,raywenderlich 的 Greg 等国外开发者,以及一些知名的国内开发者来进行分享。 14 | 15 | ## 教程 16 | 17 | 1. [小笨狼与LLDB的故事](http://www.jianshu.com/p/e89af3e9a8d7):LLDB 是 Xcode 项目所使用的默认的调试器,平时我们在 Xcode 环境中开发调试时其实都使用的是 LLDB。除了最基本的命令以外,LLDB 还有很多其他使用方式。这篇文章全面地从基础开始讲解了 LLDB 的一系列使用方式和技巧。如果你平时觉得调试器功能不过如此,或者有遇到不知道应该如何调试一段程序的话,阅读这篇文章应该会很有帮助。 18 | 19 | 2. [OC 自动生成分类属性方法](http://nathanli.cn/2015/12/14/objective-c-元编程实践-分类动态属性/):虽然 Objective-C 是一门已经上了年纪的语言,但是因为其强大的 runtime 的存在,我们可以通过代码将很 modern 的方法应用到这门古老的语言中去,其中元编程 (meta programming) 就是一个很好的例子。在 Objective-C 的 Category 中通过 Associated Object 的方式为已有类型添加属性是常见的做法,这篇文章通过讲解如何在运行的时候自动进行添加,阐述了元编程思想在 Objective-C 中的一些应用。 20 | 21 | 3. [When (not) to use guard](http://radex.io/swift/guard/):guard 是 Swift 2 中添加的流程控制关键字,相比起 if let,guard 提供了更优秀的提前返回机制,更利于我们写出简洁干净的代码。但是有些时候一味地使用 guard 来进行判断并不是好主意。这篇文章 22 | 23 | 4. [Open source Swift](http://www.jessesquires.com/open-source-swift-weekly-2/):Swift 虽然仅仅只开源了两个星期,但是开源社区已经在不停向这个项目贡献代码了。而 Apple 也展现出了开放的姿态,可能是负责 Swift 的项目组有较多的自主权,目前为止整个社区的讨论氛围非常好,也有很多来自开源贡献者的优质提交被合并到了仓库中。比如本周就有一个[重量级的 commit](https://github.com/apple/swift/commit/c258f991f64a431da57fc79b66e879e5062fba3b#commitcomment-14971959) 被合并,它修正了 91% 的现有的编译器崩溃的问题。而这个博客现在每周会整理 Swift 开源中的重要的讨论和提交,这对一线开发者尽早了解这门语言的动态情报很有帮助,有时候 Swift 的邮件列表中也会出现很精彩的讨论,如果你没有每天看邮件列表的时间和耐心的话,每周在这里查阅一下讨论也是不错的选择。 24 | 25 | ## 开源项目 26 | 27 | 1. [Tailor](http://tailor.sh):和 [SwiftLint](https://github.com/realm/SwiftLint) 相似,Tailor 是一个 Swift 代码的静态分析工具,可以用来检查代码格式是否符合要求,以及帮助寻找代码中可能的潜在 bug。和 SwiftLint 本身是由 Swift 编写的不同在于,Tailor 是基于一个成熟的 Java parser 生成器 [ANTLR](http://www.antlr.org) 进行开发的,有更加广泛的使用基础。这个项目既能提供命令行输出,也可以集成在 Xcode 环境中提供很好的提示。对于代码格式有要求的开发者可以尝试一下。 28 | 29 | 2. [Whisper](https://github.com/hyperoslo/Whisper):Whisper 是一个灵活的在 app 内进行通知呈现的框架,它可以提供三种不同的方式来显示符合 iOS 设计风格的提示信息。另外,Whisper 也自动处理了像是 scroll view 滚动以及 view controller 转场等情况。如果你需要在自己的应用中加入一个类似的消息通知系统来在某些事件发生时对用户进行提示的话,这个框架应该是可选方案之一。 30 | 31 | 3. [ReactiveCocoa](https://github.com/ReactiveCocoa/ReactiveCocoa):Cocoa 开发中老牌的 FRP 框架 ReactiveCocoa 本周迎来了 version 4.0 的第一个 Release Candidate 版本,这意味着在 Swift 2 发布半年之后,适配 Swift 2 的 ReactiveCocoa 的 API 终于稳定了。因为 ReactiveCocoa 从去年开始就全面转向 Swift,而基本放弃了 Objective-C 的支持,可以说是基础框架中做派比较激进的。而在 Swift 新版本发布半年后才稳定 API,也从另一方面说明项目对于 Swift 时代适合 Cocoa 开发的方式的充分思考。与此同时,Swift 的另一个响应式框架 [RxSwift](https://github.com/ReactiveX/RxSwift) 也即将发布支持 Swift 2 的版本。随着 Swift 自身的逐渐稳定,相信很多基础框架也会迎来新的时期。 32 | -------------------------------------------------------------------------------- /article/32.md: -------------------------------------------------------------------------------- 1 | # iOS开发周报:2015 年 Apple 发布产品回顾,移动爆料新款 4 寸屏 iPhone 明年 4 月问世 2 | 3 | 标签:iOS Mac 移动 移动开发技术周报 4 | 5 | 摘要:中国移动新品 PPT 曝光新款 4 寸系列将于明年 4 月发布。使用 Fuse 快速开发跨平台的原生应用 6 | 7 | --- 8 | 9 | ## 新闻 10 | 11 | 1. [Apple 2015 年发布产品的回顾](http://9to5mac.com/2015/12/23/apple-year-in-review/):2015 年 Apple 发布了一系列新产品,其中既包括全新的系统和交互方式的 Apple TV,更大屏幕的 iPad Pro 和领触摸增加一维度的 Apple Pencil 等硬件,也有新的 iOS,OS X,watchOS 等软件。对于开发者来说,2015 年是 Apple 平台扩张的一年,开发者们也会面临更多的选择。 12 | 13 | 2. [中国移动新品 PPT 暗示 4 寸新 iPhone 于明年 4 月发布](http://news.mydrivers.com/1/462/462404.htm):从最新曝光的2016中国移动新品 PPT 图片来看,苹果会在明年4月在国内发布新机。结合之前对于 Apple 将发布新款 4 寸设备的消息来看,应该就是大家预测的 iPhone 14 | 6c。Apple 采用大屏幕两年之后再一次推出小屏手机,可以说是一种对产品线的补充和市场需求的妥协。 对于开发者来说,这将意味着在今后一段时期内 iOS 应用的交互还是需要注意考虑小屏上的交互体验。 15 | 16 | ## 教程 17 | 18 | 1. [15 分钟带你入门 Fuse](http://tips.producter.io/15-fen-zhong-gao-su-ni-guan-yu-fuse-de-yi-qie/):Fuse 是一款跨平台的 app 制作方案,它通过类似 XML 的方式构建 UI,使用 JavaScript 进行编码,来快速构建从逻辑到界面交互的跨平台的应用。与其他一些使用 web 的解决方案不同的是,Fuse 最终会将应用编译为 native 代码,所以可以保证性能的优秀。由于跨平台和实时反应的预览功能,可以说 Fuse 非常适合进行快速的原型开发,同时它也具备直接导出高品质原生应用的能力,值得关注。本文通过讲解了一些最基本的 Fuse 使用的方式和对应场景,可以带领你快速上手 Fuse 开发。 19 | 20 | 2. [Introduction to Functional Programming in Swift](http://www.raywenderlich.com/114456/introduction-functional-programming-swift):函数式编程和 Swift 的语法特点天生契合,在 Swift 中使用一些函数式编程的思想来简化程序和提高代码可读性是不少开发者的选择。这篇文章从基础开始介绍了函数式编程中的基础概念和在 Swift 中的常见的函数式思想。 21 | 22 | 3. [Swifty Target/Action](https://www.mikeash.com/pyblog/friday-qa-2015-12-25-swifty-targetaction.html):Target Action 在 Objective-C 中是非常常用的设计模式,被广泛使用在 UI 交互的 API 中。在 Swift 中如果我们想使用 Target Action,就需要借助于 Objective-C 的运行环境,单纯的 Swift 方法是无法使用这个模式的。这篇文章尝试构建了一种在 Swift 环境下使用 Target Action 模式的方式,对于我们熟悉 Swift 泛型以及模式思想很有帮助。 23 | 24 | 4. [Swift 的 NSDate 初学者指南](http://swift.gg/2015/12/14/a-beginners-guide-to-nsdate-in-swift/):日期处理虽然看上去并没有什么技术含量,CCocoa 中也有相应的 API,但是如果 app 涉及到多区域的话,弄清在不同时区之间的转换和几个有关日期的基本概念还是非常重要的。这篇文章从初学者的角度对 Cocoa 中 `NSDate` 以及其他一些日期处理相关的 API 进行了一些解释和阐述,阅读本文可以让你建立在 Cocoa 中处理日期相关工作的基本概念。 25 | 26 | ## 开源项目 27 | 28 | 1. [Swifactor](https://github.com/johnno1962/Swifactor):Swift 开源所带来的好处在持续酝酿和发酵。Xcode 现在还没有对于 Swift 提供自动化的重构功能,所以我们如果想要重构一段 Swift 代码,基本需要依靠自己进行查找和判断,来决定要修改哪些代码。Swift 开源的同时,负责代码解析和提取的内部框架 SourceKit 也同时开源了,这让第三方开发者能很容易地使用这个内部框架来创建插件。Swifactor 就是一个基于此的 Swift 代码重构插件,你可以使用它来对你的 Swift 代码进行安全的重构。 29 | 30 | 2. [WebShell](https://github.com/djyde/WebShell):一个将 web app 包装成 OS X app 的简单的包装器,如果你有一些现成的 web app,或者想用更原生的方式在浏览器外使用这些 web app 的话,可以通过这个项目很轻易地将它们打包成一个包含 WebView 的 OS X app。 31 | 32 | 3. [Rainbow](https://github.com/onevcat/Rainbow):Swift 开源和跨平台意味着我们现在可以在 Linux 上使用 Swift,而随着 Swift 版本的 [Foundation 框架](https://github.com/apple/swift-corelibs-foundation)的逐步开发,使用 Swift 编写跨平台的命令行工具将是可以预见到的将来的 Swift 的运用之一。这个框架为我们提供了一种简单的方式在命令行输出的时候为文本添加颜色和样式,这有助于我们创建交互更明确,体验更优秀的 Swift 命令行工具。 33 | -------------------------------------------------------------------------------- /article/33.md: -------------------------------------------------------------------------------- 1 | # iOS开发周报:2016 年 Apple 产品预览,iPhone 7 Plus 可能存在 256G 真土豪版本 2 | 3 | 标签:iOS Mac 移动 移动开发技术周报 4 | 5 | 摘要:2016 年 Apple 产品预览,iPhone 7 Plus 可能存在 256G 真土豪版本 6 | 7 | --- 8 | 9 | ## 新闻 10 | 11 | 1. [2016 年 Apple 产品预览](http://www.macrumors.com/2015/12/31/what-to-expect-from-apple-in-2016/):2016 年已经正式来到,这又是一个充满希望的一年。按照以往的路线图和预测,Apple 将在今年发布包括 iOS 10,OS X 10.12,iPhone 7 和 Apple Watch 2 等在内的一系列跨越桌面和移动领域的新产品,其中比较值得关注的是新一代的 Apple Watch。第一代手表产品因为使用场景有限而没有取得特别好的成绩,二代产品中 Apple Watch 可能会向更加轻薄的方向进化,并且配备上更多健康相关传感器。今年这些新的设备和系统将会为开发生态带来怎么样的变化,让我们拭目以待。 12 | 13 | 2. [iPhone 7 Plus 可能存在 256G 真土豪版本](http://news.mydrivers.com/1/464/464241.htm):来自供应链的消息显示,苹果今年会推出iPhone 7和iPhone 7 Plus两款产品,屏幕尺寸不变,依然是4.7/5.5英寸,但配置会有所提升。特别让人称叹的是 iPhone 7 Plus 还可能会有 256GB 容量的版本,这个数字已经赶上了一些桌面设备的配置了。移动设备硬件的性能和配置已经逐渐赶上桌面系统,用户也需要品质更加接近桌面的应用,但是移动设备软件的使用场景却并没有大的改变,如何在这对矛盾关系中平衡和协调,是今年值得广大 iOS 开发者们思考的问题。 14 | 15 | ## 教程 16 | 17 | 1. [猿题库 iOS 客户端架构设计](http://mp.weixin.qq.com/s?__biz=MjM5NTIyNTUyMQ==&mid=444322139&idx=1&sn=c7bef4d439f46ee539aa76d612023d43&scene=0):这篇文章详细介绍了猿题库客户端架构的设计和思考。猿题库客户端借鉴了 MVVM 的思想来将界面与底层解耦,引入了新的层级来为 View Controller 瘦身,并得到了易于测试和维护的代码架构。对于有构建 app 需求的开发者,不妨可以参考这篇文章中的做法以获取灵感。 18 | 19 | 2. [Unit Testing for iOS](http://chengway.in/unit-testing-for-ios-part-i/):一篇关于在 iOS 中进行单元测试的入门文章。文章通过一些具体细节实现来讲述了如何从最简单的测试开始,并使用一些像是依赖注入或者 mock 等测试时的通用手法,来帮助我们构建高质量的软件。 20 | 21 | 3. [pomo.tv](http://www.pomo.tv):一个收集关于 iOS,Mac 和 Swift 的开发视频的网站。视频主要来源于一些开发者会议的分享,视角很新,实效性和实用性也非常强。在学习开发知识的同时,还可以锻炼英文听力。 22 | 23 | 4. [Writing Better Code with Custom Subscripts in Swift](http://natashatherobot.com/custom-subscripts-swift/):Swift 中我们可以自己定义类型的下标访问的行为,这让开发者有机会用合适的方式获得更好的代码组织和设计,这在对象结构是以行列为基础的时候显得更加有用。这篇文章通过在一个测试用例中自定义下标访问来简化代码,展示了一种可能的应用场景。 24 | 25 | ## 开源项目 26 | 27 | 1. [Filterpedia](https://github.com/FlexMonkey/Filterpedia):一个开源的 iPad app,为我们展示了使用 Apple Core Image 框架制作图片滤镜的方法。图片处理是 iOS 应用中一个很常见的任务,而 Apple 也为开发者们提供了一系列便利的方式来进行相关处理。如果你正在制作一款图片处理应用的话,这个项目中很多代码和实现都可以作为参考。 28 | 29 | 2. [VWInstantRun](https://github.com/wangshengjia/VWInstantRun):一个可以在 Xcode 中通过选定部分代码,直接运行并在控制台显示结果的插件。相比于创建一个 Playground 来说,使用这种方式来验证部分代码会更加快捷方便。如果你对实现细节感兴趣的话,作者也整理了一篇[博客](https://medium.com/@victor_wang/run-your-code-snippet-from-xcode-without-building-the-whole-project-1821cf85b2f2#.how9bvg4k)进行了一些说明。 30 | 31 | 3. [Swift-Flow](https://github.com/Swift-Flow/Swift-Flow):如果你在代码中使用很多状态的话,你可以会需要维护一个状态机来对代码进行简化。而 Swift Flow 这个框架可以大幅简化你在这方面的努力。Swift Flow 可以将应用的数据整理为流,并通过声明式的命令来与数据状态流进行绑定,这让我们可以轻松地维护应用内的状态。 32 | -------------------------------------------------------------------------------- /article/34.md: -------------------------------------------------------------------------------- 1 | # iOS开发周报:Xcode 7.3 beta 和 iOS 9.3 beta 发布,是否会带来教育行业的改变 2 | 3 | 标签:iOS Mac 移动 移动开发技术周报 4 | 5 | 摘要:iOS 9.3 beta 中包含了一系列针对教育和学校的新特性,这些改变可能会对将移动设备引入教育领域产生积极影响,教育类的 app 也可以针对这些新特性进行设计。 6 | 7 | --- 8 | 9 | ## 新闻 10 | 11 | 1. [Xcode 7.3 beta 发布](https://developer.apple.com/xcode/download/):Apple 发布了新的测试版本的开发者工具。Xcode 7.3 中包括了像是更完善的自动补全,更智能和全面的编译器警告提示等。另外,Xcode 现在也提供了选择所使用的 toolchain 的选项,这简化了 Swift 的开源贡献者在调试和修改 Swift 时所需要的步骤。 12 | 13 | 2. [iOS 9.3 beta 新增一系列针对教育行业的新特性](http://www.apple.com/education/preview/):本周 Apple 还发布了 iOS 9.3 beta。这个版本给用户带来了像是夜间模式,更安全的备忘录,可以 iCloud 同步的 iBooks 应用等。除此之外,iOS Education 的预览版本也将被包括在 iOS 9.3 中。iOS Education 提供了像是学生共享 iPad,新的 Classroom 应用来管理班级和师生交互等新特性。这可以说是 Apple 在移动教育领域的一次重要探索,它是否能改变教育行业的现状,我们可以拭目以待。 14 | 15 | 2. [首届中国 Swift 开发者大会成功召开](http://atswift.io):@Swift 会议在北京召开,来自国内外的八位开发者为我们带来了一些很有价值的 Swift 开发分享。作为国内首次 Swift 为主题的开发者会议,在大会上中国的 iOS 开发者们能有机会进行交流和学习,希望今后也能有更多类似的机会。会后主办方第一时间整理了[会议的一些资源](https://github.com/atConf/atswift-2016-resources),更多会议的视频等正在制作中,也将于将来公开。 16 | 17 | ## 教程 18 | 19 | 1. [ObservableSwift - 一个属性监听机制的 Swift 原生替代方案](http://swiftcafe.io/2016/01/10/observable-swift/):在 Swift 开发中,原生的 Swift 类型是不依赖于 Objective-C runtime 的,因此也没有办法像原来那样使用 KVO 来进行属性观察。这篇文章为我们介绍了一个开源框架 [ObservableSwift](https://github.com/slazyk/Observable-Swift) 的使用方法,依赖于这个框架,我们可以在 Swift 类型上实现类似于原来的 KVO 的方式。 20 | 21 | 2. [ARC + Swift, It “just works” — but how?](https://medium.com/the-traveled-ios-developers-guide/arc-swift-d323535baecb#.l15i1qeq7):相比于 Objective-C,Swift 的内存管理的概念相对模糊,因为没有经历过手动的内存管理,所以在 Swift 中很多细节开发者并没有特别在意。不过其底层的机制依然是引用计数和 ARC。这篇文章为我们讲述了 Swift 在 ARC 环境下是如何工作的,对于我们理解 Swift 的内存管理方式会有所帮助。 22 | 23 | 3. [iOS Layout 技术回顾及 Masonry 介绍](http://www.taijicoder.com/2015/12/12/iOS-Layout-and-Masnory/):UI 布局可以说是在制作 app 时非常重要的一个环节,而现在 AutoLayout 已经是行业事实上的标准方法。Apple 提供的 AutoLayout API 在使用上有一些不便,不过在最近的 SDK 中 Apple 也正在向好的方向努力。这篇文章为我们介绍了 AutoLayout 的思想由来,以及一些使用 DSL 来描述布局的方法。 24 | 25 | ## 开源项目 26 | 27 | 1. [SwiftAndroid](https://github.com/SwiftAndroid/swift): Swift 开源对社区所带来的影响在持续升温中。这个项目是对 Swift 官方仓库的一个 fork,它尝试将 Swift 运行在 Android 设备上。在进行一些不很多的变动后,这个项目做到了在 Android 设备上运行 Swift 运行时,并且编写了一些简单的 Swift 程序以及打包为 apk 运行。这从实际上验证了在 Android 设备和开发环境中上使用 Swift 编写代码的可能性,非常有意思。 28 | 29 | 2. [StickyCollectionView](https://github.com/matbeich/StickyCollectionView):UICollectionView 为我们提供了非常灵活的数据展示的方式。这个框架通过自定义的 layout,实现了 cell 在滚动时吸附在顶端并且之后的 cell 在其上方覆盖的效果。 30 | 31 | 3. [Chameleon-Swift](https://github.com/unifiedh/Chameleon-Swift):如果你是 iOS 开发者而又想编写一些 OS X 应用的话,也许你应该关注这个项目。[Chameleon](http://chameleonproject.org) 是一个试图将 UIKit 移植到 OS X 开发中的项目。它让你可以在 iOS 和 OS X 上重用 UIKit 代码。最近他们也从 Objective-C 转向 Swift 了。这个项目本身还在开发中,直接使用在商业项目中可能不是特别好的选择,不过这并不妨碍我们关注这种新的可能性。 32 | 33 | 4. [TransitionTreasury](https://github.com/DianQK/TransitionTreasury):一个非常完善的处理 ViewController 导航和转场的框架,可以用来方便地实现一些常见的转场效果。你可以在[这个网站](http://transitiontreasury.com)上找到一些已经可以实现的效果视频。另外,这个项目也具备完善的[文档和使用说明](https://github.com/DianQK/TransitionTreasury/wiki/主页)。 34 | -------------------------------------------------------------------------------- /article/35.md: -------------------------------------------------------------------------------- 1 | # iOS开发周报:Apple 将停止 iAd 广告业务,Apple Watch 第二代产品可能无法在春季发布会推出 2 | 3 | 标签:iOS Mac 移动 移动开发技术周报 4 | 5 | 摘要:Apple 决定在今年 6 月关停 iAd 服务,这代表着 Apple 放弃在广告领域与其他服务商的竞争。Apple Watch 第二代产品可能无法按预计在春季发布会推出。 6 | 7 | --- 8 | 9 | ## 新闻 10 | 11 | 1. [Apple 决定关停 iAd 服务](https://developer.apple.com/news/?id=01152016a):[iAd](http://advertising.apple.com) 是 Apple 为了抗衡 Google 的 AdMob 和其他一些广告分发商的服务。在过去几年,iAd 一直以精美的广告制作及高点击率和回报率受到 iOS 开发者的喜爱。但是 Apple 一直没能解决 iAd 平台和广告内容上的局限性。最近 Apple 表示将放弃 iAd 服务,现有的广告提供和展示将维持到今年 6 月 30 日,而之后 iAd 将不会再继续工作。这代表 Apple 承认在广告领域的失败,主动退出竞争并将这片市场完全让给了其他广告商。 12 | 13 | 2. [Apple Watch 第二代产品可能推迟](http://www.macrumors.com/2016/01/15/apple-watch-2-not-coming-in-march/):按照惯例 Apple 会在今年三月召开春季发布会,届时将会发布新的 4-inch iPhone 和新一代的 Mac 产品。原本大家预测 Apple Watch 第二代产品也将在本次发布会上宣布,但是最近来自供应商的消息表明,很大可能这款产品不会那么快与我们见面。Apple 也许会将 Watch 的更新周期设定为 18 个月,也就是它有希望在今年 9 月时随着 iPhone 7 一起发布。 14 | 15 | 3. [LeetCode 在线评估系统开始支持 Swift](https://leetcode.com):LeetCode 是一个汇集算法和在线解答及评估的网站,很多开发者会在上面进行算法练习。本周,LeetCode 在部分题目中引入了 Swift 支持,如果你之前想要进行算法练习,但是又苦于不擅长其他语言的话,现在正是开始进行尝试的好时候。LeetCode 对于 Swift 的支持一方面是 Swift 开源所促成的结果,另一方面也反应了 Swift 语言的热门程度和开发者的接受度。 16 | 17 | ## 教程 18 | 19 | 1. [细说GCD(Grand Central Dispatch)如何用](http://www.jianshu.com/p/fbe6a654604c):GCD 在 iOS 开发中是非常常用的线程调度技术了,如何使用多线程来并发处理任务,也是 iOS 开发技术中不可避免会接触到的问题。这篇文章详细介绍了 GCD 队列,各种 GCD API 的使用方法等。通过实例,作者向我们展示了如何使用 Dispatch Source 监听系统底层对象,并分析了不同锁的性能,和一些常见的死锁情况。如果你对 GCD 的使用还不熟悉的话,推荐阅读这篇文章。 20 | 21 | 2. [Swift's mysterious Builtin module](http://ankit.im/swift/2016/01/12/swift-mysterious-builtin-module/):Swift 开源后带来的一大优点就是开发者们可以了解到这门语言在底层到底做了些什么,这篇文章就是在此方向上做的一些探索。文中分析了 Swift 标准库中随处可见的 `Builtin` 类型和相关方法的一些细节,了解这些背后的知识可能会对我们理解 Swift 更深层次的东西有所帮助。 22 | 23 | 3. [如何正确地写好一个界面](http://oncenote.com/2015/12/08/How-to-build-UI/):写界面可以说是每位移动应用开发者的基本功,也是一位合格移动应用开发者绕不过去的坎。但就如并不是每一位开发者都能够成为合格的开发者一样,也不是每个开发者都能写出合格的 UI 代码。本文先从 iOS 开发界面的一些基础概念开始,然后深度剖析了 View,ViewController 和一些编程范式,全方位地介绍了编写合理的界面代码应该注意的各个方面。 24 | 25 | 4. [不再安全的 OSSpinLock](http://blog.ibireme.com/2016/01/16/spinlock_is_unsafe_in_ios/):OSSpinLock 是在 iOS 多线程开发中一种常用的锁,但是最近 Apple 工程师表示 OSSpinLock 存在一个[潜在的问题](https://lists.swift.org/pipermail/swift-dev/Week-of-Mon-20151214/000372.html),有可能造成优先级反转。这篇文章对这个问题的进行了一些讨论,并定性分析了可能的替代方案的性能。虽然可以说是很少见的情况,但是如果你在项目中使用了自旋锁的话,考虑将它换成其他方案也许是明智的选择。 26 | 27 | ## 开源项目 28 | 29 | 1. [IBAnimatable](https://github.com/JakeLin/IBAnimatable):一个很有意思的项目,它通过大量地使用 `IBDesignable` 和 `IBInspectable`,增强了 Interface Builder 的功能,可以帮助我们在 Interface Builder 和 Swift Playground 里面设计 UI, 交互, 导航模式, 换场和动画等。这个框架带来的思想可以让 Interface Builder 从一款界面编辑工具向原型制作工具迈进一步。设计师甚至有可能直接使用 Interface Builder 创建或调整需要的动画效果,开发者也很容易将其直接应用到最后的 app 产品中去。 30 | 31 | 2. [PageMenu](https://github.com/uacaps/PageMenu):类似的分页式的 ViewController 切换在最近的 app 交互中很常见,在内容关联的同屏幕中进行类似的切换也很符合用户的使用直觉。这个框架为我们提供了分页式交互的一种实现方式。 32 | 33 | 3. [YoCelsius](https://github.com/YouXianMing/YoCelsius):一款开源的天气预报的应用。因为天气预报类的 app 业务逻辑相对简单,可以让开发者更专注于具体实现和交互效果,所以天气 app 一直是新入门的开发者很好的练手和学习的好类型。这个项目中使用了很多动画和交互来吸引用户,如果你想学习 iOS 开发中的动画实现,YoCelsius 会是很好的开源学习资料。 34 | -------------------------------------------------------------------------------- /article/36.md: -------------------------------------------------------------------------------- 1 | # iOS开发周报:2016 WWDC 可能在 6 月 13 日开始,Apple 发布音乐备忘录应用 2 | 3 | 标签:iOS Mac 移动 移动开发技术周报 4 | 5 | 摘要:Moscone West 会议中心预约显示 Apple 今年可能于 6 月 13 日召开 WWDC;Apple 发布了一款新的 iOS 应用,用来帮助捕捉音乐创作灵感。 6 | 7 | --- 8 | 9 | ## 新闻 10 | 11 | 1. [WWDC 16 可能在 6 月 13 日开始](http://www.macrumors.com/2016/01/19/apples-2016-worldwide-developers-conference-will-likely-take-place-june-13-to-17/):自从 2007 年开始,Apple 都会在 6 月的第一周举行 WWDC 全球开发者大会。而今年根据以往举办地 Moscone West 会议中心的预约记录显示,Apple 可能会将日程调整到第二周。按照过去两年的惯例,会议的门票将在 4 月份左右由抽选的方式决定,如果有计划今年前往参会的开发者可以开始关注相关信息。 12 | 2. [Apple 发布音乐备忘录应用](http://www.apple.com/cn/music-memos/):本周 Apple 发布了一款音乐备忘的应用。一般来说 Apple 很少发布类似特定的功能性 app,但是每一款 Apple 官方应用往往够会成为第三方 iOS app 界面和用户交互上的范例。在这款应用中,Apple 使用了相对颜色较深的主题,以及一些自定义交互的控件,值得广大开发者进行一些研究。 13 | 14 | ## 教程 15 | 16 | 1. [CoreData VS Realm](http://iiiyu.com/2016/01/19/CoreData-VS-Realm/):Core Data 是 Apple 官方的 iOS 上进行数据持久化存储的解决方案,而 Realm 是一款使用起来很简单的移动平台的数据库。两者各有特点和适合的使用场景,本文作者试图站在自己的角度对两者的各个方面进行一些对比,并综合地给出了选择上的考虑和建议。 17 | 2. [Sketch Tutorial for iOS Developers](http://www.raywenderlich.com/117609/sketch-indie-developers):Sketch 是一款专门针对 UI 设计的矢量绘图软件,一经推出就迅速取得了广大设计师的喜爱,现在它也成为了个人 iOS 开发者在制作自己 app 时进行界面设计的最佳选择。这篇教程是面向 iOS 开发者的设计教程,它通过一个设计实例深入浅出地介绍了 Sketch 中对于开发者来说最有用的部分,很适合那些想自己进行一些设计的开发者作为上手教程进行学习。 18 | 3. [iOS网络缓存扫盲篇](https://github.com/ChenYilong/ParseSourceCodeStudy/blob/master/02_Parse的网络缓存与离线存储/iOS网络缓存扫盲篇.md):缓存一直是软件开发中的一个难题,而对于没有太多网络相关经验的 iOS 开发者来说,理解网络请求的缓存机制也是所面临的课题之一。这篇文章是针对对网络缓存理解不深的开发者写的,阐明了 iOS 上基本的缓存机制和使用方法。 19 | 4. [Exploring Swift Dictionary's Implementation](http://ankit.im/swift/2016/01/20/exploring-swift-dictionary-implementation/):字典在 Swift 中是很常用的数据结构,这篇文章从底层分析了 Swift 的泛型 `Dictionary` 的内存结构和实现方式,虽然可能对于我们日常工作和编写 app 来说不会有特别大的帮助,但是对于底层的探索可以满足开发者的好奇心,同时也是对分析思维进行锻炼的好机会。 20 | 21 | 22 | ## 开源项目 23 | 24 | 1. [ReSwift](https://github.com/ReSwift/ReSwift):我们在[之前的周报](http://www.infoq.com/cn/news/2016/01/ios-weekly-iphone7p)中我们曾经提到过 Swift-Flow 项目,它是一款帮助我们针对数据流的变化进行编程的框架。最近,Swift-Flow 和另一个类似的框架 ReduxKit 进行了合并,它们的开发者对两个项目的优秀部分进行了整合,并将其重新命名为 [ReSwift](https://github.com/ReSwift/ReSwift)。如果您之前忽略了这个项目的话,建议您可以抽空仔细了解一下这个框架的内容,它为我们提供了一种在 Cocoa 开发中架构软件的新的思路。 25 | 2. [Knuff](https://github.com/KnuffApp/Knuff):在 iOS 开发中,测试推送服务是否正确工作往往是很麻烦的事情。Knuff 是一款开源的 OS X 应用,我们可以提供必要的信息就可以对某个注册设备发送推送,简化开发流程。如果你对 GUI 不感兴趣的话,也可以选择像是 [houston](https://github.com/nomad/houston) 这样的命令行工具来完成类似的事情。 26 | 3. [FolioReaderKit](https://github.com/FolioReader/FolioReaderKit):一个 Swift 写的 ePub 电子书解析和阅读的框架,它包含了包括字体大小调整,主题,高亮标记等绝大多数电子书阅读时所需要的操作,可以让我们非常容易地构建一款电子书阅读的 app 或者是相关模块。 27 | 28 | -------------------------------------------------------------------------------- /article/37.md: -------------------------------------------------------------------------------- 1 | # iOS开发周报:Apple 计划大幅更新 Swift 和 Cocoa API,Facebook 宣布将停止 Parse 服务 2 | 3 | 标签:iOS Mac 移动 移动开发技术周报 4 | 5 | 摘要:Apple 计划大幅更新 Swift 和 Cocoa API,Facebook 宣布将停止 Parse 服务 6 | 7 | --- 8 | 9 | ## 新闻 10 | 11 | 1. [Apple 计划在 Swift 3.0 中大幅更新 Cocoa API 的导入规则](https://swift.org/blog/swift-api-transformation/):Apple 本周在 Swift 博客上发布了一篇新文章,表示正在准备将 Swift 中的 Cocoa API 转换为更简明的表达方式。计划中的新方式将利用 Swift 的强制参数名等特性对现有的 API 进行简化。不过由于涉及的变化十分多而且重要,Apple 延长了关于[这个提案](https://github.com/apple/swift-evolution/blob/master/proposals/0005-objective-c-name-translation.md)的决定日期,如果您对这个改动有什么建议和意见的话,也可以参与到讨论当中。 12 | 2. [Facebook 宣布于 2017 年关停 Parse](http://blog.parse.com/announcements/moving-on/):Parse 是有名的 BaaS (Backend as a Service) 服务提供商,于 2013 年被 Facebook 高价收购。不过最近 Facebook 决定在明年完全关停 Parse 的服务。与此同时,Parse 开源了一个服务端的解决方案以及迁移的方法,帮助现有开发者进行过渡。如果你的 app 正在使用 Parse 作为后端的话,现在是时候考虑开始着手进行迁移工作了。 13 | 14 | 15 | ## 教程 16 | 17 | 1. [iOS App Performance: Instruments & beyond](https://medium.com/@mandrigin/ios-app-performance-instruments-beyond-48fe7b7cdf2#.6p9q47p2k):性能永远是 iOS 开发中重要的话题,作者为我们简述了使用 Instruments 来进行性能测试的一些基本技巧,并整理了很多性能优化方面相关的文章和视频,以帮助开发者能正确地对 app 进行优化。 18 | 2. [如何打造一个让人愉快的框架](http://onevcat.com/2016/01/create-framework/):这是 [@Swift 会议](http://atswift.io)上的一个 session 的文字稿,作者为我们分享了关于框架的使用、创建和发布中一些需要注意的事情。正在写开源框架或是为其他开发者提供框架的朋友可以看看。 19 | 3. [iOS冰与火之歌 – Objective-C Pwn and iOS arm64 ROP](http://drops.wooyun.org/papers/12355):这个系列将会为我们讲述 iOS 中用户态和内核态的知识。这是本系列的开篇文章,简单介绍了 iOS 上 Objective-C 的利用以及 iOS 上 arm64 ROP 的相关内容。这些都是越狱需要掌握的最基本的知识,而这个系列接下来的文章将会介绍绕过沙箱等。如果你对系统安全和越狱开发有兴趣的话,这是不容错过的系列。 20 | 21 | 22 | ## 开源项目 23 | 24 | 1. [SlackTextViewController](https://github.com/slackhq/SlackTextViewController):Slack 开源的一个聊天输入界面的解决方案,包括了像是 @ 以及 # 等 tag 的支持,undo/redo 操作已经其他一些可定制化的部分。如果你的应用中需要比较复杂的聊天功能的话,在这个框架的基础上进行一些定制应该会节省不少开发时间。 25 | 2. [Furni for iOS](https://github.com/twitterdev/furni-ios):Twitter 开源的一个示例 app,为我们展示了如何使用 [Fabric](https://get.fabric.io) 的一系列工具链来打造 app。Fabric 是 Twitter 维护的一系列 SDK 的统称,整合了崩溃报告,用户行为分析,广告,支付等内容,它试图为 iOS 开发者提供“一站式”的 SDK 服务。 26 | 3. [Graph](https://github.com/CosmicMind/Graph):Swift 写的帮助开发者使用 Core Data 的框架,它简化了操作 Core Data 的一些繁琐的细节,试图让开发者能更多地集中到有用的逻辑中来。相比于使用断言 (predicate) 来进行操作,Graph 选择了一种更加描述式的方式,通过 Action 来为 Core Data 提供数据驱动的使用方式。 27 | 4. [Material](https://github.com/CosmicMind/Material):如果你或者你的设计师特别喜欢 Google 的 [Material 设计](https://design.google.com),并且想要在 iOS 上使用这种设计方式的话,这个框架能很好地帮助你迅速打造一款在 iOS 上的 Material 风格应用。它提供了像是按钮、导航栏、点击的动画效果等一系列 Material 风格的 UI 元素供你使用。 28 | 5. [Coolie](https://github.com/nixzhu/Coolie):一个帮助我们根据 JSON 进行模型代码转换的命令行工具。通过提供一段 JSON 字符串,工具将输出可以直接使用的 model 的 swift 源码。如果你的服务端能提供 JSON 返回的话,使用这个工具将节省手写 model 代码的时间。 29 | 30 | 31 | 下周就是农历新年了,我们在下周将暂停一周 iOS 技术周报。在此提前给读者拜个早年,祝大家新春快乐,在接下来的一年里也一帆风顺。 32 | 33 | -------------------------------------------------------------------------------- /article/38.md: -------------------------------------------------------------------------------- 1 | # iOS开发周报:Apple Pay 在国内上线,Swift CI 和性能测试套件可用 2 | 3 | 标签:iOS Mac 移动 移动开发技术周报 4 | 5 | 摘要:Apple Pay 服务在中国上线,成为全球第五个可以使用 Apple Pay 的国家。Swift 开发团队公布官方持续集成环境以及性能测试套件。 6 | 7 | --- 8 | 9 | ## 新闻 10 | 11 | 1. [Apple Pay 在国内正式上线](http://www.apple.com/cn/apple-pay/):2 月 17 日,使用指纹识别和 NFC 通讯的支付服务 Apple Pay 正是在中国上线。这是 Apple Pay 继在美国、英国、加拿大和澳大利亚后登陆的第五个国家,也是首个非英语国家。Apple Pay 支持国内主要银行的大多数常用信用卡和借记卡,并且能在现有的所有支持“闪付”的 POS 机上使用,前景良好。另外,app 中的实体物品购买行为也可以使用 Apple Pay 进行支付,这对于电商和交易类的 app 来说,无疑是一个良好的机会。 12 | 2. [Tim Cook 发表公开信,揭露美国安全部门要求 iPhone 加装后门的行为](http://www.apple.com/customer-letter/):近日,Apple CEO Tim Cook 发表了一封致消费者的公开信,其中提到 Apple 拒绝了美国政府的一项要求,后者想让 Apple 在 iPhone 手机中植入后门,便于其在必要时解锁手机。Cook 表示 Apple 是一家尊重用户隐私和安全的企业,而政府的要求和相应的权利并没有办法得到有效监管,因此 Apple 将永远不会在这方面有所妥协。 13 | 3. [Swift 持续集成环境和性能测试套件开放](https://ci.swift.org):作为像是 Swift 这样的项目,没有高效的持续集成环境的保证的话,开发是难以维续的。Apple 公布了 Swift 的 CI 环境,之后所有向 Swift 项目提交的 pull request 都将得到 CI 的编译和测试保证。同时 Apple 还开放了[性能测试的套件](https://github.com/apple/swift/tree/master/benchmark),用来保证新的版本中不会发生性能退化。 14 | 15 | 16 | ## 教程 17 | 18 | 1. [iOS冰与火之歌番外篇 - 在非越狱手机上进行App Hook](http://drops.wooyun.org/papers/12803):本文是 iOS 安全相关的系列文章中的一篇,为我们讲述了在非越狱的 iOS 上进行 App Hook 的一些方法。利用这个技术,你可以在非越狱的 iOS 系统上实现各种 hook 功能。文章以微信抢红包为例子,介绍了对一个 app 进行 hook 的基本方式。对于 iOS 系统安全有兴趣的朋友一定会对这篇文章很感兴趣。 19 | 2. [Apple Pay 入门](https://developer.apple.com/apple-pay/get-started/cn/):为了体现 Apple Pay 在中国市场的重要性,Apple 甚至专门官方地针对开发者用中文写了一篇 Apple Pay 入门文章。文中简要地介绍了支持 Apple Pay 所需要的开发流程和一些术语,可以作为 Apple Pay 开发的第一篇读物。在了解了基本流程后,再参照[《Apple Pay 编程指南》](https://developer.apple.com/library/ios/ApplePay_Guide/)进行开发时就能得心应手不少。 20 | 3. [Enhancing UIViews Using Extensions](http://holko.pl/2016/02/16/enhancing-uiviews/):Swift 的 extension 是用来扩展现有类的非常强大的特性,相比于创建一个子类,使用 extension 往往能更优雅地完成任务。这篇文章通过一个在 `UIView` 上使用 extension 来实现一个 label 动画的例子,展示了使用 extension 来在 UIKit 上进行功能扩展的方法。 21 | 22 | 23 | ## 开源项目 24 | 25 | 1. [Charter](https://github.com/matthewpalmer/Charter):Charter 是一个完整的 iOS app 开源项目,它可以让你在 iPhone 或者 iPad 设备上阅读 Swift 的邮件列表。app 本身并没有特别高的难度,但是使用了我们在之前周报中提到的 [ReSwift](https://github.com/ReSwift/ReSwift) 的方式来进行构建,是一个非常好的实际例子。 26 | 2. [SPTDataLoader](https://github.com/spotify/SPTDataLoader):音乐服务商 Spotify 开源了他们自己开发和正在使用的网络请求框架。相比于其他一些网络框架,SPTDataLoader 更加轻量一些。它在 `NSURLSession` 层上加入了像是请求频率和重试限制,方便的用户验证,更好的与 view 层结合等实用特性。值得一提的是,SPTDataLoader 的版本更新会在 Spotify 上实际使用两周后再进行,因此框架可以说一定是经过大量检验的,相对也会更加稳定。 27 | 3. [Tactile](https://github.com/delba/Tactile):iOS 开发中对于手势的处理往往并不是十分优雅,整个流程大致可以分为定义手势,将其添加到视图上,并在回调中对手势的不同阶段进行处理等。这个流程带来的是大量的模板代码,并给我们阅读代码造成不少的噪声干扰。Tactile 试图简化手势处理的流程,框架定义了方便的语法,并使用很简单的方式来处理它们。 28 | 4. [URLNavigator](https://github.com/devxoul/URLNavigator):使用 URL Scheme 或者 Universal Link 来进行应用间或者应用内的跳转是 iOS 开发的常见需求。相比于在 AppDelegate 中以命令式的方式进行判断,使用声明式的方法预先对 URL 和它们的行为进行定义无疑是一种更高效的开发方式。URLNavigator 就是帮助你这样简化开发流程的框架,它定义了一个 URL 的调度中心,你可以很好地对接收到的 URL 跳转进行集中处理。 29 | 30 | -------------------------------------------------------------------------------- /article/39.md: -------------------------------------------------------------------------------- 1 | # iOS开发周报:Apple 春季发布会时间更改,IBM 建立 Swift Package 分类索引 2 | 3 | 标签:iOS Mac 移动 移动开发技术周报 4 | 5 | 摘要:Apple 春季发布会时间变更至 3 月 21 日,IBM 建立 Swift Package 分类索引以帮助开发者寻找支持 Swift Package 的开源项目。 6 | 7 | --- 8 | 9 | ## 新闻 10 | 11 | 1. [Apple 春季发布会时间更改](http://recode.net/2016/02/27/remark-your-calendars-apples-product-event-will-week-of-march-21/):之前媒体预测 Apple 将在 3 月 15 日召开春季的新品发布会,而最近通过某些 Apple 员工的日常安排来看,其实实际发布会的日期可能是 3 月 21 日。据称 Apple 在这次发布会上会公布新的 4-inch iPhone,iPad Air 3 以及一款 Apple Watch 表带。会不会还有出人意料的 One More Thing,让我们拭目以待。 12 | 2. [OS X 10.12 计划加入 Siri 功能](http://9to5mac.com/2016/02/24/apple-siri-osx-10-12-2016/):Apple 计划在今年秋天 OS X 下一个版本中添加 Siri 支持,以扩展可以使用 Siri 的平台。与 iOS 系统不同,OS X 上的 Siri 可能会作为一个菜单栏工具存在,而不是独立的应用或是通知中心窗体。 13 | 3. [IBM 建立 Swift Package 分类索引](https://swiftpkgs.ng.bluemix.net):IBM 在 Swift 上一直在紧跟 Apple 脚步,最近 IBM 建立了一个 Swift Package 分类索引的网站。该站点收录了支持 Swift Package Manager 的开源项目,并按照分类和一些规则进行了排序。如果你现在就有使用 Swift Package Manager 进行开发的需求,那在这个站点上寻找需要的依赖会是不错的选择。 14 | 15 | ## 教程 16 | 17 | 1. [Apple TV Tech Talks Videos](https://developer.apple.com/videos/techtalks-apple-tv/):从去年开始 Apple 在世界各地的 Apple Store 举办了多场 Apple TV 的技术培训,向开发者介绍 Apple TV 开发的必备技术和注意事项。现在 Apple 将这些演讲的视频进行了公开,所以如果你没有能够到现场参加的话,这是个补课的好机会。 18 | 2. [MLeaksFinder:精准 iOS 内存泄露检测工具](http://wereadteam.github.io/2016/02/22/MLeaksFinder/):在 iOS 开发中,稍不注意就会导致内存泄露的问题,MLeaksFinder 相较于 Instrument,为我们提供了更方便易用的内存泄露检测方案。这篇文章介绍了该工具的使用方式。 19 | 3. [@Swift 会议视频](http://www.imooc.com/learn/600):今年一月在北京召开了由开发者举办且面向开发者的国内首次 Swift 技术会议。在会议上 8 位演讲者为我们从各个方面带来了一些他们在 Swift 实践中的心得体会。现在会议上各 session 的视频已经发布,如果你对此有兴趣的话,不妨去看看。 20 | 21 | ## 开源项目 22 | 23 | 1. [Kitura](https://github.com/IBM-Swift/Kitura):自 Swift 开源并能运行在 Linux 系统后,使用 Swift 写服务器的热潮就没有退却过,大家都在期待这门为 app 而生的语言在其他方面会有何表现。本周 IBM 公开了 Kitura 项目,这是另一个使用 Swift 架构的服务器框架。相比于其他的框架,Kitura 更注重中间件的结构,并且有大企业进行维护,相信质量也会很有保证。 24 | 2. [Vinyl](https://github.com/Velhotes/Vinyl):网络请求可能是绝大多数 app 中一定会用到的,如何对网络部分进行可靠的单元测试一直不简单。因为服务器端的实现经常会发生变化,因此传统的使用 mock 和 stub 的方式测试网络实际上并不能保证当前网络部分的正确性。Vinyl 借鉴了 [DVR](https://github.com/venmo/DVR) 和 [VCR](https://github.com/vcr/vcr)的思路,来保证你的测试可以与服务器实现同步。 25 | 3. [RealReachability](https://github.com/dustturtle/RealReachability):监视网络状况的改变并在 UI 上进行合适的对应,可以提供良好的用户体验。我们一般都使用 [Reachability](https://github.com/tonymillion/Reachability) 来对网络状况进行监视。但是现有方案存在一个问题,那就是它只监视本地连接是否有效,而并不关心到远端的网络连接是否真的能接收到数据。RealReachability 就是为了解决这个问题的改进版实现,它使用 ping 模型来保证本地连接和到远端的连接是同时有效的,相比原版是一种更可靠的方案。 26 | 4. [Greedo Layout](https://github.com/500px/greedo-layout-for-ios):500px 开源的一个根据图片大小来计算 colloection view cell 尺寸的框架。它会保证 cell 的高度一致,然后依据图片尺寸进行合适地缩放。相比起常见的瀑布流的 collection view 布局,这种方式可以让图片展示页面显得更有序。如果有在做图片展示 app 的话,可以作为不错的参考。 27 | 28 | -------------------------------------------------------------------------------- /article/4.md: -------------------------------------------------------------------------------- 1 | # WWDC15 召开,细数新 SDK 带来的全新变化 - iOS移动开发周报 2 | 3 | 标签:移动 iOS 移动开发技术周报 WWDC Swift 4 | 5 | 摘要:WWDC 15 在旧金山召开,新 SDK 等诸多新内容公布 6 | 7 | --- 8 | 9 | ## 新闻 10 | 11 | 1. [WWDC 15 在旧金山召开,新 SDK 等诸多新内容公布](http://www.infoq.com/cn/news/2015/06/ios9-sdk):一年一度的 Apple 全球开发者大会如期举行。Apple 在此次会议上公布了 iOS 9,OSX 10.11 以及 watchOS 2 等多项内容。其中 iOS 9 的多任务特性和 watchOS 2 的原生 app 支持备受关注。 12 | 13 | 2. [Swift 2.0 以及开源计划](https://developer.apple.com/swift/blog/?id=29):在 WWDC 15 上 Apple 同时公布了 Swift 2.0。在新版本中引入了新的错误处理机制,更好的可用性检查,以及一些完善语言的新关键字等。另外,Apple 还宣布将在今年年底在 OSX 和 Linux 平台上开源 Swift 的编译器和标准库。可以说 Swift 正在由一门 app 开发专用语言向一门“全栈式”语言转变。 14 | 15 | ## 教程 16 | 17 | 1. [《如何使用masonry设计复合型cell》](http://adad184.com/2015/06/08/complex-cell-with-masonry/):[Masonry](https://github.com/SnapKit/Masonry) 是一个使用起来非常方便的代码使用 Auto Layout 进行布局的辅助库,你可以通过使用这个库来避免写那些晦涩难读的 Auto Layout 约束代码。这篇文章是一篇关于使用 Masonry 设计一个复杂 cell 的实战教程。 18 | 19 | 2. [《SpriteKit在iOS9和OSX10.11中的新特性》](http://yulingtianxia.com/blog/2015/06/12/SpriteKit在iOS9和OSX10-11中的新特性/):作者在第一时间介绍总结了今年 WWDC SpriteKit 的新特性。如果你正在使用这个框架制作游戏的话,今年加入的寻路系统,性能优化等内容都是一些非常实用的新特性。 20 | 21 | 3. [《iOS9 新增 UIStackView 官方文档翻译》](http://www.cnblogs.com/tieria/p/4572882.html):iOS 9 中新加入了 StackView,方便开发者组织视图内容。这篇文章是对文档相关部分的翻译,可以参考。 22 | 23 | 4. [Swift Standard Library.playground](http://oleb.net/blog/2015/06/swift-standard-library-playground/):在 WWDC15 的 Sample Code 里,Apple 给出了一个 Swift 标准库的 Playground,用来展示 Swift 标准库的一些用法和 Swift 的基本语法等内容。如果你打算开始学习 Swift 的话,参照[这个文件](https://developer.apple.com/sample-code/swift/downloads/Standard-Library.zip)和 Apple 的 [Swift Programming Language](https://itunes.apple.com/us/book/swift-programming-language/id1002622538?mt=11)会是很好的选择。 24 | 25 | ## 开源项目 26 | 27 | 1. [Onboard](https://github.com/mamaral/Onboard):快速制作 app 引导界面的框架。相比起其他类似框架来说,Onboard 的页面是基于 ViewController 而不是 View 的,这意味着你可以更灵活地组织想要展示的内容。另外 Onboard 还提供了一些默认的布局和像是模糊、渐变这样的常见特效,这使得用 Onboard 制作引导界面变得非常容易。 28 | 29 | 2. [BRYXStackView](https://github.com/bryx-inc/BRYXStackView):iOS 9 上 Apple 引入了一种新的 View Container - StackView。这个项目是类似 Stack View 的一个实现,可以让你在 iOS 7 和 iOS 8 上也能使用 Stack View。 30 | 31 | 3. [KYAnimatedPageControl](https://github.com/KittenYang/KYAnimatedPageControl):很有意思的 Page Control 动画,现在提供了粘性小球和滚动方块两种视觉效果。如果你想要自己项目里的 Page Control 不那么乏善可陈的话,试着用这个库来加入一些新鲜的动画效果也许是不错的选择。作者还在[这篇帖子](http://kittenyang.com/deformationandgooey/)里详细说明了类似这种粘性果冻的动画的制作方法。 32 | 33 | 4. [infer](https://github.com/facebook/infer):Facebook 最近开源的一个静态分析工具,不仅可以用于 Objective-C 的静态分析,也可以对 Java 和 C 代码做检查。这个工具还在进一步开发中,现在的版本可以分析像是空指针和内存泄露的问题,随着开发者和社区的完善,之后会逐步加入其他检查。 34 | 35 | 5. [mal](https://github.com/kanaka/mal/tree/master/swift):Swift Hacker 大概会很喜欢这个项目。[mal] 是一个用各种语言书写的 Lisp 解释器项目,其中也包括 Swift。这给我们展示了 Swift 除了用来作为一门 app 开发语言以外的可能性。如果作为 Swift 开发者的你还正好会一些 Lisp 的话,周末空暇的时候看看这个项目会是非常好的提高。 -------------------------------------------------------------------------------- /article/40.md: -------------------------------------------------------------------------------- 1 | # iOS开发周报:Apple 开设支持服务推特账号,Oculus Rift 表示暂时不支持 Mac 2 | 3 | 标签:iOS Mac 移动 移动开发技术周报 4 | 5 | 摘要:Apple 开设支持服务推特账号,24 小时内获得 12.5 万粉丝;Oculus Rift 表示暂时不支持 Mac 6 | 7 | --- 8 | 9 | ## 新闻 10 | 11 | 1. [Apple 开设支持服务推特账号](http://www.macrumors.com/2016/03/03/apple-launches-twitter-support-account/):本周 Apple 在推特开通了官方的支持账号,用来解答用户使用上的问题。在账号开通 24 小时后,这个账号就拥有了超过 12 万粉丝,并且发出了超过 2750 条信息。使用社交网络的方式来进行客户服务并不鲜见,但是对于 Apple 这样体量的企业也转向更多地用这种迅速的方式提供客服,是企业客服方式正在转变的信号。 12 | 2. [Oculus Rift 表示暂时不支持 Mac](http://9to5mac.com/2016/03/03/oculus-rift-mac-support/):以 Oculus Rift 为代表的虚拟现实设备最近火爆异常。最初 Oculus Rift 是计划支持 Mac 设备的,但是因为 Mac 电脑的 GPU 性能一直无法满足虚拟现实设备的需求,所以 Oculus Rift 也于去年停止了对 Mac 的开发。最近对于 Oculus 创始人之一的 Luckey 采访时,他表示近期暂时没有支持 Mac 的计划,除非 Apple 制造出显示性能足够好的设备。 13 | 14 | ## 教程 15 | 16 | 1. [Tracking tasks with stack traces in Swift](http://www.cocoawithlove.com/blog/2016/02/28/stack-traces-in-swift.html):Debug 向来是开发中很重要的一个环节,但是对于异步代码来说,调试工作会困难得多。这篇文章介绍了一种针对多个线程的任务进行追踪的方式,通过这种方法,我们可以获取到异步任务的调用栈,这对于调试异步代码会非常有用。 17 | 2. [Swift Asserts](https://www.mikeash.com/pyblog/friday-qa-2016-03-04-swift-asserts.html):Assert 经常被用在检查代码运行条件时,善用 assert 可以在开发阶段就捕获由于开发者失误所带来的错误。这篇文章介绍了 Swift 中 assert 相关 API 使用上的一些实践和方式。 18 | 3. [Swift 烧脑体操](http://blog.devtang.com/2016/02/27/swift-gym-1-nested-optional/):一系列 Swift 比较有意思的语法和概念的解析,包括了 Optional,函数参数,高阶函数,`map` 和 `flatMap` 的解读。按照文章的内容进行思考,对于理解 Swift 的这些基本概念很有帮助。 19 | 4. [iOS 高效添加圆角效果实战讲解](http://www.jianshu.com/p/f970872fdc22):圆角是一种很常见的视图效果,相比于直角,它更加柔和优美,易于接受。但很多开发者并不清楚如何设置圆角的正确方式和原理。设置圆角会带来一定的性能损耗,如何提高性能是另一个需要重点讨论的话题。这篇文章就这个话题进行了一些分析和讨论。 20 | 21 | ## 开源项目 22 | 23 | 1. [Advance](https://github.com/storehouse/Advance):一个 Swift 动画框架,可以让我们用很简单的 API 来制作高性能和更真实的交互式动画。如果你对交互式动画并不熟悉的话,可以阅读一下 objc 中国的这篇[文章](http://objccn.io/issue-12-6/)。交互式动画中有很多隐藏的细节,并需要不少动画制作的经验。Advance 将这些繁琐的细节进行了封装,让开发者可以在更高抽象层上制作出完美的交互式动画。 24 | 2. [Markoff](https://github.com/thoughtbot/Markoff):由 thoughtbot 带来的一个完整的 Swift 的 markdown 文件预览 OS X 应用。这个应用使用了 SwiftMark 来解析,使用 ReactiveCocoa 来响应式地进行代码组织。可以作为学习 app 开发的很好的示例应用。 25 | 3. [TVOSSlideViewController](https://github.com/movielala/TVOSSlideViewController):为 tvOS 提供一个可以左右滑动的 view controller。虽然 Apple 在 Apple TV 开发指南中提供了一些交互的范式,但是现在对于 tvOS 界面交互方式的探讨还在热烈地进行中,这个框架就是对于一种新的交互方式的探索。 26 | 27 | -------------------------------------------------------------------------------- /article/41.md: -------------------------------------------------------------------------------- 1 | # iOS开发周报:Apple 为 WWDC 15 和 Apple TV Tech Talks 添加中文字幕 2 | 3 | 标签:iOS Mac 移动 移动开发技术周报 4 | 5 | 摘要:Apple 为 WWDC 15 和 Apple TV Tech Talks 添加中文字幕 6 | 7 | --- 8 | 9 | ## 新闻 10 | 11 | 1. [Apple 为 WWDC 15 和 Apple TV Tech Talks 添加中文字幕](https://developer.apple.com/cn/):观看 WWDC 的 session 视频一直是学习和提高 iOS 开发技术的最好途径。本周,Apple 为 WWDC 15 的所有 session 和前不久举行的 Apple TV Tech Talks 的视频添加了中文字幕,以方便中国开发者观看和学习。作为世界上最大的 iOS 开发者群体,中国的开发者们正在扮演者越来越重要的角色,同时也得到了越来越多的关注。 12 | 2. [2016 春季发布会时间确定,媒体已接收到邀请函](Apple 为 WWDC 15 和 Apple TV Tech Talks 添加中文字幕):Apple 2016 春季发布会的时间已经确定,发布会将于太平洋时间 3 月 21 日上午 10 点进行。这次邀请函上的标语是 “Let us loop you in.”,让人难以捉摸。本次发布会上确定会发布新的 9.7-inch iPad 升级版,新的 4-inch 手机 iPhone SE 以及一款新的 Apple Watch 表带。另外据称,即便不是立即发售,Apple 也很有可能在发布会上宣布新的 Mac 产品线的升级。 13 | 14 | ## 教程 15 | 16 | 1. [蘑菇街 App 的组件化之路](http://limboy.me/ios/2016/03/10/mgj-components.html):随着项目规模变大,将业务进行组件化拆分是一个很容易做出的选择。本文介绍了在一个实际项目中,将业务拆分成分离的相互之间不直接引用的组件的一些方法和实践。 17 | 2. [iOS VoiceOver Programming Guide](http://geeklu.com/2016/03/ios-voiceover-programming-guide/):VoiceOver 是苹果“读屏”技术的名称,属于辅助功能的一部分。VoiceOver可以读出屏幕上的信息,以帮助盲人进行人机交互。 这项技术在苹果的各个系统中都可以看到,OS X,iOS,watchOS,甚至 tvOS。作为一个平时不太被我们关注的技术,大家可能对 VoiceOver 的使用和适配并不熟悉。本文介绍了 VoiceOver 相关的编程技术。 18 | 3. [View controller lifecycle behaviors](http://irace.me/lifecycle-behaviors):本文扩展了 [Many Controllers Make Light Work](http://khanlou.com/2016/02/many-controllers/) 一文中对于拆分 View Controller 的想法,使用 behaviors 的方式对 View Controller 的生命周期方法进行了一些扩展。 19 | 4. [Being Lazy](http://alisoftware.github.io/swift/2016/02/28/being-lazy/):lazy 关键字和 `LazySequence` 是 Swift 中延迟加载和运行的两种方式,合理使用 lazy 有时可以巧妙地绕开一些限制,并给出更优化的实现。本文解析了使用 lazy 的一些常见场景和方法。 20 | 21 | ## 开源项目 22 | 23 | 1. [Injection Plugin for Xcode](https://github.com/johnno1962/injectionforxcode/):一个通过注入 Objective-C 和 Swift 运行时来实现将对代码的修改动态反应到运行中的 app 中的 Xcode 插件。通过使用这个插件,你可以避免很多重新编译和运行,从而提高开发效率。 24 | 2. [navigation-stack](https://github.com/Ramotion/navigation-stack):Push 的导航方式在 iOS 中十分常见,但是这种模式有一个比较致命的不足,那就是在导航栈十分深的时候,想返回到最初的 View Controller 将非常麻烦。这个框架提供了一种在导航栈中快速返回的方法,使用类似系统的 App Switcher 的视图,来方便用户进行迅速切换。 25 | 3. [Stevia](https://github.com/s4cha/Stevia):AutoLayout 已经是现在 iOS 开发中的标配,但是如果不使用 Interface Builder 的话,代码使用 AutoLayout 是一件非常繁琐的事情。Apple 提供了一种[可视化的代码方式](https://developer.apple.com/library/prerelease/ios/documentation/UserExperience/Conceptual/AutolayoutPG/VisualFormatLanguage.html)来简化这个流程,然而也并不好用。这个框架巧妙地使用操作符重载的方法提供了一种类型安全的可视化语言的方式实现 AutoLayout。 26 | 27 | -------------------------------------------------------------------------------- /article/42.md: -------------------------------------------------------------------------------- 1 | # iOS开发周报:Apple 正在准备自有云架构 McQueen,App Analytics 分析周报上线 2 | 3 | 标签:iOS Mac 移动 移动开发技术周报 4 | 5 | 摘要:Apple 正在准备自有云架构 McQueen,以替换 Amazon 云服务;iTunes Connect 开始为用户提供 app 分析周报邮件服务。 6 | 7 | --- 8 | 9 | ## 新闻 10 | 11 | 1. [Apple 正在准备自有云架构 McQueen](https://developer.apple.com/news/?id=03092016a):依赖移动终端的力量,Apple 现在已经是全球最大的云服务提供商之一。包括 App Store,iCloud,Apple Music 等在内的服务每天有数以亿计的用户在使用。业内人士报道,Apple 最近开始了一个叫做 “Project McQueen” 的项目,试图开始构建企业自由的云架构。在之前,Apple 的云服务大部分都依赖于 Amazon,并使用了某些 Microsoft 和 Google 的服务。显然 Apple 对于现状并不太满意,特别是用户在加载图片或是下载视频时可能面临的速度较慢的问题,已经成为了 Apple 云服务发展的瓶颈。 12 | 2. [App Analytics 分析周报上线](https://developer.apple.com/news/?id=03092016a):对于 app 下载和评论的管理一直是 iTunes Connect 的弱项,不过最近一两年来 Apple 一直这方面进行了改进,包括在 iTunes Connect 中添加分析模块,更好的 Crash 报告等。最近,Apple 为开发者提供了周报邮件,以帮助开发者追踪 app 的下载和评分状况。有需要的开发者可以在 iTunes Connect 中进行订阅。 13 | 14 | ## 教程 15 | 16 | 1. [What's new in Swift 2.2](https://www.hackingwithswift.com/swift2-2):Swift 2.2 即将上线,在新版本中,很多原有写法已经失效,一些新的内容被加入到语言中,其中包括弃用 C 风格的循环,移除 `var` 修饰的函数参数,使用 `#selector` 来定义方法 Selector 等等。这篇文章对 Swift 2.2 中所有变化进行了详细说明,包括现有用例以及对应方法。如果你正在项目中使用Swift 的话,相信本文将对顺利迁移到 Swift 2.2 版本有所帮助。 17 | 2. [iOS冰与火之歌番外篇 - App Hook答疑以及iOS 9砸壳](http://drops.wooyun.org/papers/13824):关于 iOS 安全系列的最新文章。上架 App Store 的 app 会被进行加壳处理,我们想要对这些 app 进行 hook 或者探索,第一步就是要进行去壳。本文主要介绍了 iOS 上砸壳 (Dumpdecrypted),签名及重新安装的一些技巧。 18 | 3. [初探 Swift Sequences 和 Generators](http://swift.gg/2016/03/10/experimenting-with-swift-2-sequencetype-generatortype/):Swift 的 `GeneratorType` 和 `SequenceType` 是两个非常强大的协议。如果你认为它们只是被用来构建 for...in 循环的话你就大错特错了。它们组合起来其实包含了函数式编程的很多思想,可以作为基本的容器单元进行使用。如果你对此有兴趣的话,可以通过这篇文章进行初步了解。 19 | 4. [VIPER to be or not to be?](https://swifting.io/blog/2016/03/07/8-viper-to-be-or-not-to-be/):一篇关于 VIPER 架构的讨论。Apple 官方推荐的 MVC 架构可能是绝大多数 iOS app 的选择,MVC 架构虽然上手非常容易,但是精通却相对困难。对于一些比较庞大的项目,MVC 往往无法满足可维护性和可扩展性,因此才会有对其他各种开发架构的探索。VIPER 就是一个通过组件职责进行划分的构建框架,如果你的 app 规模较大,使用 VIPER 可能会有助于 app 模块的明确化,本文在这个方向对 VIPER 的适用场景和一些实践进行了说明。 20 | 21 | ## 开源项目 22 | 23 | 1. [PeekPop](https://github.com/marmelroy/peekpop):iPhone 6s 和 6s Plus 支持 3D Touch 技术,并提供了一种全新的 Peek & Pop 交互方式,可以让用户对内容进行快速预览,并提供新的入口。但是这个特性被限制在了新设备上,这使得绝大多数用户无法享受到 Peek & Pop 所带来的便利。该框架通过检测用户手势中的按压半径,在老设备上模拟 3D Touch 的行为,为这些设备也带来了类似 Peek & Pop 的体验。该框架 API 设计上与 Apple 的现有体系十分类似,因此转换起来也非常方便。 24 | 2. [SPTPersistentCache](https://github.com/spotify/SPTPersistentCache):Spotify 最近正在陆续将他们的 iOS 组件进行开源,这次为我们带来了一个缓存管理的框架。SPTPersistentCache 提供了一整套持久化缓存的解决方案,它将缓存 header 信息存储到分立的缓存文件中,并使用这些信息进行过期管理和快速查找。同时该框架还提供了一个配套的 OS X 应用,以帮助开发者确认当前缓存系统中的内容。 25 | 3. [Bolts in Swift](https://github.com/BoltsFramework/Bolts-Swift):在 Objective-C 时代,[Bolts](https://github.com/BoltsFramework/Bolts-ObjC) 就是非常常见的任务管理框架,它提供了一种类似 Promise 的方式来让我们避免复杂的异步任务处理。Bolts-Swift 将类似的内容移植到了 Swift 上,使用 Swift 的开发者现在也可以利用类似于原来 Bolts 的 API 进行异步任务管理。采用任务和 Promise 的方式来编写异步代码,有助于提高代码的可读性和维护性。如果你还没有开始尝试做类似的事情,现在就是一个进行实践的好机会。 26 | 27 | -------------------------------------------------------------------------------- /article/43.md: -------------------------------------------------------------------------------- 1 | # iOS开发周报:Apple 发布 iPhone SE 和 9.7 inch iPad Pro,Xcode for iPad Pro 可能正在开发中 2 | 3 | 标签:iOS Mac 移动 移动开发技术周报 4 | 5 | 摘要:Apple 春季发布会公布小屏 iPhone SE 以及 9.7 inch iPad Pro,Mac 产品线预计将在六月至七月更新;iOS 9.3 中动态库加载速度得到大幅改善。 6 | 7 | --- 8 | 9 | ## 新闻 10 | 11 | 1. [Apple 2016 春季发布会公布小屏 iPhone SE 以及 9.7 inch iPad Pro](http://www.macrumors.com/2016/03/22/9-7-ipad-pro-iphone-se-2gb-ram/):今年的春季发布会比以往都要短,Apple 在发布会上主要公布了小屏 iPhone SE 以及 9.7 inch iPad Pro。两者都配置了与当前 Apple 旗舰产品类似的硬件,包括 2GB 的内存以及最新的 CPU。Mac 产品线本次没有按照惯例进行更新,有媒体猜测 Apple 正在重新设计 13 inch 和 15 inch 的笔记本电脑,并将于六月或者七月随着 WWDC 一同公布。 12 | 2. [ResearchKit 和 CareKit](http://www.apple.com/researchkit/):如果说发布会上有什么值得开发者关注的事情,那应该就是新加入的 CareKit 了。CareKit 和 ResearchKit 一样是 Apple 集成在 iOS 和 OSX 中的开源框架,作为 ResearchKit 的延伸,CareKit 为家庭医疗服务提供了更方便的管理方式。如果你打算在移动医疗这个新领域发展的话,这两个框架以及已经 iOS 系统会是很不错的出发点。 13 | 3. [Xcode for iPad Pro 消息](http://minutestomidnight.net/blog/2016/3/considering-an-xcode-for-ipad-pro):iPad Pro 具有堪比甚至超过某些笔记本电脑的屏幕尺寸和性能,而且被 Apple 定义为一款生产力工具。最近有传言表明 Apple 正在开发 iPad Pro 版的 Xcode,包括文本编辑,Interface Builder,完整的编译链工具,版本管理,以及本机调试等一系列激动人心的特性。如果消息属实,那在不久的将来我们应该就可以在移动设备上开发移动设备应用了。 14 | 15 | ## 教程 16 | 17 | 1. [iOS 视图控制器转场详解](https://github.com/seedante/iOS-Note/wiki/ViewController-Transition):iOS 7 开始,SDK 为我们提供了方便的自定义 View Controller 转场的解决方案,通过精心调整,可以说我们现在能够实现任何复杂的转场效果,这对于提高应用品质和用户的使用体验可以说是至关重要的。这篇文章介绍了转场背后的机制,缺陷以及实现过程中的技巧与陷阱。如果你对自定义转场还不理解的话,这篇文章将通过一步步带你实现一些转场效果,让你理解自定义转场背后的原理。 18 | 2. [iOS 9.3 更新,动态库加载速度大幅优化](https://github.com/stepanhruda/dyld-image-loading-performance):随着春季发布会的结束,iOS 9.3 也正是发布了。之前 iOS 8 一直以来困扰开发者的动态库冷加载速度太慢的问题在 iOS 9.3 中得到了彻底的解决。开发者发现,对于数量较多的动态框架,新版本中加载速度约提升了 75%。不过因为现在 app 的不太可能只从 iOS 9.3 开始支持,因此动态库的使用还是应该谨慎,或者使用文中的方法来绕过加载过慢的问题。 19 | 3. [Contributing to Open Source Swift](https://realm.io/news/tryswift-jesse-squires-contributing-open-source-swift/):这是本月 try! Swift 会议上一个 session 的视频。在 Swift 开源后,iOS/OS X 开发者社区展现出了巨大的热情并提交了相当多的贡献,来帮助 Swift 进步。这个 session 为我们讲述了如何上手并准备为 Swift 提交代码或者做出贡献。有志于为 Swift 开源作出贡献,或者是对 Swift 源码结构和开发方式好奇的开发者可以看看。 20 | 21 | ## 开源项目 22 | 23 | 1. [Appz](https://github.com/SwiftKitz/Appz):在 iOS 9 中使用 URL Scheme 打开其他 app 的方式受到了很大的限制,为了安全因素,Apple 鼓励使用 Universal Link 的方式在应用间跳转。但是相比起探测应用的 URL Scheme,链接更难以整理。Appz 是一个帮助开发者更容易使用 Deep Link 的框架,它收集了很多常见应用的打开方式和对应的 app id,并且保证了外部链接的检查和打开代码与应用的其他逻辑代码分离,并且易于测试。 24 | 2. [Permission](https://github.com/delba/Permission):在 iOS 中获取像是推送通知,麦克风或者联系人等权限的代码虽然不是很困难,但是却分散在 SDK 的各处,使用起来不是很方便。这个框架将 iOS 中所有的权限请求集中处理,并为我们提供了统一和简洁的 API。 25 | 3. [RKTagsView](https://github.com/kuler90/RKTagsView):帮助生成类似 OS X 上 NSTokenField 那样的 tag 的视图类。 26 | 4. [NextGrowingTextView](https://github.com/muukii/NextGrowingTextView):随着输入文本变化而自动调整高度的 text view。相比起其他类似的实现,NextGrowingTextView 是基于 iOS 7 的 TextKit 大幅修改之前的类似框架的重写。它为使用者提供了足够的委托方法和访问接口,十分灵活。 27 | 28 | -------------------------------------------------------------------------------- /article/44.md: -------------------------------------------------------------------------------- 1 | # iOS开发周报:Apple 迎来 40 岁生日,iOS 更新 9.3.1 修复 Safari 链接问题 2 | 3 | 标签:iOS Mac 移动 移动开发技术周报 4 | 5 | 摘要:Apple 迎来 40 岁生日,iOS 更新 9.3.1 修复 Safari 链接问题 6 | 7 | --- 8 | 9 | ## 新闻 10 | 11 | 1. [Apple 公司于 4 月 1 日迎来 40 岁生日](http://www.macrumors.com/2016/04/01/apple-turns-40-history-timeline/):1976 年 4 月 1 日,乔布斯和沃兹尼亚克在 Los Altos 乔布斯家的车库中创立了苹果公司。从 Apple I 和 Apple II 的成功开始,Apple 经历了低谷和回归,并开创了像是个人电脑和移动互联网的新时代。这篇新闻帮助我们总结回顾了这 40 年来 Apple 所发布的产品和变化,对历史感兴趣的开发者可以看看 Apple 是如何一步一步走到今天的。 12 | 2. [iOS 更新 9.3.1 修复 Safari 链接问题](http://www.forbes.com/sites/amitchowdhry/2016/03/31/apple-ios-9-3-1-released/#3b70622711a6):iOS 9.3 于上周发布,为我们带来了 Night Shift 和备忘录 Touch ID 等改进。而不幸的是,很多用户发现了升级 iOS 9.3 后 Safari 和其他一些 app 中的 Universal Link 失效的问题,Apple 迅速做出了对应并发布了新的修正版本 iOS 9.3.1 来解决这个问题。 13 | 14 | ## 教程 15 | 16 | 1. [Swift Runtime分析:还像OC Runtime一样吗?](http://mp.weixin.qq.com/s?__biz=MzA3ODg4MDk0Ng==&mid=403153173&idx=1&sn=c631f95b28a0eb4b842a9494e43a30e5#rd):一篇对 Swift 运行时进行探索和分析的文章,Swift 的运行时和 Objective-C 的运行时是有所不同的,但是 Swift 代码也有可能使用到 Objective-C 的运行时特性。本文对两种运行时进行了一些对比和区分,并对两者的动态特性的使用进行了介绍。 17 | 2. [iOS冰与火之歌 – 利用XPC过App沙盒](http://drops.wooyun.org/papers/14170):XPC 是 OS X 上进程间通讯的常用手段,而在 iOS 中虽然第三方开发者不允许直接使用 XPC,但是这项技术还是存在于 iOS 系统之中的,这篇文章简单介绍了在 iOS 上利用 XPC 与系统进程通讯并突破沙盒的技术要点。 18 | 3. [Breaking Swift with reference counted structs](http://www.cocoawithlove.com/blog/2016/03/27/on-delete.html):Swift 是一门自动内存管理的语言,但是其背后机制其实还是引用计数。对于熟悉 Objective-C 的开发者来说,最大的区别在于 Swift 中对值类型的使用非常多,而值类型并不在堆上进行内存分配,自然也就没有引用计数的问题。但是如果你在值类型中包含持有了引用类型,背后将会发生一些隐式的复制和持有,将导致内存泄露。这篇文章举了一个这方面的例子,并进行了一些探索。 19 | 4. [Surprises with Swift Extensions](https://pspdfkit.com/blog/2016/surprises-with-swift-extensions/):Swift 的 extension 为我们提供了非常多的方便,虽然 Swift 本身是以 module 的方式对不同框架的代码进行了隔离,但是向 UIKit 的类型添加 extension 时,我们仍然需要为其添加前缀。不过,使用 `@objc(prefix_name)` 可以在保持 Swift 代码名字优雅的前提下,只向 Objective-C 运行时暴露合适的方法名,不失为一种好方法。这篇文章讲述了一个调试的例子,并简单解释了 Swift Extension 的一些限制。 20 | 21 | ## 开源项目 22 | 23 | 1. [Crayons](https://github.com/Sephiroth87/Crayons):帮助在 Xcode 的 Interface Builder 中定义一个项目专用的颜色盘的插件。这个插件通过读取项目中特定文件中定义的颜色,将其以调色盘显示在 Interface Builder 里,方便你在 IB 中构建界面时直接点取使用。如果你通常是使用 IB 来制作 UI 的话,这会是十分方便的功能。 24 | 2. [WKZombie](https://github.com/mkoehnke/WKZombie):由 Swift 编写的一个无界面浏览器框架,它非常适合用来解析网页内容,并进行一些自动化操作。像是获取网页内容值,提交表单等等自然不在话下。如果你需要在应用中实现一些类似简单爬虫或者网页自动化的流程,或是为你的网站编写测试,那使用这个框架会让你事半功倍。 25 | 3. [Gifu](https://github.com/kaishin/Gifu):一个轻量级的 GIF 动画框架,它采用了利用 CADisplayLink 绑定帧动画,并逐帧解析和加载的方式,来处理体积较大的 GIF 文件。如果你的应用中恰好有显示大 GIF 文件的需求,那这个框架会是一个可选项。 26 | 4. [UIImageColors](https://github.com/jathu/UIImageColors):从一张 `UIImage` 图片中提取出主色调的框架。将 cell 的背景颜色设置为与其中图片的主色调一致的颜色来增强用户体验和区分不同 cell 的内容,是在 Apple 现在的 iTunes 应用上常见的表现手段。利用该框架,你可以简单地运用将这种设计手法进行设计,而且框架中还提供了一系列配套的辅助方法以帮助你简化构建这种高对比度 cell。 27 | 28 | -------------------------------------------------------------------------------- /article/45.md: -------------------------------------------------------------------------------- 1 | # iOS开发周报:Google 有可能考虑在 Android 开发中引入 Swift,更加轻薄的 Apple Watch 可能于今年 WWDC 发布 2 | 3 | 标签:iOS Mac 移动 移动开发技术周报 4 | 5 | 摘要:Google 有可能考虑在 Android 开发中引入 Swift,而对于目前看来更合适作为 Java 的替代品 Kotlin,Google 表示其编译速度太慢。更加轻薄的 Apple Watch 第二代产品可能于今年 WWDC 发布。 6 | 7 | --- 8 | 9 | ## 新闻 10 | 11 | 1. [Google 表示可能会将 Swift 作为 Android 开发的头等语言](http://thenextweb.com/dd/2016/04/07/google-facebook-uber-swift/?%2BSandbox):Swift 自从发布以来就受到了很多开发者的欢迎,而在开源之后 Swift 的应用平台和使用场景得到了极大扩展,业界对于 Swift 开发者的需求也正在爆发式增长。最近,Google,Facebook 和 Uber 的开发人员在伦敦对这门语言进行了一些讨论。Google 的相关负责人表示正在考虑将 Swift 引入 Android 开发中,从而逐渐减少对 Oracle 和 Java 的依赖。相对于更容易移植和适配的 Kotlin,Swift 在编译速度上具有优势。而 Facebook、Uber 和 Lyft 等知名互联网企业也已经纷纷在自家的产品中使用了 Swift。在 Swift 开源后,其一大优势就是能够在服务器和客户端使用统一的语言,在有像是 IBM 这样的企业的支持下,Swift 正在向着这一愿景前进。 12 | 2. [更加轻薄的 Apple Watch 第二代产品可能在 WWDC 上公布](http://www.macrumors.com/2016/04/08/apple-watch-2-debut-wwdc-june-brian-white/):Apple Watch 初代产品虽然在同类竞品中算是佼佼者,但是远没有达到市场预期。有限的应用场景和相对不便的佩戴体验可能是造成这一结果的重要因素。有消息称 Apple 可能在今年 WWDC 发布 Apple Watch 的第二代产品。相比于现在的 Apple Watch,新版本在厚度上将会减少 20% ~ 40%,并可能配置可以进行 Facetime 的摄像头和更好的 WiFi 模块。究竟新的 Apple Watch 能有何表现,第三方开发者们能在这个平台实现怎样的创意和功能,还要让我们拭目以待。 13 | 14 | ## 教程 15 | 16 | 1. [教你用Xtrace读懂Mantle源码](http://ios.jobbole.com/84471/):[Xtrace](https://github.com/johnno1962/Xtrace) 是 iOS 开发中一个强大的调试框架,能详细打印出一个某个方法被调用的堆栈,方便调试时定位问题。这篇文章介绍了使用 Xtrace 追踪 [Mantle](https://github.com/Mantle/Mantle) 的调用,逐步帮助我们理解 Mantle 行为和源码的一个例子。在我们需要调试的代码和问题比较复杂的时候,使用 Xtrace 来进行辅助会是一个很好的选择。 17 | 2. [Swift 2 throws 全解析 - 从原理到实践](https://onevcat.com/2016/03/swift-throws/):throws 关键字和异常处理机制是 Swift 2 中新加入的重要特性。Apple 希望通过在语言层面对异常处理的流程进行规范和统一,来让代码更加安全,同时让开发者可以更加及时可靠地处理这些错误。这篇文章从 throws 的内部实现探索了 throws 的一些细节,并为我们带来了在日常开发中使用 Swift 异常机制的一些实践方法。 18 | 3. [Using Swift Extensions The “Wrong” Way](https://www.natashatherobot.com/using-swift-extensions/):Swift 中 extension 一般用来表示类型对某个接口进行扩展,但是这并不是 extension 的唯一用法。匿名的 extension 也可以用来对代码进行更好地组织,使其清晰可读。这篇文章为我们介绍了那些关于 extension 的“错误”用法,虽然这些用法并没有实际去将类型按照某个接口进行扩展,但是这并不是一种反模式的代码设计行为。恰恰相反,使用这些方法能够让代码更加优雅。 19 | 4. [用更 Swifty 的代码遍历数据](http://blog.dianqk.org/2016/04/07/用更%20Swifty%20的代码遍历数据/):在遍历一个 Array 的时候,我们可能会用 `for .. in`、`map`、`flatMap` 或者是 `forEach` 等等,这篇文章基于 `flatMap`,使用了一些模式匹配的方法来更好地处理 [T?] 。通过为 `SequenceType` 添加一些便利方法,我们可以用一种更易读和可维护的方式来更好地对存储可选值类型的数组进行遍历。 20 | 21 | ## 开源项目 22 | 23 | 1. [SwiftyMarkdown](https://github.com/SimonFairbairn/SwiftyMarkdown):一个将 markdown 转换为 `NSAttributedString` 的框架。相比于其他一些 markdown 解析的框架,SwiftyMarkdown 使用的是 Cocoa 框架的 `NSScanner` 来进行的实现,因此代码相对简单。不过如果你需要处理较多的 markdown 内容,可能选择其他一些更底层的实现会更合适。 24 | 2. [SwiftSVG](https://github.com/mchoe/SwiftSVG):解析和显示 SVG 的库,可以将输入的字符串,文件,URL 等来源的 SVG 资源转换为可以直接描画显示的 `UIBezierPath` 对象。另外,该框架还额外提供一个 `SVGView` 来帮助开发者在 Interface Builder 中显示和调试 SVG 资源。如果你的应用中有需要用到或者显示 SVG 矢量图片资源的话,这个库会是很好的选择。 25 | 3. [KMNavigationBarTransition](https://github.com/MoZhouqi/KMNavigationBarTransition):用来统一管理导航栏转场以及当 push 或者 pop 的时候使动画效果更加顺滑的通用库。自定义 Navigation View Controller 导航栏的背景或者状态是 iOS 开发者一定会遇到的课题,这个框架帮助我们将复杂的操作细节进行了封装,而使用者只需要关心目标 view controller 的样式即可。 26 | 27 | -------------------------------------------------------------------------------- /article/46.md: -------------------------------------------------------------------------------- 1 | # iOS开发周报:Swift 项目合并 Android 分支,App Store 开展 “Apps for Earth” 促销活动 2 | 3 | 标签:iOS Mac 移动 移动开发技术周报 4 | 5 | 摘要:Swift 项目合并 Android 分支,App Store 开展 “Apps for Earth” 促销活动 6 | 7 | --- 8 | 9 | ## 新闻 10 | 11 | 1. [Swift 项目合并 Android 分支](https://github.com/apple/swift/pull/1442):在今年二月,Facebook 的工程师 [Brian Gesiak](https://github.com/modocache) 向 Apple 提交了一个 pull request,将 Swift 的标准库移植到了 Android 上。这样开发者可以使用 NDK 的方式在 Android 上调用 Swift 编译的内容。本周 Apple 将这些代码合并到了 Swift 仓库中,这意味着我们可以在不久的将来在 Android 上运行 Swift。但是值得指出的是,这并不代表我们现阶段可以很好地使用 Swift 来开发 Android 应用,在 SDK 调用和开发模式的匹配上,仍然会有很多工作要做。 12 | 2. [App Store 开展 “Apps for Earth” 促销活动](http://www.worldwildlife.org/pages/download-wwf-together-and-the-new-earth-story-available-on-iphone-and-ipad):很多用户应该已经注意到了一些 app 的图标最近都换成了绿色。这些 app 参与了 Apple 与 WWF (世界自然基金会) 合作推出的 “Apps for Earth” 活动,其中包括像是炉石传说,愤怒的小鸟 2,VSCO,LINE 等知名 app。在活动期间这些 app 的部分收入将捐助给 WWF 以支持它们的环保行动。 13 | 3. [Apple 可能正在策划推出 App Store 付费排名](http://daringfireball.net/linked/2016/04/14/bloomberg-app-store-search):国外有[消息](http://www.bloomberg.com/news/articles/2016-04-14/apple-said-to-pursue-new-search-features-for-crowded-app-store)指出,Apple 可能在考虑将竞价排名或者付费关键词搜索加入到 App Store 的搜索体系中。根据现有消息,App Store 的付费排名可能采取和 Google 搜索的关键字购买类似,开发商对某个关键字进行购买,并让自己的 app 出现在搜索前列。如果消息属实,那么这对整个 App Store 生态将产生相当大的影响。 14 | 15 | ## 教程 16 | 17 | 1. [iOS 关于navigationBar的一些:毛玻璃、透明、动态缩放、动态隐藏](http://www.jianshu.com/p/b2585c37e14b):关于 iOS 中的导航栏自定义相关技术,在 iOS 7 改变整体风格以前就是一个热门话题。而在 iOS 7 加入半透明效果和重新定义了视觉元素之后,导航栏的显示和动态特效自定义需求则更加复杂。这篇文章对导航栏的常见自定义效果进行了一些整理和示例说明。 18 | 2. [Custom UIViewController transitions in VIPER](https://swifting.io/blog/2016/04/11/12-custom-uiviewcontroller-transitions-in-viper/):ViewController 转场的 API 在 iOS 7 被引入到 iOS SDK 中,从此开发者可以方便地控制和自定义转场的效果。如果你对 VIPER 或者其他一些非 MVC 的架构方式有一定了解的话,会知道其实采取这些非 MVC 的方式时,和 CocoaTouch API 进行交互会有一些额外需要注意的事项和技巧。这篇文章就为我们说明了如何在一个 VIPER 架构的项目中使用 ViewController 转场相关的 API。如果你有意尝试新的架构方式的话,这可能会对你有所启发。 19 | 3. [Powerful private methods for debugging in Cycript & LLDB](http://iosre.com/t/powerful-private-methods-for-debugging-in-cycript-lldb/3414):使用 LLDB 进行 app 调试可以说是广大 iOS 开发者的日常必备技能了,而相比起来,知道或者熟悉 Cycript 的开发者就会少很多。[Cycript](http://www.cycript.org) 是一款能在越狱设备上对运行时进行注入的调试工具,你可以用它来对 app 进行探索。这篇文章为我们介绍了一些调试时很有用,但却鲜为人知的命令。 20 | 21 | ## 开源项目 22 | 23 | 1. [EasyPeasy](https://github.com/nakiostudio/EasyPeasy):另一个用来简化创建布局约束的框架,EasyPeasy 使用了更简洁和智能的约束描述语法来创建约束,并提供了很多便利的方法和属性辅助我们以更加直观的方式用纯代码使用 AutoLayout。如果你不使用 Interface Builder,而是选择在源代码中创建视图和约束的话,这个框架可以帮助你节省很多时间。 24 | 2. [Knuff](https://github.com/KnuffApp/Knuff):一个开源的 OS X app,可以用来设定使用某个推送证书进行推送通知的测试。在以前我们可能经常会使用像是 [houston](https://github.com/nomad/houston) 这样的命令行工具进行推送,而 Knuff 则使用 GUI 为我们提供了相同的功能。这在开发过程中进行快速测试时会非常方便。 25 | 3. [TextAttributes](https://github.com/delba/TextAttributes):Cocoa 框架中有一些使用起来会令人抓狂的 API,`NSAttributedString` 就是其中之一。想想看要创建一个带有格式的字符串是多困难吧:寻找 `Range`,指定属性,创建配置字典等等。Cocoa 这样设计 API 可以最大限度保证松耦合,确实有其优势。但是作为 API 的使用者,这样的接口使用起来并不是特别方便,而且并不太适合 Swift 的强类型约束。TextAttributes 框架将这些松耦合的接口进行了重新封装,使其类型更加安全,也使得原有的 API 更易用一些。 26 | 4. [Peek](https://github.com/shaps80/Peek):一个可以在开发时截取当前界面,并且对界面里的视图进行检测和查看的框架,你可以把它理解为可以运行在 iOS 上的 [Reveal](http://revealapp.com)。通过集成 Peek,你可以快速确认界面布局是否满足设计师的需求,也可以在运行时确认某个 view 的状态是否和预想一样。 27 | 5. [FBMemoryProfiler](https://github.com/facebook/FBMemoryProfiler):Facebook 出品的一个实时监测内存使用的库。相比于 Xcode 自带的 Instruments,这个框架提供了更友好的信息,包括当前没有释放的对象以及 retain cycle 的详细信息等。这个工具是高度模块化的,你可以选择自己感兴趣的部分使用,比如要是你只想要检测 retain cycle 的话,可以只需要使用 Facebook 同时公布的这个项目:[FBRetainCycleDetector](https://github.com/facebook/FBRetainCycleDetector)。 28 | 29 | -------------------------------------------------------------------------------- /article/47.md: -------------------------------------------------------------------------------- 1 | # iOS开发周报:WWDC 16 门票抽选结束,MacBook 和 MacBook Air 获小幅更新 2 | 3 | 标签:iOS Mac 移动 移动开发技术周报 4 | 5 | 摘要:WWDC 16 门票抽选结束,MacBook 和 MacBook Air 获小幅更新 6 | 7 | --- 8 | 9 | ## 新闻 10 | 11 | 1. [WWDC 16 将在 6 月 13 日举行,门票抽选已经结束](https://developer.apple.com/wwdc/):一年一度的 Apple 全球开发者大会日程已经确定。WWDC 16 将于 6 月 12 日进行报到,并在 6 月 13 日开始的一周于美国旧金山举行。和往年一样,WWDC 16 的门票也采用抽选方式发售,并且抽选已经完成。WWDC 16 上预计会发布 iOS 和 OS X 的全新版本,以及很有可能公布新款的 MacBook Pro 和 Apple Watch 等。如果你足够幸运获得了今年 WWDC 的门票,不妨可以参考一下这篇[《写给初次参加 WWDC 的开发者的简明攻略》](https://onevcat.com/2016/04/first-wwdc/)尽早开始准备行程。 12 | 2. [MacBook 和 MacBook Air 获小幅更新](http://www.apple.com/cn/macbook/):在今年三月的 Apple 新款发布会上笔记本电脑产品线并没有获得更新,本周 Apple 对 MacBook 和 MacBook Air 进行了小幅更新。MacBook 更新了 Skylake Intel Core M 的 CPU,新的显卡,以及新增了玫瑰金的款式。而 MacBook Air 在硬件更新的基础上还将最低配置的内存容量由 8 GB 提高到了 16GB。但是此次更新依然没有涉及 MacBook Pro 和 Mac Pro 等产品,媒体预计这两款更加专业的产品更新将在 6 月的 WWDC 上宣布。 13 | 14 | ## 教程 15 | 16 | 1. [高速公路换轮胎——为遗留系统替换数据库](http://www.jianshu.com/p/d684693f1d77):不断重构是维持代码设计和项目活力的重要方法。而重构和新版本的迭代开发一起进行会是一件很有挑战的事情。在这篇文章中,作者讲述了讲述他们的团队在如何在不影响系统外部行为,也不影响正常交付的情况下,对 app 内的数据库实现进行替换的工作。在文章最后,作者也对重构方式和经验进行了一些总结。 17 | 2. [探索 Swift 中的 MVC-N 模式](https://realm.io/cn/news/slug-marcus-zarra-exploring-mvcn-swift/):MVC-N 模式是一种对 MVC (Model View Controller) 模式进行了扩展的设计模式,它使异步网络调用与用户界面控制器相互隔离,从而对 Controller 部分进行了一些分离和简化。相对于其他一些框架,MVC-N 所作出的变动和更改力度要小得多,因此也更容易应用在开发中,迁移起来也不会特别困难。通过将将网络访问代码抽离出来,形成单独的网络控制器抽象,可以让其他部分的重用和重构变得容易得多。 18 | 3. [Rejected Swift Proposals](http://chris.eidhof.nl/post/rejected-swift-proposals/):Swift 开源后社区为 Swift 的进化和发展出谋划策,提出了很多的建议。在一些建议被采纳了,并且会出现在今后的 Swift 版本中,但是更多的还是被回绝了。这篇博客分析了几个呼声很高但是最后没有能成为标准的提案,并对它们进行了一些评论。 19 | 4. [巧用 Class Extension 分离接口依赖](http://blog.sunnyxx.com/2016/04/22/objc-class-extension-tips/):Class Extension 和 Category 是我们经常使用的 Objective-C 语法,使用这些语言特性能够让我们以更优雅的方式组织代码并分离接口依赖。本文举了一个这方面的应用例子来对使用 Class Extension 的好处进行了解释。 20 | 21 | ## 开源项目 22 | 23 | 1. [GPUImage 2](https://github.com/BradLarson/GPUImage2):如果你在做图像处理相关的工作的话,一定不会回 [GPUImage](https://github.com/BradLarson/GPUImage) 这个强大的图像/视频处理框架陌生。GPUImage 2 是使用 Swift 对原来 Objective-C 版本的 GPU Image 进行的完全重写。得益于 Swift 的跨平台特性,现在 GPUImage 2 不仅可以运行在 iOS 和 Mac 上,你还能在 Linux 上使用它。Swift 的语言特性也在这个框架中得到了完美的诠释,相比于 Objective-C 版本,Swift 的新版代码量只有原来的四分之一,并且更加安全易用。GPUImage 2 的作者同时也发布了[一篇博客](http://sunsetlakesoftware.com/2016/04/16/introducing-gpuimage-2-redesigned-swift)来阐释 GPUImage 2 背后的一些思考。 24 | 2. [JASON](https://github.com/delba/JASON):一个 Swift 的 JSON 解析库,并提供了 Alamofire 的支持。作者在 [benchmark](https://github.com/delba/JASON/tree/benchmarks) 中宣称 JASON 的速度要比 [SwiftyJSON](https://github.com/SwiftyJSON/SwiftyJSON) 要快很多,但是实际上可能是进行性能测试的代码存在的一些类型转换上的区别导致的。不过不论如何,JASON 的代码十分简洁,为我们提供了一个在 Swift 中使用 JSON 的另一种封装和选择。 25 | 3. [JSPatchX](https://github.com/bang590/JSPatchX):[JSPatch](https://github.com/bang590/JSPatch) 可以让你用 JavaScript 书写原生 iOS app,在实际使用中,只需在项目引入极小的引擎,就可以使用 JavaScript 调用任何 Objective-C 的原生接口,获得脚本语言的优势:为项目动态添加模块,或替换项目原生代码动态修复 bug。这个项目是 JSPatch 的 Xcode 代码自动补全插件,使用这个插件,能让你在 Xcode 中很容易地书写 Javascript 的文件。 26 | 4. [The Swift Summary Book](https://github.com/jakarmy/swift-summary):对于 Swift 入门和语法学习来说,Apple 的官方文档是很好的材料。但是文档存在内容较多,有时候阅读噪声太大的问题。这个 repo 提供了一系列 Playground 文件,集中地展示了 Swift 的基础语法特性。如果你有一些其他语言的使用基础,想要入门 Swift 的话,这些示例代码应该能够帮助你完成这个任务。 27 | 28 | 29 | -------------------------------------------------------------------------------- /article/48.md: -------------------------------------------------------------------------------- 1 | # iOS 开发周报:Xamarin 宣布开源,Apple 向开发者推广宣传 Apple Music 相关 API 2 | 3 | 标签:iOS Mac 移动 移动开发技术周报 4 | 5 | 摘要:Xamarin 宣布开源,Apple 向开发者推广宣传 Apple Music 相关 API 6 | 7 | --- 8 | 9 | ## 新闻 10 | 11 | 1. [Xamarin 宣布开源](http://open.xamarin.com):Microsoft 收购了使用 Mono 进行跨平台开发的工具提供商 Xamarin 后,与本周将 Xamarin 各部件进行了开源,其中也包含 [iOS 和 Mac 的相关组件](https://github.com/xamarin/xamarin-macios)。Xamarin 在之前完全变为免费,而本次的开源也预示了微软继续对这个项目进行开发和支持的愿景。对于同时开发 iOS 和 Android 应用的开发者来说,使用 C# 在同一个项目中对逻辑和 Model 部分进行开发维护是一件很吸引人的方式,而以 Xaramin 为代表的统一逻辑层以及各自原生的 UI 层在现在看来是一种相对稳定的跨平台开发方式。 12 | 2. [Apple 向开发者宣传 Apple Music API](https://affiliate.itunes.apple.com/resources/documentation/apple-music-best-practices-for-app-developers/):Apple 在 [iOS 9.3](https://developer.apple.com/library/ios/releasenotes/General/WhatsNewIniOS/Articles/iOS9_3.html) 中新加了 `SKCloudServiceController` 在内的一系列访问和更新 Apple Music 的功能,但是因为是在小版本中进行的更新,对于开发者来说缺少学习和了解的机会。为了让更多开发者及时了解相关 API 的信息,Apple 本周制作了一个介绍 Apple Music 相关 API 使用方法的网页,并通过邮件的方式通知开发者。如果你需要在项目中涉及访问或者操作 Apple Music 的话,可以关注一下。 13 | 14 | ## 教程 15 | 16 | 1. [ReactiveCocoa vs RxSwift](https://www.raywenderlich.com/126522/reactivecocoa-vs-rxswift):自从 ReactiveCocoa 以来,响应式函数式编程一直被不少开发者使用和喜爱。相对于命令式的编程方式,响应式编程在处理用户响应和事件流上天生的优势在不少时候能够简化代码,提高可读性。而在 Swift 中,后起之秀 RxSwift 更是抢尽风头。这篇文章为我们对比了 ReactiveCocoa 和 RxSwift 各自的优势和适用场景,如果你正打算在项目中尝试响应式编程的方法,这篇文章可能可以为你的基础框架选择提供一定建议。 17 | 2. [去model化和数据对象](http://casatwy.com/OOP_nomodel.html):在我们构建项目时,一般都会有一个 Model 层来存储和表示数据。在应用的各组件或者各层中,我们是否应该直接传递这个 model 对象,是一个很重要的选择。因为对于 model 对象的传递,往往意味着向我们的代码中引入新的依赖,这在有些时候可能不是我们想要的结果。本文分析了在数据传递时的“去 Model 化”的一些想法以及对应的替代方式,如果又需要,可以在进行架构设计时进行参考。 18 | 3. [聊聊 Swift 3.0 - 新版本对我们的影响](http://swiftcafe.io/2016/05/01/swift3/):随着 WWDC 16 的临近,Swift 3.0 也将很快与我们见面。得益于 Swift 的开源和详细的发展进程表,我们可以提前预知 Swift 3 中稳定的 ABI (Application Binary Interface)、更加简洁的新 API 规范、更完善的跨平台支持等特性。新版本中的这些变化到底意味着什么,会对我们的开发产生什么影响,这篇文章从这些方面着手为我们进行了一些分析。 19 | 4. [Xcode Search: the Hidden Gems](http://holko.pl/2016/04/26/xcode-search/):Xcode 应该是大多数 iOS/Mac 开发者日常工作中最常用的 IDE 工具了。Xcode 其实为我们提供了十分强大的搜索功能,包括像是使用 Pattern 搜索、只搜索定义、自定义搜索范围等等特性。这篇文章为我们列举了那些不太常用但是绝对有效的提高我们搜索效率的方法,如果你经常困扰于使用 Xcode 的搜索却找不到想要的代码的话,这篇文章绝对值得一读。 20 | 21 | ## 开源项目 22 | 23 | 1. [SwiftOCR](https://github.com/garnele007/SwiftOCR):SwiftOCR 是一个用 Swift 写的 OCR 框架,相比于 C++ 写的有三十年历史的 [Tesseract](https://github.com/tesseract-ocr/tesseract),作者宣称在识别数字和字母的准确性和效率上,SwiftOCR 都具有压倒性的优势。如果你恰好有识别像是验证码或者礼品卡上的数字和字母这样的需求的话,不妨尝试下这个框架。同时如果你在学习图像识别或者是人工智能之类的课题的话,这个项目也会 是不错的学习资料。 24 | 2. [CoreStore](https://github.com/JohnEstropia/CoreStore):Core Data 是 Apple 官方的数据关系图框架。虽然通过 Core Data 来使用和操作数据库可以不向项目中引入额外依赖,但是 Core Data 强大的功能的背后是较为陡峭的学习曲线和对开发者相对较高的技能要求。很多时候我们往往会选择一些替代方案或者对 Core Data 的再次包装和简化。CoreStore 就是一个基于 Core Data 的 API 封装,它能让我们利用 Swift 的特性以一种更好的方式使用 Core Data。 25 | 3. [Palau](https://github.com/symentis/Palau):Swift 提供的类型安全对现有的 Cocoa API 的改进是很有潜力的,而 `NSUserDefaults` 就是一个很好的改进案例。Palau 用类型安全的方式对 `NSUserDefaults` 进行了封装,同时也扩展了 `NSUserDefaults` 所能支持的类型,让我们可以用更好的方式使用 `NSUserDefaults`。 26 | 4. [LeeGo](https://github.com/wangshengjia/LeeGo):LeeGo 是一个尝试使用声明式的,可配置的和易复用的 UI 组件进行用户界面开发的方式。相对于直接创建和书写 `UIView` 的子类,LeeGo 通过创建 `Brick` 来将用户界面分解成一个一个的小块,然后再将它们进行组合并展示为完整的用户界面。相比于传统的 `UIView`,LeeGo 的 UI 创建方式是声明式的,并且能够通过 JSON 进行远程的更新,是一种十分具有吸引力的 UI 构建方式。 27 | 28 | -------------------------------------------------------------------------------- /article/49.md: -------------------------------------------------------------------------------- 1 | # iOS 开发周报:Apple 加速应用商店审核过程,下个月起 iOS 第三方应用必须支持 IPv6 网络 2 | 3 | 标签:iOS Mac 移动 移动开发技术周报 4 | 5 | 摘要:Apple 加速应用商店审核过程,下个月起 iOS 第三方应用必须支持 IPv6 网络 6 | 7 | --- 8 | 9 | ## 新闻 10 | 11 | 1. [Apple 加速应用商店审核过程,平均时间由九天下降为两天](http://www.bloomberg.com/news/articles/2016-05-12/apple-shortens-app-review-times-in-push-to-boost-service-sales):审核周期过长一直是 App Store 生态中的一个严重问题,这使得第三方开发者难以快速迭代和更新版本。不过这也让开发者们对于 iOS app 的提交更加谨慎。最近,开发者发现 Apple 明显加快了应用审核的速度,之前对于一个应用的审核一般需要一周还多,而现在往往在提交第二天就能得到结果。这被认为是 Apple 希望开发者忠于平台,并且能以更快速度递交应用的重要举措。 12 | 2. [6 月 1 日起所有提交的 app 都需要支持 IPv6 网络](https://developer.apple.com/news/?id=05042016a):IPv4 地址告罄已是事实,Apple 又一次走在了推动新标准的前列。Apple 规定从下个月初开始,开发者所提交的应用必须能够支持只有 IPv6 的网络条件。如果你只是使用了 `NSURLSession` 这样的高层级 API 的话,应该不需要做什么额外的工作。但是要是你用了一些底层级网络相关 API,就可能要进行额外的修改才能完全支持 IPv6。Apple 在[这里](https://developer.apple.com/library/mac/documentation/NetworkingInternetWeb/Conceptual/NetworkingOverview/UnderstandingandPreparingfortheIPv6Transition/UnderstandingandPreparingfortheIPv6Transition.html#//apple_ref/doc/uid/TP40010220-CH213-SW1)给出了适配 IPv6 的指南,如果你有更改的需求,可以按照这份说明进行调整。 13 | 3. [Apple 向滴滴打车投资 10 亿美元](http://chinese.engadget.com/2016/05/12/apple-invested-diditaxi/):本周滴滴打车宣布了其新一轮融资的进展,其中 Apple 公司以 10 亿美元(约合人民币 65.21 亿)投资滴滴,是滴滴迄今为止获得的单笔最大投资。另外也有消息表明,Apple 可能在中国版的 iOS 10 中将滴滴打车作为系统预装软件推出,或是在 CarPlay 上进行整合。如果属实,这将是 Apple 在中国市场的一次重要布局。 14 | 15 | 16 | ## 教程 17 | 18 | 1. [用 ReactiveCocoa 事半功倍的写代码](http://fengjian0106.github.io/2016/04/17/The-Power-Of-Composition-In-FRP-Part-1/):函数式响应编程是一门学习曲线比较陡峭的技术,作者结合自己的学习过程和使用经验,为我们带来了一个完整的使用 ReactiveCocoa 实践函数式编程的系列教程。我们很难脱离代码和实际使用场景来将函数式响应编程的原理讲清楚,而在明白原理后,往往也会不知道如何使用这个强大的工具来处理开发中遇到的现实问题。作者在这个系列教程里通过一些 demo 向我们完整展示了可能的使用场景和对应方法,非常值得一看。 19 | 2. [Quartz2D 编程指南](http://xuyafei.cn/post/cocoatouch/quartz2d-bian-cheng-zhi-nan-gai-lan-tu-xing-shang-xia-wen-lu-jing-yan-se-yu-yan-se-kong-jian):Quartz2D 是一个支持 iOS 和 OS X 二维图形绘制引擎,通过 Quartz2D 或者 Core Graphics 框架,我们能够完成 app 开发中绝大部分图像绘制的任务。但是相对于其他更高层级的 API,这部分内容需要我们考虑的事情相对较多,也更为复杂。作者在这份编程指南中为我们描述了 app 开发中图形绘制的一些最常见任务的处理方法。 20 | 3. [Building Slack Bots In Swift](https://medium.com/@pvzig/building-slack-bots-in-swift-b99e243e444c#.8zzsw955h):Swift 现在已经是一门跨平台的语言,这极大拓展了 Swift 的使用场景,以及 Swift 开发者们能够做的事情。这篇文章讲述了作者自己使用 Swift 开发一个 Slack 聊天机器人的过程,其中用到了不少 Swift 服务器开发的基础技术,从中你可以一窥 Swift 服务器端开发的门径。 21 | 4. [CocoaPods 1.0](http://blog.cocoapods.org/CocoaPods-1.0/):CocoaPods 可以说是 iOS 开发者最常依赖的一款包管理工具,本周,在 CocoaPods 正式公布五年之后,这款工具终于迎来了 1.0 正式版。1.0 中包含了更准确和完善的 Podfile DSL 描述,自动反集成,通过将框架集成至实际项目来检查可用性等等一系列新特性。CocoaPods 的这篇官方博客为我们详细介绍了 1.0 版中的新功能以及我们所需要做出的改变。 22 | 23 | 24 | ## 开源项目 25 | 26 | 1. [Render](https://github.com/alexdrone/Render):React 在前端开发中的地位现在如日中天,先不论 React 是否真的是万灵丹,它将 UI 进行组件化的思想如此受欢迎,想必是有其值得借鉴之处的。Render 是一次将 React 的开发方式带到 iOS 应用开发中的尝试。与传统的 UI 构建方式相比,组件化的 UI 可以用来描述某个状态下的 UI 情况,这在一定程度上可以使 Controller 与 UI 分离,是一种值得探索的界面开发方式。 27 | 2. [Build Time Analyzer for Xcode](https://github.com/RobertGummesson/BuildTimeAnalyzer-for-Xcode):一款 Xcode 插件,可以用来统计项目中的文件的编译时间,帮助你找到编译花费时间最长的源文件和方法。对于大型项目来说,编译时间太长是导致开发效率降低的最主要和最直接的原因,如果我们能够压缩编译时间,那么工程师也就会更有动力进行多次部署和调试。你可以通过这款插件的统计,有目的地对源码进行优化,以提高开发效率。 28 | 3. [Interpolate](https://github.com/marmelroy/Interpolate):一个用来创建交互式手势动画的插值框架。Interpolate 把所有的动画都看作是属性值随着时间进行改变的插值,并以类型安全的方式来创建随时间变化的动画属性值。这个框架在制作交互式教程或者一些复杂的手势动画时会十分灵活有用。 29 | 30 | 31 | -------------------------------------------------------------------------------- /article/5.md: -------------------------------------------------------------------------------- 1 | # iOS 9 SDK 暗示新款 iPad - iOS移动开发周报 2 | 3 | 标签:移动 iOS 移动开发技术周报 WWDC Swift 4 | 5 | 摘要:iOS 9 SDK 透露 iPad Pro 信息,Apple Watch 开放在实体店的购买 6 | 7 | --- 8 | 9 | ## 新闻 10 | 11 | 1. [iOS 9 代码暗示 iPad Pro 的存在](http://www.macrumors.com/2015/06/15/ios-9-code-ipad-pro-2732x2048-display/):在 iOS 9 SDK 中有开发者发现了一个新的键盘尺寸,暗示屏幕的长宽分别为 1366 和 1024 pt,这和传言已久的大屏 iPad 是吻合的。12.9 寸的 iPad Pro 如果确实存在的话,可以推测其分辨率将为 2732x2048 像素。 12 | 13 | 2. [Apple Watch 实体店购买下周开放](http://www.apple.com/pr/library/2015/06/04Apple-Watch-Arrives-in-Seven-More-Countries-June-26.html):随着 watchOS 2 的公布,Apple Watch 能做的事情突然一下就丰富起来了。如果你想入手一块 Apple Watch,但是在之前又没有能在官网预定到的话,下周开始你就将能够直接在 Apple 14 | Store 实体商店直接够买了。 15 | 16 | ## 教程 17 | 18 | 1. [《“自释放”在iOS开发中的应用》](http://www.olinone.com/?p=232):作者总结了一些比较常见的内存管理上容易疏忽的地方,并分析了几个对应的开源库的解决方法。这篇文章可以加深你的对于内存管理的一些理解。 19 | 20 | 2. [《The Guard Statement in Swift 2》](http://www.codingexplorer.com/the-guard-statement-in-swift-2/):探索和分析了 `guard` 关键字在 Swift 2 中的一些细节和使用场景。`garud` 关键字的出现使得开发者在很大程度上可以避免之前的 nested if let,而采用更加科学的提前返回的方式书写程序。这篇文章里也有一些这个关键字的最合适的场景的用例,可供参考。 21 | 22 | 3. [《用函数式的 Swift 实现图片转字符画的功能》](http://blog.callmewhy.com/2015/06/07/creating-ascii-art-in-functional-swift/):Swift 的一大特点就是适合函数式编程,但是对于绝大多数 iOS 开发者来说,函数式编程这个概念可能还比较陌生。这篇文章通过解读 swift-ascii-art 这一很有趣的开源项目代码来探索了一下项目中对于函数式编程的使用。如果有机会在 app 中用一些函数式编程的思想的话,会使代码更加简洁易懂。 23 | 24 | 4. [《WWDC15 Session笔记 - iOS 9 多任务分屏要点》](http://onevcat.com/2015/06/multitasking/):通过之前几年的布局,在 AutoLayout 和 Size Class 的基础上,iOS 9 中加入了多任务特性,这也是 iOS 9 中最引人注目的内容。这篇文章简述了 iOS 9 中多任务的模式和实现方式,作者也总结了在开发适配多任务模式时需要注意的一些小细节。 25 | 26 | ## 开源项目 27 | 28 | 1. [SyntaxKit](https://github.com/soffes/SyntaxKit):一个在 iOS 或者 OSX app 中高亮代码的解决方案,可以让你使用 TextMate 的主题文件来解析一段代码,并返回需要高亮的部分。如果你需要制作一个代码文本编辑器之类的 app 的话,使用这个库可以帮助你轻松完成代码高亮这一核心功能。 29 | 30 | 2. [watchOS-2-Sampler](https://github.com/shu223/watchOS-2-Sampler):像以往几届 WWDC 一样,我的前同事 @shu233 第一时间整理了新 SDK 中有意思的 API 的使用方法例程。这次他带给我们的是 watchOS 2 中新功能的全套例子,包括加速计,心率,录音和播放以及动画等诸多新内容。 31 | 32 | 3. [GRMustache.swift](https://github.com/groue/GRMustache.swift):Mustache 是一个很强大的 template 引擎,可以通过解析 json 来绑定并渲染占位符。如果你做过一些前端开发的话,会知道这是一种很常用的 HTML 绑定 Model 的做法,GRMustache.swift 是这个框架的 Swift 实现。 33 | 34 | 4. [TOCropViewController](https://github.com/TimOliver/TOCropViewController):一个模仿 iOS 系统自带的图片编辑界面,可以让你轻松实现图片裁剪的 View Controller。对需要基本的图片编辑功能的 app 来说,这是一个开袋即食的简单解决方案。 35 | 36 | 5. [MSTwitterSplashScreen](https://github.com/mateuszszklarek/MSTwitterSplashScreen):一个模仿 Twitter 加载页面动画的框架,可以实现图标缩放作为遮罩来显示第一个 ViewController 内容,让你的 app 启动显得更加平滑。 37 | 38 | 6. [DZNEmptyDataSet](https://github.com/dzenbot/DZNEmptyDataSet):Table View 和 Collection View 可以说是 app 开发中最常用的组件了,在没有具体内容和条目需要显示的时候往往我们需要一个友善的引导和说明页面来填补空白。这个框架让我们能简单地为 `UITableView`,`UICollectionView` 或者是 `UISearchDisplayController` 以及 `UIScrollView` 制作空白内容页面,而不需要头疼视图的各种状态和布局问题。 -------------------------------------------------------------------------------- /article/50.md: -------------------------------------------------------------------------------- 1 | # iOS 开发周报:Swift ABI 稳定时间将被推迟,新版本 iPhone 可能包括双镜头相机 2 | 3 | 标签:iOS Mac 移动 移动开发技术周报 4 | 5 | 摘要:Swift ABI 稳定时间将被推迟,新版本 iPhone 可能包括双镜头相机 6 | 7 | --- 8 | 9 | ## 新闻 10 | 11 | 1. [Swift ABI 的稳定时间将被推迟](http://ericasadun.com/2016/05/16/winding-down-swift-3-0-abi-stability-deferred/):在之前 Swift 3.0 的路线图中,新版本的 Swift 预计可以达到 ABI (应用二进制接口) 稳定,这将意味着旧版本的 Swift 二进制程序将可以运行在新的环境中。但是,最近 Swift 项目的创始人和负责人 Chris Lattner 在[邮件](http://thread.gmane.org/gmane.comp.lang.swift.evolution/17276)中暗示可能这个目标在 Swift 3.0 中将无法达成。通用的 ABI 和其稳定性将被移到之后的版本中实现。 12 | 2. [下一代大屏 iPhone 可能配备双镜头](http://www.macrumors.com/2016/05/20/apple-sony-lg-dual-cameras-iphone-7-plus/):随着夏天的到来,上一代的 iPhone 也进入了销售的中期。和以往一样,关于今年 iPhone 的种种传言和猜测也逐渐开始流行。据称 Apple 将可能在下一代的 5.5 寸 iPhone 上 (可能被称为 iPhone 7 Plus 或者 iPhone Pro) 安装两个背面镜头。其中一个镜头维持当前的相机功能,另一个镜头专门负责处理缩放的画面,这样同一时间用户将能记录两个版本的画面,或者进行画面的相互补偿。之前,华为 P9 系列的手机曾经进行过类似的尝试。新的摄像头可能也会给第三方开发者们带来很多新的创意。 13 | 14 | ## 教程 15 | 16 | 1. [What I’m Doing With These Articles](http://inessential.com/2016/05/18/what_im_doing_with_these_articles):文章的作者 Simmons 是 Omni 公司的自身 Objective-C 开发者,对 Swift 也非常有研究。Simmons 在他之前一系列博客文章中讨论了 Swift 和 Objective-C 在动态特性上的差异,以及不少只有 Objective-C 能解决的问题,这一系列讨论在国外 iOS 开发者社区引起了不小的反响。Simmons 在这篇文章中总结了自己的观点,他认为 Swift 只是未来的一部分,而很多开发者因为没有意识到他们其实是在一系列 Objective-C 动态特性所支撑的平台和框架上进行开发,所以看待问题相对有些局限。如果你打算或者已经从 Objective-C 转到 Swift,阅读 Simmons 的一系列文章会对深刻理解这个问题有所帮助。 17 | 2. [Command Line Programs on OS X Tutorial](https://www.raywenderlich.com/128039/command-line-programs-os-x-tutorial):一般很多命令行程序都会使用像是 C,Perl 或者 Ruby 这样的语言来编写,以保证能够在各个平台运行。在 Objective-C 时代,因为 Foundation 库和其他的一些限制,很少有人使用这门语言来编写命令行工具。但是 Swift 开源并跨平台后,Foundation 也将使用 Swift 进行包装并可以运行在像是 Linux 这样的平台下,这给了使用 Swift 开发命令行程序的可能性。本文将带领你使用 Swift 创建一个命令行程序,来完成像是解析输入等基本的操作。 18 | 3. [Swift API 设计指南](http://swift.gg/2016/05/18/api-design-guidelines/):Swift 3.0 引入了非常多的改动,包括函数签名的重新设计等,这带来的另一个副作用是 API 的设计也需要进行更新。如果你已经对迁移到 Swift 3.0 跃跃欲试,那么可以持续关注这篇文章和 Apple 在官方网站上的原文,来紧跟 Swift 在今年的变化。 19 | 20 | ## 开源项目 21 | 22 | 1. [SwiftTheme](https://github.com/jiecao-fm/SwiftTheme):app 中经常会有需要切换主题的需求,而统一管理这些主题的配置和切换其实并不是想象中那么简单的事情。SwiftTheme 是一个专门负责处理这方面需求的框架,你可以通过预先定义像是配色以及图片这样的资源,就可以方便地在各个主题之间进行切换了,十分方便。 23 | 2. [Networking](https://github.com/3lvis/Networking):一个简单的对 `NSURLSession` 的封装的网络框架,使用这个框架可以非常方便地完成绝大多数一般 app 中的网络部分的请求,它可以让我们用更安全的方式对网络请求进行设置,而不用再去手动处理像是 content type 或者 token 这些细节。另外,这个框架还提供了 stub 和 mock 的能力,让快速搭建原型的同时,可以避免今后对代码的再次更改。 24 | 3. [BATabBarController](https://github.com/antiguab/BATabBarController):系统原生的 `TabBarView` 有着非常多的限制,为 tab bar 自定义外观一直是一件很难的事情,更别说自定义一些漂亮的交互和动画效果。而这个框架通过完全自定义重写一个 tab view controller,从而灵活地实现了一个非常炫酷的 tab bar view 动画效果。如果有类似需求的时候,不妨参考一下这个框架的组织方式。 25 | 4. [PMAlertController](https://github.com/Codeido/PMAlertController):`UIAlertView` 或者 `UIAlertController` 的外观自定义也十分困难,不过因为本身它们就是作为简单的用户提示控件而存在的。在我们制作 app 时,在弹框这样重要的与用户进行交互的方式中,还是会尽可能希望与自己的 app 风格一致。PMAlertController 就是一个帮助你用更加方便灵活,可自定义的弹窗控件来替换掉 Apple 原来的部件的框架,你可以方便地为 alert 添加图片,安排按钮,实现动画等。 26 | 27 | 28 | -------------------------------------------------------------------------------- /article/51.md: -------------------------------------------------------------------------------- 1 | # iOS 开发周报:Apple Pay 计划在全球加速扩张,Intel 将为 Apple 的 iPhone 7 设备提供下一代更快的 LTE 芯片 2 | 3 | 标签:iOS Mac 移动 移动开发技术周报 4 | 5 | 摘要:Apple Pay 计划在全球加速扩张,Intel 将为 Apple 的 iPhone 7 设备提供下一代更快的 LTE 芯片 6 | 7 | --- 8 | 9 | ## 新闻 10 | 11 | 1. [Apple Pay 计划在全球加速扩张](http://techcrunch.com/2016/05/26/apple-is-working-rapidly-to-launch-apple-pay-in-more-countries-in-asia-and-europe/?ncid=rss):随着 Apple Pay 在美、英、加/中等主要国家展开后,这项服务最近在全球范围内继续扩张。最近,新加坡的用户也可以开始使用 Apple Pay,另外,像是印度,西班牙等国也在计划和筹备之中。统合各国的支付渠道,与相对僵化的银行体系打交道,并且推动支付的发展其实并不是一件简单的事情。而不要忘记,如果你的 app 正在售卖实物的话,及时添加 Apple Pay 的支持也许可以带来额外的用户。 12 | 2. [Intel 将为 Apple 的 iPhone 7 设备提供 50% 的 LTE 芯片](http://www.macrumors.com/2016/05/17/intel-to-supply-up-to-half-lte-chips-iphone-7/):在过去三年里,高通一直是 Apple iPhone 设备通讯芯片的独家供货商,但是这一状况可能在今年的 iPhone 7 上有所改变。Apple 可能会更多地转向 Intel,而后者可能会为 iPhone7 提供 50% 左右的更快的适配 LTE Advance 的通讯芯片。移动设备的通讯速度在很大程度上决定了 app 的使用场景。在更快速度的平台上,可能之前一些无法实现的服务都将变为可能。 13 | 14 | ## 教程 15 | 16 | 1. [Clang Attributes 黑魔法小记](http://blog.sunnyxx.com/2016/05/14/clang-attributes/):Clang Attributes 是 Clang 提供的一种源码注解,方便开发者向编译器表达某种要求,参与控制如 Static Analyzer、Name Mangling、Code Generation 等过程,一般以 `__attribute__(xxx)` 的形式出现在代码中。这篇文章为我们介绍了几个很有意思的“黑魔法” attribute,有时候灵活并正确地使用它们会给你带来不少便利。 17 | 2. [从ReactiveCocoa中能学到什么?不用此库也能学以致用](http://www.jianshu.com/p/39e27fef38fa):类似 ReactiveCocoa 或者 RxSwift 这样的响应函数式编程在 iOS 开发中已经有些时日了,但是可以说一直没有大规模流行起来。究其原因,它需要使用者对程序设计有相对较高的理解和完善的技能,学习曲线也稍微陡峭一些。但这并不妨碍我们了解这种编程思想,并取其精华将它部分使用在最合适的场景。这篇文章就从这个角度为我们剖析了 ReactiveCocoa,并通过例子说明了如何使用响应式的理念改善现有的程序设计。 18 | 3. [Animating text layers using CoreAnimation and CoreText frameworks in iOS SDK](http://vormlab.com/animating-text-layers-using-coreanimation-coretext-frameworks-ios-sdk/):一篇关于使用 CoreAnimation 和 CoreText 来实现文字渲染动画的文章。iOS 平台的 app 如果能够精于交互,力求用完美的表现将自己呈现给用户的话,相信也能够得到用户的好评和喜爱。而提升用户体验的最立竿见影的方式就是使用合适的动画效果。本文为我们讲述了一种使用动画来呈现文字的方式,你可以举一反三,来实现很多类似的漂亮的展示效果。 19 | 20 | ## 开源项目 21 | 22 | 1. [Expanding Collection](https://github.com/Ramotion/expanding-collection):一个使用 Collection View 实现的卡片的展开和收起的动画效果。作者提供的不仅仅是一个特定例子的实现,也包括了如何复用这个已经高度定制过的动画效果的方法。通过巧妙使用 Collection View,你可以相对容易地将这样的动画集成到你自己的 app 中去。 23 | 2. [FastStub-Xcode](https://github.com/music4kid/FastStub-Xcode):一个 Xcode 插件,可以用来根据头文件或者协议的声明,自动在实现文件中将缺失的方式进行补全。在像 AppCode 这样的 IDE 中可能这个功能是自带的,但是 Xcode 现在暂时并没有提供相应的功能,这个插件能够让你的生活变得轻松一些。 24 | 3. [fantastic-ios-animation](https://github.com/onmyway133/fantastic-ios-animation):一个 awesome 式的收集类的仓库。维护者使用分类的方式将很多开源的 iOS 动画的实现进行了整理。如果你在制作属于自己的 app 时,又苦于没有美术的动画设计和用户交互设计为你提供界面元素和交互方式的话,参考这里的例子来获取灵感也许会是不错的选择。 25 | 4. [PrediKit](https://github.com/KrakenDev/PrediKit):`NSPredicate` 是 iOS 开发者常用的一个类。不论是和 Core Data 打交道,或者是对集合进行过滤,可能都会使用到 `NSPredicate`。但是 `NSPredicate` 使用了大量的字符串和键值编程,其本身的语法是很不安全的。这个框架对 `NSPredicate` 进行了一些封装,使开发者能够通过使用闭包和相对安全易读的语句来使用谓词。如果你在项目中使用了很多 `NSPredicate` 的话,这个框架将能显著提高你的代码质量,并让它们更加容易理解。 26 | 27 | -------------------------------------------------------------------------------- /article/52.md: -------------------------------------------------------------------------------- 1 | # iOS 开发周报:Apple 推出 WWDC 16 应用,兼容 tvOS;iPhone 7 可能取消 16GB 版本 2 | 3 | 标签:iOS Mac 移动 移动开发技术周报 4 | 5 | 摘要:Apple 推出 WWDC 16 应用,兼容 tvOS;iPhone 7 可能取消 16G 版本 6 | 7 | --- 8 | 9 | ## 新闻 10 | 11 | 1. [WWDC 16 临近,Apple 推出新的 WWDC 应用](http://www.macrumors.com/2016/06/03/apple-updates-wwdc-app-for-2016/):WWDC 16 将于一周后召开,最近 Apple 升级了 WWDC 的应用。新版本中采用了开发者们普遍喜爱的暗色主题,你也可以使用这个应用下载和观看之前几年的 WWDC 视频。除此之外,新版本还支持新一代的 Apple TV,也针对 iPad 进行了多任务的适配。 12 | 2. [iPhone 7 可能取消 16GB 版本](http://www.macrumors.com/2016/06/01/iphone-7-storage-32gb-64gb-256gb/):在 iPhone 产品线中,同系列的区别就只有磁盘空间不同。现在最低配置的 iPhone 是 16GB 起,但是很多用户发现随着现在系统和各种应用占用空间的增大,以及移动设备越来越成为个人的中心,需要存储大量音乐和照片等资源,16GB 的“入门版本”在使用时往往拙荆见肘。在 iPhone 7 中,Apple 可能会除去 16GB 的版本,而从 32GB 开始发售。 13 | 3. [Swift 3.0 Preview 1 短暂发布后被撤回](https://swift.org/download/#releases):WWDC 16 上应该会公布 Swift 3.0 的相关消息。本周,Apple 曾经发布了第一个 Swift 3.0 的预览版本,其中这一年来的大部分被接受的提案都已经被实现了。但是随后这个版本就被替换回了 2.2 的开发分支的快照版本。可能最终 Swift 3.0 预览版还是要等到 WWDC 召开才会和 Xcode 8 beta 一同发布,如果你有计划将应用或者框架尽快升级适配 Swift 3.0 的话,最好尽早开始准备和关注。 14 | 15 | ## 教程 16 | 17 | 1. [使用 CocoaPods 模块化iOS应用](http://www.jianshu.com/p/a8db4fa6d155):很多开发者会使用 CocoaPods 来作为第三方框架的依赖管理工具,但是 CocoaPods 的用途绝不仅限于此。我们可以在开发中将复杂的程序的各个模块进行拆分,以降低开发难度和代码耦合,然后使用 CocoaPods 把这些模块聚合在一起,来构建更完整和强大的应用程序。这篇文章就针对 CocoaPods 的该使用场景进行了介绍。 18 | 2. [iOS 启动连续闪退保护方案](http://wereadteam.github.io/2016/05/23/GYBootingProtection/):iOS 应用有时可能遇到启动必 crash 的绝境:也就是每次打开应用都闪退,无法正常使用。这可以说是最差的用户体验,也必然意味着很多一星评论。尽量避免这种情况的发生,或者当发生启动时崩溃的时候,采取一些补救措施,可能可以挽救你的应用的口碑。本文介绍了一种对连续闪退问题的产生原因进行检测和修复机制方式,通过引入 GYBootingProtection,可以让你的应用具备一些自修复的功能。 19 | 3. [Avoiding the overuse of @objc in Swift](http://www.jessesquires.com/avoiding-objc-in-swift/):作者在迁移到 Swift 2.2 的过程中发现了新加入的 `#selector` 语法和原来的 `Selector("method:")` 的不同。对于纯 Swift 的内容,如果不添加 `@objc` 的话将失去一些与 Objective-C 运行时相关的特性。但是 `@objc` 关键字又很容易扩散到项目的其他地方,作者通过组合两个协议来巧妙地实现了原来的意图。 20 | 21 | ## 开源项目 22 | 23 | 1. [ScrollableGraphView](https://github.com/philackm/Scrollable-GraphView):一个非常漂亮的带有动画的图表框架。你可以用它来制作无限滚动的条形图或者曲线图。该框架也提供了很多可自定义的要素,使用起来非常容易。这个框架很适合用来进行简单的数据展示,原型设计等。 24 | 2. [Stellar](https://github.com/AugustRush/Stellar):Stellar 是一个 Swift 的物理动画框架,它基于 Apple 的 UIDynamic,并对其进行了一些高层次的封装,是我们能以很简单的 API 来制作常见的动画效果。这个框架使用了类似 Promise 的层联方法来组织动画,并且全面适配和利用了 Swift 的语法特点。同时,框架还为我们提供了一些 Playground 的例子,让我们能够很直观和迅速地调试动画,非常方便。 25 | 3. [Atlas](https://github.com/layerhq/Atlas-iOS):如果你需要在应用中制作一个和系统的信息应用类似的交流工具的聊天界面的话,Atlas 可能会是最快的选择了。你可以通过简单地实现 Atlas 的 data source 来迅速搭建一个聊天界面,也可以使用内建的众多组件来实现像是联系人查找,消息排序等功能。如果有需要,你也可以对界面元素进行自定义,以满足业务需求。 26 | 4. [folding-cell](https://github.com/Ramotion/folding-cell):一个非常炫的 table view cell 展开的动画效果,它模拟了折叠的纸片翻开的动画,让人眼前一亮。动画效果的复用本身是一件比较复杂和困难的事情,这个动画效果的开发者做了不少努力,让这个动画效果尽可能地更容易被复用。它的实现方式非常值得参考,也许能对你自己制作应用时创建和复用复杂动画带来一些启示。 27 | 28 | 29 | -------------------------------------------------------------------------------- /article/53.md: -------------------------------------------------------------------------------- 1 | # iOS 开发周报:App Store 可能新加入订阅制收费方式,Google 推出 TensorFlow iOS 版本 2 | 3 | 标签:iOS Mac 移动 移动开发技术周报 4 | 5 | 摘要:App Store 可能新加入订阅制收费方式,Google 推出 TensorFlow iOS 版本 6 | 7 | --- 8 | 9 | ## 新闻 10 | 11 | 1. [App Store 2.0,Apple 可能修改 app 付费模式和分成方式](http://www.theverge.com/2016/6/8/11880730/apple-app-store-subscription-update-phil-schiller-interview):国外科技媒体 The Verge 最近透露,在对 Apple App Store 负责人 Phil Schiller 的一次采访中,后者表示最近可能会对 App Store 的现行机制进行大幅改革。除了之前已经得到确认的为搜索结果加入一个付费推广 app 的展示外,新的 App Store 可能会推出新的订阅制付费模式。与现在的只有持续提供内容的杂志和服务等才能使用订阅付费模式不同,普通的 app 也将可以使用订阅模式,持续地向用户收取费用并提供更新。另外,Phil 还表示可能会考虑降低 Apple 对于订阅模式第二年开始的付费分成,将传统的 30% 的收费分成降低到 15%。 12 | 2. [WWDC 于本周在旧金山召开](https://developer.apple.com/wwdc/):一年一度的 Apple 全球开发者会议在本周于旧金山召开。在会议 Keynote 上,Apple 将宣布新的 iOS 系统和 macOS 系统。作为一个开发者会议,近年来由于 Apple 在移动平台的成功和科技界地位的提升,也受到了很多非开发者的关注和追捧。不过,对于开发者来说,更重要的应该还是把握生态发展的方向,以及学习最新的技术。 13 | 3. [Google 发布 TensorFlow iOS 版本](https://github.com/tensorflow/tensorflow/releases/tag/v0.9.0rc0):如果你对前不久 Google AlphaGo 五番棋大败李世石的事件有过关注的话,可能会知道背后支持 AlphaGo 的人工智能和机器学习的软件就是 TensorFlow。TensorFlow 在去年 11 月就已经开源,科学计算和人工智能的相关从业及研究人员已经可以使用它来完成工作。而本周 Google 发布了一个 TensorFlow 的新版本,其中包含了对 iOS 系统的支持以及一个在 iOS 上进行机器学习的例子。这意味着开发者有可能很容易地在 iOS 应用中加入一些轻量级的机器学习内容,来让 app 更加智能和符合用户习惯。当然,这只是最初步的使用场景,也许开发者们还能挖掘出移动 app 和人工智能更好的结合点,并以此掀起一场 app 的革命。 14 | 15 | ## 教程 16 | 17 | 1. [Swift 化的视图控制器展示](https://realm.io/cn/news/slug-jesse-squires-swifty-view-controller-presenters/):一篇来自 Realm 的翻译文章,View Controller 在 iOS 开发中的职责非常重要,而 app 制作开发时最常见的错误莫过于赋予 View Controller 太多的功能,而使其臃肿不堪,无法维护了。这篇文章为我们介绍了使用 Swift 化的 API 来重新审视和定义视图控制器的常见操作,并以此为基础,对视图控制器的实现方式进行了简化。 18 | 2. [Mac 应用开发基础教程](http://www.macdev.io):随着 iOS 的成功,Mac 设备在国内的占有率也在逐渐上升。因为使用的语言和思维方式类似,所以不少 iOS 开发者也对 Mac 开发产生了兴趣。但是和 UIKit 不同,Mac 开发的 AppKit 相对历史包袱要多一些,使用起来也和 iOS 开发有不少区别。这本书对 Mac 开发的组件使用和开发方式进行了一些说明,让读者可以理解 Mac 平台开发的基础知识。如果你对 Mac 开发有兴趣的话,用来入门会是不错的选择。 19 | 3. [Creating and Distributing iOS Frameworks](https://www.raywenderlich.com/126365/ios-frameworks-tutorial):如果在你的两个 app 中有共享的代码部分,那么将它们提取出来创建一个框架进行代码共享和维护一般都是很好的主意。本文介绍了对代码进行封装,并在不同平台进行重用的方法。最后,文章也涉及了如何发布在 CocoaPods 等方面的内容。如果你有计划发布和维护开源框架的话,本文会是很好的入门指导。 20 | 21 | ## 开源项目 22 | 23 | 1. [hopper-swift-demangle](https://github.com/keith/hopper-swift-demangle):[Hopper](http://www.hopperapp.com) 是 OS X 下的一个二进制反编译工具,我们可以用它来对编译后的二进制文件进行反编译来探索实际的行为。但是对于 Swift,由于存在 mangling,所以我们得到的反编译结果阅读起来会十分困难。这个插件将 Swift 的编译符号进行了还原,能让我们更容易地研究 Swift 二进制的反编译结果。 24 | 2. [PinpointKit](https://github.com/Lickability/PinpointKit):这个框架可以让用户或者测试者通过简单的手势来向你发送带有标注的截图反馈或者是输出日志。你既可以将它用作实际产品上线后的用户反馈渠道,也可以作为内部测试时加速交流的工具。 25 | 3. [Flow](https://github.com/JohnSundell/Flow):虽然基于过程的编程方式在很多时候并不是一个维护大型项目的可行方式,但是在一些像是游戏脚本或者任务脚本开发中,将各个操作进行组合还是很常见的。Flow 框架为“基于操作的编程”提供了一套简单的 API 调用方法,能让我们很容易地将各个操作级联和组织起来,而不论它是同步操作还是异步操作。 26 | 27 | -------------------------------------------------------------------------------- /article/54.md: -------------------------------------------------------------------------------- 1 | # iOS 开发周报:WWDC 16 会议结束,四大平台新系统推出;Apple 解释暂不开发 Android 版 iMessage 的原因 2 | 3 | 标签:iOS Mac 移动 移动开发技术周报 4 | 5 | 摘要:WWDC 16 会议结束,四大平台新系统推出;Apple 解释暂不开发 Android 版 iMessage 的原因 6 | 7 | --- 8 | 9 | ## 新闻 10 | 11 | 1. [WWDC 16 会议结束,四大平台新系统推出,Apple 生态继续完善](https://developer.apple.com/wwdc/):WWDC 16 已经于上周结束,在 Keynote 上,Apple 发布了 iOS,macOS,watchOS 和 tvOS 四个系统的新版本。在新版本的 iOS SDK 中,新加入了 SiriKit 和一系列 extension 相关的 API。另外,开发者工具,现存的 API 的改进和 Swift 语言的新版本的特性也在开发者大会中有所提及。和以往一样,Apple 也在第一时间提供了会议所有 session 的视频,如果您想要了解更多关于 WWDC 16 的内容,可以前往[视频](https://developer.apple.com/videos/wwdc2016/)页面进行查看。 12 | 2. [Apple 表示暂时没有开发 Android 版 iMessage 应用的计划](http://www.theverge.com/2016/6/15/11940010/walt-mossberg-apple-wwdc-2016-recap-themes):在 WWDC 上,新版本 iOS 的一大亮眼功能就是信息应用的全面加强。现在用户可以在信息应用中输入贴纸,使用全屏效特效等,而第三方开发者也能够通过扩展的方式来创建 iMessage app,来强化和提供官方应用所不具备的功能。而对于一款 IM 应用来说,Android 系统的市场份额是不可忽视的。Apple 表示考虑到用户隐私和机器学习等因素,暂时不可能在 Android 平台推出信息应用。也就是说,官方的信息应用可能在今后一段时间内都还是会处于尴尬和边缘的状态。 13 | 3. [ATS 限制将被加强,明年起将不允许未采用 HTTPS 协议的应用随意上架](http://www.ithome.com.tw/news/106574):App Transport Security (ATS) 是 Apple 在 WWDC 15 时提出的网络安全相关的规定,它限定应用只能通过 HTTPS 的方式访问网络资源,提高了安全性。在本周 WWDC 的网络安全相关 session 中,Apple 表示将收紧限制,从明年起,开发者将不能再随意通过设置来绕开 HTTPS 的限制了。如果你的应用需要访问 HTTP 的未加密网络,需要在审核时提出合理的理由。关于这方面的详细内容,可以参看[这篇文章](https://onevcat.com/2016/06/ios-10-ats/)中的描述。 14 | 15 | ## 教程 16 | 17 | 1. [开发者所需要知道的 iOS 10 SDK 新特性](https://onevcat.com/2016/06/ios-10-sdk/):一篇对于 iOS 10 中开发者所需要知道的新特性的概述类文章,对 iOS 的发展方向进行了简单的展望。对于不同的开发者来说,WWDC 16 中他们所感兴趣的点可能会有所不同,这篇文章中总结了可能是所有 iOS 开发者在新的 SDK 中都普遍感兴趣的一些方面,如果你没有时间完整地研究所有 session,可以参考这个总结来寻找你的兴趣点。 18 | 2. [UITableview Tip](https://github.com/vedon/iOS-tech/blob/master/UITableViewOpt/UITableView_Opt.md):`UITableView` 是每个 iOS 开发者都会用到的,也可能是最常用到的组件之一。这篇文章先探索了 `UITableView` 背后的一些工作方式的细节,并在此基础上展开,为我们介绍了一些优化 `UITableView` 时的技巧。通过合理的配置和巧妙的优化,用户界面可以达到非常高效的状态。另外,今年 WWDC 也专门针对 `UITableView` 和 `UICollection` 的优化问题有个 [session](https://developer.apple.com/videos/play/wwdc2016/219/),想继续深入的读者不妨看看视频,一探究竟。 19 | 3. [Call Directory Extension 初探](http://colin1994.github.io/2016/06/17/Call-Directory-Extension-Study/):CallKit 是 iOS 10 引入的新框架,它可以用来实现提供 VoIP 的无缝拨打和现实,以及来电显示和拦截等功能。本文带领读者简单探索了使用 CallKit 来创建来电拦截的部分 API,整个使用相对来说比较简单,所以相关 API 也没有很大难度。 20 | 4. [GUI Architectures](http://martinfowler.com/eaaDev/uiArchs.html):iOS 应用开发中,用户界面的开发以及他它与应用其他部分如何连接和交互一直是最重要的课题之一。这篇文章不仅仅针对 iOS,它针对所有的 GUI 开发,阐述了各种不同架构方法,包括 MVC、MVVM、VIPER 等等,它们背后共通的思想和原理。在了解常见的 GUI 设计模式之后,再阅读本文会有一种醍醐灌顶,拨云见日的感觉,强烈推荐中高级开发者进行阅读。 21 | 22 | 23 | ## 开源项目 24 | 25 | 1. [AssistantKit](https://github.com/anatoliyv/AssistantKit):有时候我们需要判别用户使用的设备种类、系统版本或者屏幕尺寸等信息。我们可以使用 SDK 中相关的方法来进行获取,但是系统 SDK 提供的方法存在很难使用,而且不太安全等问题。AssistantKit 是一个这方面的一站式解决方案,你可以用更加符合先进开发的方式来获取这些信息。 26 | 2. [AppDevKit](https://github.com/yahoo/AppDevKit):Yahoo 开源了一系列 Objective-C 的辅助工具集合,其中包括了很多常见的 extension,提供了对于 Cache,AutoLayout 以及其他 100 多个方面的简便方法和现有类的加强。 27 | 3. [Cleanse](https://github.com/square/Cleanse):Square 开源的一个用 Swift 进行依赖注入的框架。如果你熟悉 Android 和 Java 的话,一定不会对 Square 的几个 Java 框架陌生,比如 okhttp,picasso 和 Dagger。而这次 Square 为我们带来的 Cleanse 就是参考了 Dagger 在 Swift 中实现的依赖注入框架。通过依赖注入的手段,我们可以很容易并且安全地改变既存代码的行为。这不仅在大型应用开发中为我们带来更多灵活性,也对为较复杂的代码编写测试提供了便利条件。 28 | 29 | -------------------------------------------------------------------------------- /article/55.md: -------------------------------------------------------------------------------- 1 | # iOS 开发周报:Apple 确认 iOS 10 Beta Kernel 未加密并非疏漏,iOS 10 中 UIViewPropertyAnimator 的使用示例 2 | 3 | 标签:iOS Mac 移动 移动开发技术周报 4 | 5 | 摘要:Apple 确认 iOS 10 Beta Kernel 未加密并非疏漏,iOS 10 中 UIViewPropertyAnimator 的使用示例 6 | 7 | --- 8 | 9 | ## 新闻 10 | 11 | 1. [Apple 确认 iOS 10 Beta Kernel 未加密并非疏漏](http://www.macrumors.com/2016/06/22/apple-unencrypted-kernel-ios-10-intentional/):本周,有开发者[发现](https://www.technologyreview.com/s/601748/apple-opens-up-iphone-code-in-what-could-be-savvy-strategy-or-security-screwup/) Apple 提供的 iOS 10 Beta 版本的 Kernel 部分没有进行加密,这和以往 iOS 系统的情况并不相同。未加密的 Kernel 将会使开发者和研究人员更容易明白 iPhone 的软件和硬件到底是如何进行交互的,也将导致漏洞更容易被发现。本周 Apple 确认 iOS 10 Beta 中未加密的 Kernel 是有意为之,这样 Apple 将可以借助研究者的力量提供更安全的系统。 12 | 2. [Thunderbolt 显示器产品线将不再继续](https://techcrunch.com/2016/06/23/start-your-speculation-engines-apple-is-discontinuing-its-thunderbolt-display/):Thunderbolt Display 是 Apple 的大屏显示器产品,不过该产品线最后一次更新已经是 2011 年的事情了。在当今 iMac 一体机的显示器已经适配 4K 和 5K 分辨率的当下,可以说这款显示器已经无人问津。Apple 也不打算再继续更新这条产品线,本周 Apple 正式宣布了不再继续出品新的显示器产品。 13 | 14 | ## 教程 15 | 16 | 1. [为什么objc_msgSend必须用汇编实现](http://tutuge.me/2016/06/19/translation-why-objcmsgsend-must-be-written-in-assembly/):我们知道,在 Objective-C 中对于方法的调用最终会被转换为 `objc_msgSend` 的函数调用,而 `objc_msgSend` 是使用汇编实现的。不过,使用汇编的目的不仅仅是为了更好的性能,这篇文章为我们介绍了 `objc_msgSend` 实现的一些细节和它背后的考虑。 17 | 2. [UICollectionView: Unjustly Maligned](https://ashfurrow.com/blog/uicollectionview-unjustly-maligned/):`UICollectionView` 是从 iOS 6 开始引入的用 Grid 来显示数据的一种 view。除了 Apple 提供的默认的 `UICollectionViewFlowLayout` 以外,开发者也可是实现自己的 layout 来进行各种各样的视图布局。`UICollectionView` 可能一直以来都被开发者和设计师忽视,很多时候我们会简单地使用 Table View 来展示数据。然而,为了灵活性和可扩展的考虑,无论何时你都应该优先考虑 `UICollectionView`。本文为我们展示了 `UICollectionView` 的强大之处,以及可以通过自定义 layout 所实现的一些漂亮的效果。 18 | 3. [What’s New in Swift 3?](https://www.raywenderlich.com/135655/whats-new-swift-3):因为 Swift 3 是开源开发的,所以新版本中的变化大家都已经基本知道了。不过这篇文章还是对 Swift 3 的变化进行了很好的总结,如果你有项目需要从 Swift 2 迁移到 Swift 3 的话,读一读本文将会很有帮助。 19 | 20 | ## 开源项目 21 | 22 | 1. [Save the Dot](https://github.com/JakeLin/SaveTheDot):在 iOS 10 中 Apple 引入了 `UIViewPropertyAnimator`,它可以用来控制交互式的 `UIView` 属性动画。这个项目通过 `UIViewPropertyAnimator` 实现了一个通过 UIView 动画构成的小游戏。 23 | 2. [Potatso-iOS](https://github.com/icodesign/Potatso-iOS):通过 iOS 9 Network Extension 构建的网络代理应用,可以监视和调试通过设备的网络请求。作为一个完整的 app,项目里对于各类第三方框架的使用,Model 的组织方式,以及网络部分的处理都十分值得学习。 24 | 3. [Cartography](https://github.com/robb/Cartography):一个 Swift 的使用代码书写 AutoLayout 的框架。因为需要考虑到满足所有可能的需求,所以 Apple 自己的 AutoLayout 相关 API 相对起来使用比较麻烦,于是出现了不少对于原来 AutoLayout API 的封装,Cartography 就是其中之一。 25 | 4. [Preheat](https://github.com/kean/Preheat):iOS 10 中 Apple 为 `UITableView` 和 `UICollectionView` 添加了预先获取 cell 的特性,这样在展示 cell 时我们可以在实际展示之前就提前对 cell 进行加载和布局。Preheat 和这个作用类似,它将在合适的时候询问 delegate 并让你提供机会进行提前处理。你可以将这个框架和一些图片加载的框架一起使用,在实际展示前就完成图片下载。 26 | 27 | -------------------------------------------------------------------------------- /article/6.md: -------------------------------------------------------------------------------- 1 | # Swift 被 Apple 定义为面向 Protocol 的编程语言 - iOS移动开发周报 2 | 3 | 标签:移动 iOS 移动开发技术周报 Swift 4 | 5 | 摘要:Swift 被 Apple 定义为面向 Protocol 的编程语言:21.5-inch Retina iMac 信息透露 6 | 7 | --- 8 | 9 | ## 新闻 10 | 11 | 1. [21.5-inch 的 4K Retina iMac](http://www.macrumors.com/2015/06/25/os-x-el-capitan-code-hints-at-21-5-inch-imac/):在 SDK 放出后,程序员们就没有停止对其中隐藏细节的挖掘。自上周曝出 12-inch 的 iPad Pro 后,这周又有开发者在 OS X El Capitan beta 中发现了分辨率为 4096 x 2304 的一款 iMac 设备,这应该对应的是 Retina 的 21.5-inch iMac。 12 | 13 | 2. [Apple 发布了第二版 iOS 9 beta SDK](https://developer.apple.com/ios/pre-release/):相比起第一版 SDK,beta 2 中主要实装了像 OptionSetType 等 Swift 2 特性,另外还修复了海量的 Swift 编译器错误。一些详情可以在[这里](http://www.russbishop.net/swift-2-beta-2)找到。 14 | 15 | ## 教程 16 | 17 | 1. [Introducing Protocol-Oriented Programming in Swift 2](http://www.raywenderlich.com/109156/introducing-protocol-oriented-programming-in-swift-2):Swift 2 通过 Protocol Extension 大幅强化了 protocol 在这门语言中的地位,而整个 Swift 标准库其实也是基于 protocol 来设计的,使用了大量的 protocol。可以说 Swift 是一门面向 protocol 的语言。这篇教程中列举了一些 protocol 在实际使用中的方法,可以让你掌握面向接口编程的基础知识。 18 | 19 | 2. [《RAC Marbles》](http://neilpa.me/rac-marbles/):一个直观的交互展示 RAC 中各种信号行为的网站。虽然是针对 RAC 的,但是其实很多概念都是函数式编程通用的。对于函数式编程有兴趣的朋友可以看看,另外也很适合在日常工作中用到时进行查阅。 20 | 21 | 3. [《基于 CoreText 的排版引擎》](http://blog.devtang.com/blog/2015/06/27/using-coretext-1/):CoreText 在做图文混排和一些复杂的富文本排版时是不可避免要接触到的。这一系列的文章从最基本的开始,一步一步完成一个支持图文混排、支持图片和链接点击的排版引擎。推荐给想要入门和使用 CoreText 框架的朋友阅读。 22 | 23 | ## 开源项目 24 | 25 | 1. [Tropos](https://github.com/thoughtbot/Tropos):Thoughtbot 开源的一个天气预报 app,使用了 ReactiveCocoa 和 MVVM 进行架构。想要学习使用这两种技术的同学不妨仔细读一下代码,毕竟天气预报作为一个入门 app 来说简直是再适合不过了。之后这个项目还有已计划迁移到 Swift 以及 ReactiveCocoa 3.0,所以可以持续关注。 26 | 27 | 2. [Bohr](https://github.com/DavdRoman/Bohr):实际开发过一些 app 的话你就会知道,设置页面一直很难做好。传统来说我们会选择使用 static 的 table view 来制作设置页面,但是很多时候条件判断和变更起来很不方便。Bohr 虽然也是基于 table view,但是却是一个很不错的改善方案。它封装了一些常用的 cell 来帮助简化构建设置页面的流程,另外也将添加 cell 的工作进行了剥离,这使得设置页面的制作更加简便灵活。 28 | 29 | 3. [GEOSwift](https://github.com/andreacremaschi/GEOSwift):GEOSwift 是 Swift 写的用来处理地理模型和拓扑模型关系和转换的框架。另外这个框架也和 MapKit 和 MapboxGL 有很好的集成,app 中如果有地图相关内容的话可能会很有用。 30 | 31 | 4. [SXWaveAnimate](https://github.com/dsxNiubility/SXWaveAnimate):一个很漂亮的灌水动画,可以用来丰富 app 中的动画效果。可能泛用性并不是很好,但是可以对实现的动画代码进行参考,并调整写出自己的动画代码。 32 | 33 | 5. [DownloadButton](https://github.com/PavelKatunin/DownloadButton):类似 App Store 下载时的按钮,提供了多种样式和状态,并且可以在 Interface Builder 中进行自定义。如果 app 中有类似的按钮需求的话,这个自定义控件能让你省掉很多工作量。 34 | -------------------------------------------------------------------------------- /article/7.md: -------------------------------------------------------------------------------- 1 | # iOS 8.4 和 OSX 10.10.4 更新 - iOS移动开发周报 2 | 3 | 标签:移动 iOS 移动开发技术周报 Swift 4 | 5 | 摘要:iOS 8.4 和 Apple Music 更新,iPhone 6s 最新情报。 6 | 7 | --- 8 | 9 | ## 新闻 10 | 11 | 1. [Apple 更新 iOS 8.4 和 OSX 10.10.4](https://support.apple.com/kb/DL1818?viewlocale=zh_CN):新版本的 iOS 和 OSX 主要 Apple Music,但是大陆地区并不在该服务的首发区域之内。不过从目前的资费和曲库来看,它的竞争力仍然难以和现有的一些免费音乐服务相抗衡,不知道 Apple 会不会在中国推出更加符合国情的收费政策。 12 | 13 | 2. [iPhone 6s 新信息](http://9to5mac.com/2015/07/03/iphone-6s-photos-nfc-storage-chips/):每年在 WWDC 之后和下一代 iPhone 产品发布之前都是各种爆料和猜测满天飞的时候。这次泄露的是主板信息,可以看出 iPhone 6s 配置了新的近场通讯 (NFC) 芯片,以及已然是最低 16GB 的存储。在设计方面似乎没有什么太大改动,好处是现有的 iPhone 6 配件应该可以无缝在 iPhone 6s 上使用。 14 | 15 | ## 教程 16 | 17 | 1. [《Objective-C Associated Objects 的实现原理》](http://blog.leichunfeng.com/blog/2015/06/26/objective-c-associated-objects-implementation-principle/):Associated Objects 是 Objective-C runtime 的一个典型应用。这篇文章通过一些尝试和摸索,为我们讲解了 Associated Objects 这一特性的幕后行为和实现原理。如果你对 Associated Objects 的生命周期和关联方式还不是很明白的话,推荐阅读本文。 18 | 19 | 2. [《漫谈iOS Crash收集框架》](http://nianxi.net/ios/ios-crash-reporter/):监视 app 的运行情况和收集崩溃报告是提高 app 质量的不二手段。文章从崩溃日志的产生开始,简述了一些崩溃日志收集时需要注意的问题和解决方法。 20 | 21 | 3. [《Swift 2: SIMD》](http://www.russbishop.net/swift-2-simd):在之前版本的 Swift 中我们如果想要使用 SIMD (单指令多数据) 来进行数学运算的话,只能借助 Objective-C 先导入和封装。去年 mattt 也发布了 [Surge](https://github.com/mattt/Surge),来使用 Accelerate 框架间接地借助 SIMD 进行运算加速。在 Swift 2 中 SIMD 框架已经可以直接使用了,这篇文章简单介绍了 `import simd` 之后我们能得到的好处。 22 | 23 | ## 开源项目 24 | 25 | 1. [SwiftValidator](https://github.com/jpotts18/SwiftValidator):一个 Swift 写的基于 text field 的表单验证框架,你可以使用这个框架来使用默认的规则 (比如最短长度,是否一致,是否是邮件地址等) 来对用户填写的表单数据进行本地验证。另外这个框架也提供了自定义验证规则的功能,你可以扩展它的功能,以满足自己 app 中的验证需求,十分方便。 26 | 27 | 2. [GradientView](https://github.com/soffes/GradientView):一个将 `CGGradient` 集成进 `UIView` 中的很简单的项目,为我们提供了很简易的接口来在 `UIView` 中添加渐变效果。GradientView 提供了操作包括渐变颜色,方向,位置的选项,对于一般需求的渐变颜色的 `UIView` 来说已经足够使用。 28 | 29 | 3. [LxGridView](https://github.com/DeveloperLx/LxGridView):模仿 iOS 主屏图标长按以后抖动效果的一个 Collection View 实现。同时对拖拽移动和删除也有很好的支持。如果 app 中有用到类似动画效果的话,可以使用这个框架来加速制作。 30 | 31 | 4. [GaugeKit](https://github.com/skywinder/GaugeKit):Apple Watch 上健身活动 app 那样的圆环视图可以很好地表现出像是百分比或者进度这样的概念。这个框架可以帮助开发者在自己的 iOS app 中使用同样的视图。需要注意的是,这个框架只能用在 iOS 里。由于 Apple Watch 的 UI 上的限制,在 watch app 上想制作类似的效果暂时还是只能用帧动画的方式。 32 | 33 | 5. [ESJsonFormat-Xcode](https://github.com/EnjoySR/ESJsonFormat-Xcode):一个将 json 字符串进行解析,并转换为 model 中属性声明代码的插件,支持 Swift 以及类型嵌套。在我们写 model 的时候可以很方便地将 API 文档的 json 复制过来,使用这个插件进行自动转换,不仅可以节省时间,也能减少人为错误的可能性。 34 | -------------------------------------------------------------------------------- /article/8.md: -------------------------------------------------------------------------------- 1 | # Apple Pay 开始全球业务,新款 Office 发布 - iOS移动开发周报 2 | 3 | 标签:iOS Mac 移动 移动开发技术周报 4 | 5 | 摘要:微软发布 Office 2016 for Mac,Apple Pay 迈出走出美国第一步 6 | 7 | --- 8 | 9 | ## 新闻 10 | 11 | 1. [Apple Pay 登陆英国](http://www.macrumors.com/2015/07/07/banks-gearing-up-for-uk-apple-pay-launch/):虽然官方还没有宣布,但是英国一些银行的信用卡已经可以被添加到 Apple Pay 中了。在经过大半年的美国本土检证之后,这也是在 Apple Pay 国际化的第一步。不过和 Apple Music 类似,在国内是否能与本地的支付服务相抗衡仍然是未知数。 12 | 13 | 2. [微软发布 Office 2016 for Mac](https://products.office.com/en-us/mac/microsoft-office-for-mac):微软 Office 办公套件可以说在办公软件领域还是占有绝对统治地位的。近日微软为 Mac 发布了新一代的 Office,这是继 Office 2011 之后微软首次发布全新的 Office for Mac 版本。如果你已经订阅了 Office 365 的话,可以直接获得这个更新。 14 | 15 | ## 教程 16 | 17 | 1. [《招聘一个靠谱的 iOS》](http://blog.sunnyxx.com/2015/07/04/ios-interview/):作者通过自己作为面试官的经验,分享了一些在应聘 iOS 开发职位的时候应该特别注意的地方。文章也总结了一些面试常见的题目,不论你是准备进行面试还是单纯地想检验一下自己的知识掌握情况,这篇文章都值得一看。 18 | 19 | 2. [《Fun With CALayer Mask》](http://blog.zhowkev.in/2015/07/06/fun-with-mask/):利用 CALayer 可以制作很多 view 的效果,作者使用了巧妙的方法实现了一个 text view 的颜色渐变效果。文章简单讲述了实现的思路,另外这个效果也在 [GitHub 开源](https://github.com/kevinzhow/RealtimeGradientText)了,可以对照着进行学习。 20 | 21 | 3. [《禅与 Objective-C 编程艺术》](https://github.com/oa414/objc-zen-book-cn):《Zen and the Art of the Objective-C Craftsmanship》一书的中文翻译版本,这本书由浅入深讲述了 Objective-C 语言的一些最佳实践和推荐用法。这不仅仅是一份编程风格指南,而且也蕴含了简洁明了的编程思想。通过对一些 Objective-C 中常见的写法的描述,为我们揭示了设计和书写优雅代码的诀窍。 22 | 23 | 4. [《Should I use a Swift struct or a class?》](http://faq.sealedabstract.com/structs_or_classes/):Swift 中的基础类型都是 struct 的,这和一些其他语言很不相同。在我们开发 app 时,如何选择使用 class 还是 struct 是一件很值得考量的事情。归根结底,就是实例是否需要存在共享状态以及可变性的问题。文章从最简易的例子入手为我们分析了 class 和 struct 的区别和最佳使用场景。通过阅读相信可以加深你对 Swift 的设计思想的理解,并能够在代码设计时起到一定指导作用。 24 | 25 | ## 开源项目 26 | 27 | 1. [MMCamScanner](https://github.com/mukyasa/MMCamScanner):利用 OpenCV 来进行图片边缘识别的框架,比如纸质文档进行拍照后自动识别边缘并按边缘裁剪出矩形的文本区域。利用这个框架可以开发一些文档保存的 app,或者更进一步进行识别和转换。 28 | 29 | 2. [fastlane](https://github.com/KrauseFx/fastlane):一套 iOS 开发和持续集成的命令行工具,可以用来快速搭建 CI 甚至自动提交的开发环境。这套工具中包括了上传 ipa 文件,自动截取多语言截屏,生成推送证书,管理产品证书等一系列实用工具。 30 | 31 | 3. [apous](https://github.com/owensd/apous):Swift 其实是很适合当做类似脚本语言的一门语言,Apple 官方也提供了 REPL 环境和像是 `swift run` 这样的命令行工具。apous 的目的是更进一步,使得把 Swift 当做脚本语言使用时更加方便。使用这个工具,你可以将脚本分散在独立的文件中,也可以通过 Carthage 或者 CocoaPods 来进行依赖管理。 32 | 33 | 4. [PleaseBaoMe](https://github.com/callmewhy/PleaseBaoMe):一个可以让你实时地在浏览器里查看 app 中的 SQLite 文件内容的框架。在开发基于 SQLite 数据库的 app 时,一个很让人郁闷的事情就是难以直接查看和追踪数据库中条目的变化,这让开发和调试时的难度大幅上升。使用这个框架可以让我们摆脱这个限制,十分方便。 34 | -------------------------------------------------------------------------------- /article/9.md: -------------------------------------------------------------------------------- 1 | # 网络音乐版权新政策是否会给 Apple Music 带来机会 - iOS移动开发周报 2 | 3 | 标签:iOS Mac 移动 移动开发技术周报 4 | 5 | 摘要:网络音乐版权推出新政策,也许会给 Apple Music 在国内的推广带来一些机会。 6 | 7 | --- 8 | 9 | ## 新闻 10 | 11 | 1. [Apple Watch 新广告中的中国元素](http://v.youku.com/v_show/id_XMTI4NjYxNjcwNA==.html?from=s1.8-1-1.2):中国业已成为 Apple 的最重要的市场之一,最近 Apple 发布了一系列关于 Apple Watch 的电视广告,其中有一个主题就是北京。虽然除了舞台背景是在北京以外,并看不出 Apple Watch 在使用上和北京有什么太大关系,但是这则广告确确实实是为了迎合中国市场的行动。 12 | 13 | 2. [网络音乐版权新政策](http://www.ncac.gov.cn/chinacopyright/contents/483/255725.html):国家版权局最近发布了一则通知,要求网络音乐服务商停止未经授权传播音乐作品,并责令各大网络音乐平台在7月31日前将未经授权的音乐作品全部下线。QQ 音乐、酷狗音乐、网易云音乐等 25 家网络音乐服务商签署《网络音乐版权保护自律宣言》,承诺抵制各类侵犯网络音乐著作权行为。此举是对国内网络音乐版权的规范,而版权付费和正版化,也是必然趋势。也许这一变化会给 Apple Music 在国内的推广带来一些机会。 14 | 15 | ## 教程 16 | 17 | 1. [《UICollectionViews Now Have Easy Reordering》](http://nshint.io/blog/2015/07/16/uicollectionviews-now-have-easy-reordering/):作为和 TableView 一样的最常用的控件之一,CollectionView 自从在 iOS 5 上出现以来就一直在不断改进。在 iOS 9 SDK 中 UICollectionView 已经加入了原生的拖拽重新排列的相关 API,本文通过例子讲解了这个功能的实现方式。如果你还没有使用过 UICollectionView 来制作界面的话,不妨在下一个项目中用它来全面代替 UITableView - 因为从功能上来说后者其实只是前者的一个子集,Collection 相比起来要灵活得多。 18 | 19 | 2. [《一次对MKMapView的性能优化》](http://adad184.com/2015/07/13/improve-performance-with-mkmapview/):作者通过使用 Instruments 检测并解决了一个遮罩渲染导致的性能恶化的问题,如果你没有 Instruments 的使用经验的话可以阅读本文。对于像文中的圆角或是阴影的处理,有经验的开发者往往能进行一定预判并提前采取手段优化。但是对于更复杂的 view 结构的优化,使用 Instruments 来检测问题源头是必备的技能,也更为可靠。 20 | 21 | 3. [《iOS9 Day-by-Day》](https://www.shinobicontrols.com/blog/ios9-day-by-day-index):iOS Day by Day 系列教程的最新版本。从 iOS 7 起,这位博主就会在 WWDC 之后每天更新一篇新 SDK 中的亮点功能的教程,这次也不例外。想要在短时间内了解新内容的开发者可以考虑订阅这些内容。相应的代码作者也公开在 GitHub 上了,另外如果您对前几年的内容感兴趣的话,还可以继续看看 [iOS7 Day by Day](https://leanpub.com/ios7daybyday) 和 [iOS8 Day bt Day](https://leanpub.com/ios8daybyday)。 22 | 23 | ## 开源项目 24 | 25 | 1. [SCSafariPageController](https://github.com/stefanceriu/SCSafariPageController):一个类似于 iOS Safari 中切换标签页时的特效。这个框架接口类似于 UIPageViewController,用户可以提供页面信息,框架将使用 3D 动画帮助你实现切换。如果在应用中有需要模仿系统浏览器标签切换效果的需求的话,这个框架应该可以帮助你节省不少时间。 26 | 27 | 2. [BTNavigationDropdownMenu](https://github.com/PhamBaTho/BTNavigationDropdownMenu):为 Navigation Bar 添加一个菜单,可以用来作为 View Controller 导航。iOS 开发中标准的导航模式其实只有 navigation 和 tab 两种,而众多开发者们也自己发明了像是 drawer 这样的新的导航方式。使用这个框架为我们提供了另一种新的导航模式思路。 28 | 29 | 3. [LxThroughPointsBezier](https://github.com/DeveloperLx/LxThroughPointsBezier):计算贝塞尔曲线一直是一件挺烦人的事情,往往需要对控制点进行大量的调整,才能获得理想的曲线。这个框架为我们简化了这一过程,只需要给定想要一条贝塞尔曲线通过的点,以及像是曲率这样的参数,就能帮我们绘制出通过这些点的曲线,这可以大大节省调整曲线的时间。 30 | 31 | 4. [MPCoachMarks](https://github.com/bubudrc/MPCoachMarks):在 app 制作时一个很通用的需求就是引导教程,一个好的引导教程不仅是展示你的 app 的绝好机会,也能让用户快速明白 app 的基本操作和功能,拉近 app 与用户的距离。这个框架可以为现有的 UI 添加一个变暗的 mask 层,只露出部分 UI。另外,我们还可以简单地在这个 mask 上添加图片或者文本,在创建一个简单的指引式教程时这些特性都是非常方便的。 32 | 33 | 5. [ParkedTextField](https://github.com/gmertk/ParkedTextField):一个可以固定后缀的文本框控件,可以用来引导用户输入一些类似邮箱,域名或者文件名之类的信息。这个项目本身内容并不复杂,源码也很少,但是因为使用了 IBInspectable,这让我们可以在 Interface Builder 中直观地使用这个控件。 34 | --------------------------------------------------------------------------------