Swiftレター #18
2017/01/29
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-0149・SE-0150 がIn Reviewに
- SE-0149: Package Manager Support for Top of Tree development:
swift package edit
で--path
指定することで、現状のセマンティックバージョン以外の開発版などでの依存解決を可能に - SE-0150: Package Manager Support for branches: 同じく、現状のセマンティックバージョン指定以外の所望のコミット(ブランチ最新・ハッシュ値など)の指定を、 マニフェストファイルおよび
swift pin
で可能に
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回目が開催されました。
発表資料:
- Swiftで作るepoll/kqueue+pre threadサーバー
- SwiftでgRPC/Protocol Buffersを使う
- Server Side Swiftを使った サービス開発とその運用を考える
iOS
Technical Q&A QA1795: Reducing the size of my App
以前からある公式ドキュメントですが、アップデートされていました(前回は2015–09–29なので1年4ヶ月ぶり)。Swiftはサイズ増えがち(あまり重いもの入れてないつもりでもすぐ50MB程度になってしまったり)なので、このドキュメント頼りに少しでも削減努力しても良いかなと思いました。個人的にはTinyPNGなどを用いた画像サイズ軽減はコスパ高いので特に大きめの画像ファイル含める時はよくやっています(画像リソースの大半はPDFにしちゃっていますが)。
Apple関係のリリース
先週は盛りだくさんでした。各種OSがマイナーアップデートされましたが、共通してカーネル脆弱性の修正が含まれているようです。
- iOS 10.2.1 (14D27)
- macOS Sierra 10.12.3 (16D32)
- watchOS 3.1.3 (14S960)
- tvOS 10.1.1 (14U712a)
- iTunes 12.5.5
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対応・シアターモード搭載あたりがメインのようです。
その他
- Safari 10.1 beta(iOS10.3・macOS 10.12.4に搭載)
- 「Appleサポート」iOSアプリリリース
- AppleのWebサイト上のフォントがSan Franciscoに変更
その他
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)
バックナンバーはこちらから一覧出来ます。
↓アカウントやSwift・iOSコラムPublicationフォローしていただけるとありがたいです🙇 PublicationフォローしていただけるとこのSwiftレターのメール通知も届くようになります( ´・‿・`)