🍁Swiftレター #6🍁

2016/11/06

mono 
Swift・iOSコラム
21 min readNov 6, 2016

--

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

Swift

Swift: UserDefaults protocol

Swift 3でNSUserDefaultsがUserDefaultsになり、APIが簡潔になりましたが、それをさらにベターに扱えるようにしています。

個人的には、radex/SwiftyUserDefaultsを気に入って使っていましたが、記事の書き方はさらに良いと思いました。

第1回 関数型プログラミングを試す — 書いて覚えるSwift入門

gihyoにて、 @dankogi さんのSoftware Designでの連載の再掲が始まりました。サンプルコードのSwift 3化対応はされていないように見えました。

How to Read the Swift Standard Library Source

Swift標準ライブラリのソースファイルの多く(1/3ほどらしい)には、.swift.gyb という拡張子が付いていて、GYBというSwiftとテンプレート言語の混ざったものになっています。そのため.swift.gybから生成されるソースコードを確認するには、Swiftをフルビルドするか、ちょっとしたスクリプトを組んで実行する必要があり、その方法が書かれています。

Swiftのビルドは、少し前の記事ですが Tsutsumi ShuichiさんのオープンソースになったSwiftをビルドしてみるも参考になります👀

swift-llvm and swift-clang

appleリポジトリ配下に、apple/swift-llvmapple/swift-clang があるが、この2つは本家と比べて何が違うのか?という記事です。LLVM本家のソースはGitHub配下では無いので、 https://github.com/apple/swift-clang/commit/f42c1bed0bbc7774e5bfaefc50cb39f347115ed1 のように、Automerger botが 本家の変更をupstream-with-swiftブランチに自動マージしている、とも書かれていて、なるほどと思いました。Swiftレター #4で書きましたが、LLVMもGitHubへの移行を検討中なので、それが実現されるとSwift開発もしやすくなりそうです。

Swift Copy-on-Write PSA: Mutating Dictionary Entries

普通に書いてしまいそうなコードで、Copy-on-Writeが意図せず走ってパフォーマンスが悪化するという記事です。「2つ以上参照がある瞬間に変更操作をする」とCopy-on-Writeが発動するので、大量のコレクション操作などする場合は注意した方が良いですね。
普通に変更操作のタイミングで参照が1つになるように調整して回避したコード例が載っていますが、さらにSharedArrayというクラス(値型のArrayとは違って参照型)を用意してそれで扱うのがより速いようです。前者が素直ではありますが、パフォーマンス求める場合は確かに後者もありだなと思いました。

Unowned or Weak? Lifetime and Performance

unownedとweakの挙動の違い、ライフタイムによる使い分け、さらに生成されるSIL(Swift Immediate Language)を読み解いてパフォーマンスはどうなのか(weakの方が複雑な処理が走る)、まで説明されています。

Mastering Swift: essential details about strings

SwiftのStringは4つのビュー(文字列表現)が用意されていることを説明しつつ、ほぼCharacter Viewを例に、各種文字列操作の例が書かれています。
サンプルコードが、IBM Swift Sandboxのリンクとして付いていて、親切に思いました。Playgroundファイルなどでも充分便利ですが、手元で動かすの面倒だったりしますしね。図解もあって丁寧な記事です。

Swift Evolution

guard let x = x

guard let x = xという風にアンラップしつつ同名変数に割り当てる書き方はよくします(主流だと思っています)が、同名に割り当てるのに一々明示的に書くのが面倒(DRYじゃない)なので簡便な書き方が欲しいという意見が挙がりました。

同名に割り当てることについては、@k_katsumi さんと同意見です

それについて、Chris Lattnerさんから返信がありました。以下を見比べて、b)みたいな書き方を用意すべきか?という考察がされています。

Better UnwrappingというProposalの叩き台も @ericasadun さんが作られていました。このあとどう発展していくのか楽しみです( ´・‿・`)

サーバーサイドSwift

Getting Started With Vapor: A Swift Web Framework

VaporフレームワークでちょっとしたWebサーバーをlocalhostで立ててみる、という内容です。Swift 3.0以降と書いてありましたが、現最新版のXcode 8.1・Swift 3.0.1の組み合わせで手順通りになぞってみたら、何も躓かずに数分で出来ました👏 Swift 3.0正式版が出るまではバージョン間の差異などで一筋縄で行かない印象でしたが、かなり落ち着いて来た感あります。

How to Deploy Vapor Apps to Heroku

上の記事の続きで、さらにHerokuにデプロイする、という内容です。これもスムーズに出来るようで、簡単なWebサーバー組むのはスムーズに出来るようになってきました。

Server-Side Swift (本)

本も出てきました。約1ヶ月後の12月5日発売で$25で、つい予約購入してしまいました( ´・‿・`)こちらはIBMのKituraを使用しています。内容紹介見る限り一般的なAPIやWebサイト組むのに必要最小限のことは載ってそうで、効率よくキャッチアップ出来そうで機会あったら弄ってみたいなと思いました。

iOS

39 Open Source Swift UI Libraries For iOS App Development

Mediumでけっこうバズっていました(489レコメンド)。タイトル通り、39個のUIライブラリがGitHubスター数順に簡単な説明とともに紹介されています。

How Not to Crash #1

