Swiftレター #18

2017/01/29

mono 
Swift・iOSコラム
15 min readJan 29, 2017

--

Swift

Fun with String Interpolation

String Interpolation(文字列補間)をExpressibleByStringInterpolation(Swift 3で非推奨になって今後違うものに変わる予定)を使ってコントロールするやり方が紹介されています。

Faster Mix-and-Match Builds with Precompiled Bridging Headers

SwiftとObjective-Cの混在プロジェクトにおいて、Swift 3.1でBriding Headerの冗長なコンパイルを削減することによってビルド時間が30%減るようです(構成によって変わりそうですが)。Xcode 8.3 betaでOther Swift Flagsに -enable-bridging-pch フラグを設定することで有効化でき、将来その指定無しにデフォルトで有効化されるかもしれない、とのことです。

Working with Asynchronous Objective-C APIs in Swift

Objective-Cの非同期APIでは結果がオプショナルの値とエラーの2値で来たりしますが、それを Result を用いて改善するやり方の紹介です(2*2 = 4通りではなくResultで成功・失敗の2通りに制限)。

そのまま扱いがちです(ともにnil・ともに非nilのパスにassert入れたりしつつ)が、ちょっとした手間でけっこうスッキリするので良いと思いました。

Improving Optionals

Protocolなど活用してOptionalを便利にしたExtensionが色々紹介されています。Swift 3.1以降Genericsが改善されていくうちに、もう少しシンプルに書けそうなところもありそうに見えました。

#292: Metaprogramming with Sourcery

以前紹介したSourceryというコード生成ツールを活用したメタプロミングを列挙型の count のextension定義自動生成を例に説明されています。

列挙型の count の定義は悩ましいところなので、こういう方法もありですね。

Swift Evolution

Swift ABI Stability Manifesto

ABIの安定化をSwift 4で最優先の達成事項として取り組むことが、「Swift 3の開発の振り返りとSwift4の計画が記された、メーリングリストの投稿(英語)」で発表されていましたが、そのマニフェストが公開されました(すごく長いです)。

ABI安定・Swift 4の話題は以前、Swiftは3.0で安定するのか? リリース予定日と新機能リスト — Build Insider に書きましたが、当時の予定と特に変化無さそうで、より詳細まで詰められてきたという感じですかね。

SwiftPMの SE-0149SE-0150 がIn Reviewに

SE-0148: Generic Subscripts がAcceptedに

先々週In Reviewになったジェネリクスのsubscript対応ProposalがAcceptedになりました🎉

[swift-evolution-announce] Swift 4 Package Manager Roadmap

Swift 4のPackage Managerのロードマップが発表されました。Swift 3.1にもSwiftPMの新機能は7つも入りますが、現時点の計画で4では10個・5以降で5つ予定されているようです。Swift本体は落ちついて来た一方、これから変化の大きい分野ですね。

jpmarthaさんによる整理記事です: Swift 4 Package Manager Roadmap

サーバーサイドSwift

Tokyo Server Side Swift Meetup #6 — connpass

サーバーサイドSwiftのミートアップの6回目が開催されました。
発表資料:

iOS

Technical Q&A QA1795: Reducing the size of my App

以前からある公式ドキュメントですが、アップデートされていました(前回は2015–09–29なので1年4ヶ月ぶり)。Swiftはサイズ増えがち(あまり重いもの入れてないつもりでもすぐ50MB程度になってしまったり)なので、このドキュメント頼りに少しでも削減努力しても良いかなと思いました。個人的にはTinyPNGなどを用いた画像サイズ軽減はコスパ高いので特に大きめの画像ファイル含める時はよくやっています(画像リソースの大半はPDFにしちゃっていますが)。

Apple関係のリリース

先週は盛りだくさんでした。各種OSがマイナーアップデートされましたが、共通してカーネル脆弱性の修正が含まれているようです

Xcode 8.3 beta

Swift 3.1同梱とSwift 2.3サポート打ち切りが大きな変化ですかね。

また、XCTestにも改善があるようで、Waiting in XCTest に紹介されています。

iOS 10.3 beta

アプリ内レビュー・返信
SKStoreReviewControllerで、App Store経由ではなくそのアプリ内でレビューをお願い出来るようになります。また、正式版リリースのタイミングで、レビューに対して返信出来るようになります。返信は、同時期にMac App Storeでも可能になるようです(多分詳細は明らかになってないですがGoogle Play Storeみたいな感じですかね?)。

What Does iOS 10.3 Mean for Growth Marketers?という分析記事もあがっています。

アプリアイコンの変更
setAlternateIconName(_:completionHandler:) という、アプリアイコンを変更出来るAPIが追加されます。ただ、あらかじめアプリに格納してInfo.plistに書いておいたアイコンしか指定できないので、「リリース後にアプリアイコンを柔軟に変更可能となる」わけではないです。例えば、Apple標準カレンダーのような曜日と日付の組み合わせアイコンは、大量に画像生成(31*7 = 217)して入れておけば出来なくもないですが、想定している用途とは違うかなと思いました(天気予報をアイコンで表現とかならバリエーション数的に許容範囲な気も)。

実装はドキュメント頼りにやろうとするとやや難しい(Info.plistを色々弄る必要があって今後改善されそう)ですが、 AlternateIconTest で簡単に試せます。

ファイルシステムがHFS+からAPFS(Apple File System)に変更

ファイルシステムが変わるベータ版ということで少し怖かったですが、つい私物端末をアップデートしてしまいました。パフォーマンス向上しているようですが、体感では分からない程度ですね。今のところは不具合も感じてないです。

AirPodsを探す機能

「iPhoneを探す」アプリに、AirPodsも一覧されるようになったようですが、僕には反映されず謎です🤔

ちなみに使ってて感じるのは、耳から落として無くすというより、ふとケースに入れずにどこかに置いたりポケット・カバンなどに入れてどこに行ったか行方不明になることがありそうに思いました(ケース + イヤフォン2つと分かれていて、それぞれ小さいので)。

macOS 10.12.4 beta

Night Shiftモード搭載Sierraになってから色々不具合のあったPDFKitの修正あたりがメインのようです。

watchOS 3.2

SiriKit対応・シアターモード搭載あたりがメインのようです。

その他

その他

fastlane is joining Google — Felix Krause

そういえばfastlaneはFabricに取り込まれていましたが、先日FabricがGoogleに買収されたので、fastlaneもGoogle傘下になったようです。iOSアプリ開発では定番ツールですが、現状ベータ対応のAndroid対応も力入れてきて、より一層モバイルアプリ開発の定番ツールになっていきそうな気がします👀

フリーランス市場から読み取れるApple開発者のSwiftへの移行

Swift需要が高まっているという内容です。原文はこちらです

第5回 null安全:プログラマに優しい現実指向JVM言語 Kotlin入門|

流行りのnull安全ネタのKotlin版です( ´・‿・`)

スマートフォンをかざして翻訳 — Word Lens 日本語版登場

Google翻訳アプリが、Word Lensというリアルタイム翻訳機能の日本語対応しました。盛り上げってましたね

Google I/O 2017 開催スケジュール公表(5/17–19)

個人的には、Fabric を取り込んだ Firebase がどうなるかに注目です👀

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

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

--

--