Swiftレター #2

2016/10/09

mono 
Swift・iOSコラム
19 min readOct 8, 2016

--

ブラウザで見るとURL展開などされて見やすいのでオススメします👀

Swift

Type-safe URL Routing in Swift

Yasuhiro InamiさんのFunctional Swift Conference 2016での発表資料です。関数型の書き方でURLルーティングを型セーフに書こう、みたいな内容です。
リポジトリはこちらです。

Refactoring at Scale — Lessons Learned Rewriting Instagram’s Feed

Instagram iOS版がフィードを再実装し、そこから、柔軟・高速・安定にアニメーション付きのコレクションビュー系画面を組む処理をライブラリとして切り離し、instagram/IGListKitとして近日公開予定とのことです。

Porting the Swift Runtime to Android, Part One: The How

がんばってSwiftをAndroidにポーティングして、Android端末上で動くようにした、という記事です。

SwiftAndroid/swiftというapple/swiftからforkしたレポジトリで開発されていましたが、4月以降コミット無いですね(´・ω・`)

Protocol Buffers in your Kitura Apps

Letter #1Swiftプロトコルバッファプラグインがオープンソース公開されたことを書きましたが、それをIBMのKitura上で使ってみた、という記事です。

General Availability: IBM Bluemix Runtime for Swift

IBM Bluemix Runtime for Swiftが9月に正式版リリースされました。

iOS

Smooth Scrolling in Buffer for iOS: How (and Why) We Implemented AsyncDisplayKit

UIKitはメインスレッドのみでの操作を強いられ、これはiOS端末がシングルコアであること前提に作られたもので、今はせっかくほとんどの端末がマルチコアになってきたのに性能を引き出しにくく、60 fpsのスクロールを常に実現するのが難しい、とのことです。その課題を、AsyncDisplayKit(ASDK, Facebookが2014年10月にOSS公開)を活用したという内容です。ASDKは、Pinterastも使っている、とのことです。

Quick tip: Release iOS 7 Apps with Xcode 8

Xcode 8では、iOSのDeployment Targetのドロップダウンメニューに 8.0以上しか無いですが、7.0を直打ちするとiOS 7.0でインストール可能なバイナリを生成出来た、とのことです。正式サポートで無さそうなので多少注意はした方が良いと思います。

Designing a Robust Large File Download System

大きなファイルサイズのダウンロード実装をどのように実現したかの説明です。NSOperationによる非同期処理、Core Dataで進捗状態を永続化管理など使ったとのことです。続きの記事として、Background Downloadsにて、アプリが閉じられている時のダウンロード実装についても書かれています。

また、iOS 10では、resume周りにバグがあって、現状ちょっとしたワークアラウンドも必要、とのことです。

#25 Core Data in iOS10: NSPersistentContainer

NSPersistentContainerで、煩雑なCore Dataのセットアップ処理が楽になった、という内容です。記事では触れられてないですが、Core Dataはジェネリクス対応したりして、かなり使いやすくなった感じです。

How to send iOS 10 Notifications using the Push Notifications API

Pusher使った、iOS 10のプッシュ通知(UserNotificationsフレームワーク)のチュートリアルです。Pusher側も含んだサンプルプロジェクトも公開されています。

Swift Evolution

Accepted

SE-0141によって、@available(…)でiOSなどのプラットフォーム指定だけでなく、Swiftバージョン指定・obsoleted指定が出来るようになります。

SE-0142によって、associatedtypeにwhereで型制約を与えられるようになります。

Understanding Swift Evolution

140 proposals in 30 minutesという発表をされた方の記事です。

Swift EvolutionのProposal検索ツールを作って、色々分析したとのことです。

Swift 3.1で、ジェネリクスの型パラメーターに、具体的な型制約を付けられるように

これが出来なくて、けっこう不便だったので、正式リリースが楽しみです😋

https://github.com/apple/swift/blob/master/CHANGELOG.md#swift-31

ライブラリ・ツール

Source Code Extensionが色々出てきた感があります( ´・‿・`)

Bouke/SwiftInitializerGenerator

Source Code Extensionで、structのイニシャライザーを自動生成するものです。こういう支援機能を作る際の参考にもなりますね。

markohlebar/Import

コードの途中でimport書いて、それを先頭に移動してくれるExtensionです。

totocaster/Typist

キーボード監視ライブラリです。

マイクロライブラリですがこれ系ってけっこう便利で、僕はmorizotter/KeyboardObserverを使っていて、先日Swift 3対応のPull Request送ったりもしました( ´・‿・`)

リリース

macOS Sierra 10.12.1 beta 3

Xcode 8.1 beta 2

Xcode 8.0でシミュレーター実行時にログノイズが大量に出力されてしまう現象が、この版で直ったとのことで先日書いた記事に追記しておきました。

デザイン

Appleウェブサイトのレスポンシブなナビゲーションが「うまい!」と思う4つの理由

記事を読みながら、実際にAppleサイト触っていたら、「おお、なるほど!」と色々思わされました( ´・‿・`)

あと、Safariで見ると、磨りガラス効果も効いててオシャレ、というのも思い出しました( ´・‿・`)

We just launched Flinto for Mac 2, a big, free update!

Flinto for Mac 2がリリースされました🎉色々機能追加されています👀

Visual Dividers in Mobile UI Design

セルの境界などの区切りを表現する場合、セパレーターがよく利用されていますが、余白・色コントラスト・影による奥行きなども使い分けたり、あるいは画像一覧などはセパレーターは不要、など書かれています。セパレーター無くて表現可能なところはそうした方がすっきり洗練して見えることが多いですね。

サービス

GitHub Audio

GitHub上の活動がキレイなビジュアル・サウンドで表現されてます( ´・‿・`)

Apple系ニュース

DashがAppStoreから削除されてしまいました

iOS版・macOS版、ともにAppStoreからインストール出来なくなってしまいました。macOS版は、AppStore外からインストール可能です。有料ライセンスの移行はマイグレーションガイドに従いましょう。

Appleの独断で消されてしまった感じで、各所でざわついてます( ´・‿・`)

その他気になったこと

Google Hardware 2016

Pixel・VRヘッドセット・4K対応Chromecast Ultra・Google Homeなど発表されました。

ServerlessConf

サーバーレスカンファレンスが東京で開かれました。

Rebuild.fm #160でもこの話題に触れていて、面白かったです( ´・‿・`)

Cookpad TechConf 2017開催(2017/01/21(土))

今月中旬に募集開始とのことです。

筆者の小話

今から自分の結婚式に行ってきます。8時55分の電車に乗らないと遅刻なのでギリギリです( ´・‿・`) (ただいま8時25分)

iPhone 7 Plusゲット

昨日iPhone 7 Plusをようやく入手出来てほっとしました( ´・‿・`)

Swiftレター所感

このSwift・iOSコラムPublicationですが、Swiftレター #1開始2日目にしてフォロワーさん100人突破して、嬉しかったです。ありがとうございます🙇

OmniOutlinerに日々ネタをストックしておいて週末にまとめる、という感じでやっていますが、けっこう良い感じに出来ています( ´・‿・`)ただ、ついついボリューム多くなってしまって大変です( ´・‿・`)

--

--