解決困難系のクラッシュ(再現困難なものなど)をいくつか直した話です。クラッシュ監視はiTunes Connect Crash ReportsとHockeyAppを使っているとのことです。

外部サービスの方が良い面もありますが、そのレポート処理はアプリ内のプロセスで行われOSからkillされた場合はレポートがiTunes Connect Crash Reportsにしか送られないので、併用が良いですね。

特に以下が個人的にはためになりました。

  • SierraのConsoleアプリがパワーアップしていて、端末ログ見るのに便利 (僕は今までXcodeでベタに端末ログ見ていました)
  • 年2回まで使えるTechnical Support Incidentsを有効活用

macOS

#281: Touch Bar Basics 🚥

macOSのTouch Barの記事です。

クラスメソッドの加藤潤さんも手厚い記事書かれています:

ライブラリ

sergdort/XcodeEquatableGenerator

Equatableに準拠するためのメソッドひな形作ってくれる拡張です。僕は毎回既存コードからコピペして調整したりしているので、便利になりそうです。

ijoshsmith/json2swift

JSONレスポンスファイルから、それに対応するstruct型コードを自動生成してくれます。実プロジェクトのデータで試したら、良い感じにベタなコードを生成してくれました。実プロダクトで導入するものかは微妙な気がしますが、ちょっとしたクライアントコードをちゃちゃっと書きたい時など良さそうに思いました。

loiclec/Apodimark

Markdownパーサーです。Objective-C製だとindragiek/CocoaMarkdownあたりでしたが、Swiftだとこれが定番になりますかね🤔

ツール

Scriptarian

AppleScriptでmacOSのアプリを弄るコード書いて色々自動化出来たりしますが、文法が謎(しっかり勉強すれば分かるのかもしれませんが無駄に学習コスト高めな印象)で書きにくかったのですが、それをコード補完機能ありのSwiftで書けるようにしてくれる素晴らしいツールです( ´・‿・`)試用無しに$10で購入必要で少し迷いつつもポチりましたが、すごく良い感じに動いて感動しました。YosemiteからはJavaScriptで書けるようになって敷居下がりましたが、それでもコード補完無いとなかなか快適に書けず微妙に思っていましたが、これで解決した気がしています。

qasim/Airstream

AirPlayを簡単に扱えるようにするフレームワークです。同梱のサンプルアプリをmacOSで起動すると、iOS端末の音楽などをmacOSで流せるようになります。良いスピーカー使っている場合などに便利です。今までAirServer使っていましたが、このサンプルアプリがシンプル必要充分で、また自分で機能拡張もサクッと書けそうで乗り換えました。

リリース

Xcode 8.2 beta

Xcode 8.2 is the last release that will support Swift 2.3. Please migrate your projects to Swift 2.3 code to Swift 3 syntax by opening the project and choosing Edit > Convert > To Current Swift Syntax.

Swift 2.3はXcode 8.2が最後なので、それより新しいのを使いたい場合はSwift 3対応が必須となります。Appleにしてはこれでもかなり優しい互換対応だったと思っています。今はもうOSSライブラリもほとんどSwift 3対応済みでTipsも色々転がっているので、どうせやるなら早めに対応するに越したことないかと。

iOS 10.2 beta 1

「やっぱりやめた」という変更が入らなければ、シャッター音・スクショ音がかなり改善されそうです🎉

あとは絵文字の追加やデザイン調整などが目立った変更ですかね。

その他、こちらに分かりやすく網羅されています:

その他のApple製品アップデート

PaintCode 3

ベクター画像をコード変換してくれるPaintCodeがメジャーアップデートして、Swift 3・Android・JavaScript対応などしました。また、これを機にApp Storeからも撤退しました

その他のニュース

WebPayサービス終了

使っていた場合は大変ですね( ´・‿・`)

Microsoft Teams

Microsoftがグループチャットサービスを発表しました。

早速SlackからMicrosoftへのメッセージが出されたりと盛りがりました。

Adobe MAX 2016

Adobe Senseiが話題になりました。

Adobe XDはiOSアプリ開発者にとって少し注目ですね👀

その他、こちらに色々まとまっています:

筆者の小話

Instapaperのプレミアム機能が無料化したのが個人的に大きな関心事でした。今までPocketを使っていましたが、乗り換えました。正確には、PocketがRead It Laterの時からInstapaperもたまに使いつつ、最近はPocketに絞っていましたが、またInstapaperに戻ってきた感じです。

どちらも使い倒して一長一短ですが、個人的にはInstapaperが今はしっくり来ていて、しばらくはこちらで「あとで読む」管理をしていこうかなと思っています。

先週、Tsutsumi ShuichiさんがWantedlyフィードにて連載を始められ、第一回としてサンフランシスコでのエンジニア生活、1週目 — Wantedlyが公開されましたが、Instapaperのスピーチ機能を使って読み上げてもらったらPodcastみたいで良い感じでした。

技術系記事は読み上げ厳しいですが、こういうストーリーぽい記事は相性良いので、家事やランニングの時間など使って効率的に記事消化こなしていこうと思っています( ´・‿・`)

バックナンバーはこちらから一覧出来ます。

↓アカウントやSwift・iOSコラムPublicationフォローしていただけるとありがたいです🙇 PublicationフォローしていただけるとこのSwiftレターのメール通知も届くようになります( ´・‿・`)

--

--