Swiftレター #4

2016/10/23

mono 
Swift・iOSコラム
15 min readOct 23, 2016

--

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

Swift

Whole-Module Optimization in Swift 3

Whole Module Optimizationによってどういう最適化がなされているかについてのApple公式記事です。
僕も以前関連記事を書きまして、合わせて読むと理解しやすいはずなので、是非ご覧ください。

Objective-C id as Swift Any

Objective-CのidがSwift 2まではAnyObjectにマッピングされていたのが、Swift 3からはAnyになりました(SE–0116: Import Objective-C id as Swift Any typeなどが関連Proposal)。記事中盤くらいまではその紹介です。後半では、Swift 3.0のAnyの抱えている問題に触れて、それが以下の改善の含まれる3.0.1にて解消する、ということが述べられています。

Generic Range Algorithms

SwiftのRangeとClosedRangeの扱いが面倒、という話です。これを吸収するには以下の対処などが必要です。

  • 関数側でオーバーロード
  • 呼び出し側でCountableRange()変換をする
  • ジェネリクスなコードで対処(記事の例ではRandomAccessCollectionプロトコルにrandomメソッドを生やす)

上の2つは正攻法ですが、3つ目はなるほどと思いました。是非記事ご覧ください。numericCastの存在も初めて知りました👀

少し違う観点ですが、僕も以前コラム書きました

Contributing to the Server-side Swift World

タイトルだけ見ると、サーバーサイドSwiftで適当なWeb API組むのかな?と思いましたが、そうではなくクロスプラットフォームライブラリの作り方みたいな内容でした。Swift Package Manager (SwiftPM)でのパッケージ作成、Xcoceプロジェクト生成、パッケージの公開・作成方法、CI環境構築、など網羅的に紹介されています。

I fell like the time has finally come to start taking server-side Swift development more seriously.

これまでSwift自身に加えてSwiftPMの変更が多くて取っつきにくかったですが、3.0がリリースされてかなり変更が緩やか(保守的)になってきたので、手を出すにはちょうど良い時期だと僕も感じています( ´・‿・`)

iOS

iOS 10 Day by Day :: Index

残念ながら年々ボリュームダウンしているiOS Day by Dayシリーズ(iOSの新機能のサンプル集)ですが、出そろいました。iOS 8の頃はかなり充実していて、かつ公開も早くてけっこうお世話になりました。

iOS 10 Link Preview API in WKWebView

iOS 10ではWKWebViewで3D TouchのPeek・Pop時の処理をハンドリング出来るようになった、という内容です。

Tips for Backwards Compatibility with iOS 10 Today Widgets

Today Widgetは、iOS 9と10で以下が変わりました。

  • ライトテーマ → ダークテーマ
  • デフォルト左インセットが無くなった
  • Expanded Modeの登場

これらのiOS 9以下と10以上の違いを踏まえつつ、どのように両対応するのがスマートか、という内容です。また、最後には110 px以下の高さの場合、iOS 9以下ではpreferredContentSizeの高さを明示指定しないとレイアウトが崩れる、という注意も書かれています。

From sketches to the iMessage App Store: How I got my stickers published in 8 days (Part 1 of 2)

デザイナーの方が、色々がんばってiMessageのStickerアプリをリリースしたという話です。Part2もあります

必須化まで約2ヵ月半!App Transport Securityについて

現在は、ATS自体の無効化を行うことが可能ですが、Appleは6月13日(米国時間)に開幕されたWorldwide Developers Conference 2016(WWDC 2016)で、2016年末を目処にApp Storeの全てのアプリケーションに対しATSを必須化すると発表しました。

とのことなので、注意ですね。WWDC 2016年直後からちょくちょく話題になっていましたが、改めて良い感じにまとめられていて、良い情報だなと思いました。

Analysis of the Facebook.app for iOS

Facebook iOSアプリは、バージョン 66.0 時点で165 MB というかなり大きなサイズとなっていますが、なぜそんなに肥大化しているのか?という話です。

The Facebook app is a complex app and not just a simple web view. It contains a lot of third party libraries and even splits its __TEXT segment in order to not reach the 60 MB limit imposed by Apple.

という結論ですが、それにしてもサイズ大きすぎないかな?と疑問が残りました。

ライブラリ

bwhiteley/JSONShootout

Marshal・Mapper・Unbox・SwiftyJSON・Argoのパフォーマンス比較です。前者2つがかなり速いようです。他のライブラリ比較する場合もこれをforkして試すのオススメとのことで、確かにと思いました。

Swift Evolution

SE-NNNN: Package Manager Version Pinning

Gemfile.lock・Podfile.lock・Cartfile.resolvedなどのように、SwiftPMの依存バージョンを固定化する機能のProposalです。Package.pinsファイルで管理することが提案されています。$ swift package pinなどのコマンドで明示的に生成する、というのが他と比べて少し変わっているなと思いました。まだステータスがDiscussionですが、近い将来こういう機能が付く確度は高そうです。
[swift-evolution] Proposal: Package Manager Version Pinningのメーリス投稿から生まれました。

fileprivateの導入は良かったのか?

Swift Weekly Brief Issue #43の後半で詳しく触れられています。Swift 2まではprivateでファイルスコープのprivateでしたが、Swift 3でそれはfileprivateとなってprivateは宣言されたスコープ内という意味に変わりました。色々意見ありますが、厳密にはSwift 3のprivateは合った方が良いこともたまにあるかもしれないがアクセスコントロールレベル増やして複雑にしてまでやることではなくSwift 2の方がちょうど良かったのでは?みたいな意見もけっこう見られます。

個人的には、fileprivateだけで充分と思っていますが、現状の分かれていることにも不満は無いかな、くらいの感覚です。

Moving to GitHub — Unified Proposal

LLVMのバージョン管理を自前Subversion管理からGitHubに移そうか、という提案が出てきました。

Swift言語とも絡む部分ですし、これが実現すると色々スムーズになるのではということです。

リリース

CocoaPods 1.1.0 — Xcode 8 support, improved support for new Swift versions, extensions, frameworks, and more

CocoaPods 1.1.0がリリースされました🎉

1.1.1も3日前にリリースされてますね。

以前は大変お世話になっていましたが、色々罠が多すぎて疲れる(特にSwift使う場合)ので、個人的にはCarthage使った方が幸せになれると思っています。将来的にはSwiftPMも良さそうと思っていますが。

コラム

Getting Started with Mobile Analytics

便利なモバイルアプリのアナリティクスサービスが色々あるので、積極的に使って、データ収集・分析して改善に活かしていきましょう、という話です。
記事では以下の3つを比較して長所・短所があげられています。

個人的には、FabricGoogle Analyticsを併用して、前者でざっくり定性評価・後者で細かく分析、みたいな感じでしっくり来ているのですが、他のサービスもそれぞれ良いところあると思うので、試してみるのも良いかなとも思っています(ツール使うことにばかり時間取られたくないのでバランス大事ですが)。

筆者の小話

最近メルカリ使い始めました

毎年iPhoneなどなど買い換えているので、その度に売却していて、これまでは手間などを考えてじゃんぱらを使うことが多かったですが、今回査定でかなり引かれたのでメルカリ使ってみたらiPhone 6sApple Watchが良い感じに売れました( ´・‿・`)手間もわざわざじゃんぱら行くより楽かも、と思ったり。

週末は動物園に

iPhone 7 Plusのカメラ良いなー、とあらためて思いました( ´・‿・`)

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

--

--