SwiftのSDK overlayとswift-corelibs-foundation

SDK overlay

SwiftのSDK overlayというものを耳にしたことはあるでしょうか?これはSwiftのOSSプロジェクトであるapple/swiftの開発において、FoundationやAppKit、UIKitなどのObjective-Cで書かれたシステムフレームワークに対し、SwiftらしいAPIを提供するための拡張レイヤーです。

https://github.com/apple/swift/tree/master/stdlib/public/SDK

Swift 3で、NSDateに対するDateNSURLに対するURLなど、参照型と対応する複数の値型がFoundationに追加された*1のを覚えている人も多いかと思います。これらの値型はもちろんSwiftで実装されているわけですが、これも実はSDK overlayの一部です(この場合はFoundationのoverlay)。こう聞くと、SDK overlayが少しは身近に感じられないでしょうか。

swift-corelibs-foundation

ここで話は変わります。Swiftの標準ライブラリに次ぐコアライブラリであるFoundationはObjective-Cで実装されているため、そのままではLinuxなどのDarwin以外のプラットフォームでは使用できません。これではせっかくSwift自体がLinuxに対応しても、種々の機能不足に悩まされたり、クロスプラットフォームのライブラリの開発に支障をきたしてしまいます。

この状態を解消するために、SwiftのOSS化と共に公開されたのがswift-corelibs-foundationです。このリポジトリは、FoundationのベースとなっているCoreFoundationというC実装のフレームワークを使い、FoundationをSwiftで再実装するというものです。

Foundation overlayとswift-corelibs-foundationの同期

さて、Foundationの再実装と聞いて気になった人はいないでしょうか?Objective-C版のFoundationへの追加レイヤーであったoverlayはどうなるのでしょうか。答えは、Foundation overlayはswift-corelibs-foundationの側でも実装される必要があるのです*2

こうして、apple/swiftとswift-corelibs-foundationの間でFoundation overlayの実装を同期する必要が出てきます。例えばNSStringAPI.swiftのコメントに書かれているように、一方を更新したらもう一方を更新するのを忘れないようにしなければなりません。実際、一方にプルリクエストを出すと、もう一方にもプルリクエストを出してくれとレビュワーからも依頼されることがあります。

とはいえ人間忘れてしまうもので、どうしても内容の乖離は発生しています。しかしこれは見方を変えればコントリビューションチャンスですね!?

2つのリポジトリ間での差分を見つけて、より新しい方の内容をもう一方に反映することは、SwiftのOSSプロジェクトに参加する一歩目としては比較的とっかかりやすいと思います。Foundationに興味があるあなた、まずはここから始めてみませんか?

おわりに

この記事を機に、Swift開発するだけでなく、Swift開発することに興味を持つ、取り組んでくれる人が増えれば幸いです。数少ない日本のSwiftコミッターからは以上です。


この記事ははてなエンジニア Advent Calendar 2017の9日目の記事です。

昨日8日目はid:aerealさんの大コンテナ時代を生きのこるためのJSON Schemaでした。

明日10日目はid:nanto_viさんの担当です!

*1:SE-0069: Mutability and Foundation Value Types

*2:後者においては実装の一部となるため、overlayとは呼ばないのですが。

『iOS 11 Programming』の執筆に参加しました&一般販売開始

技術書クラウドファンディングPEAKSのプロジェクトとして成立した『iOS 11 Programming』に、執筆陣の一人として参加させていただき、先日完成を迎えることができました。また本日からクラウドファンディング参加者に限らない一般販売が開始されました。

iOS 11 Programming

iOS 11 Programming

  • 著者:堤 修一,吉田 悠一,池田 翔,坂田 晃一,加藤 尋樹,川邉 雄介,岸川克己,所 友太,永野 哲久,加藤 寛人,
  • 発行日:2017年11月16日
  • 対応フォーマット:製本版,PDF
  • PEAKSで購入する

個人的には昨年の『WEB+DB PRESS Vol.96』の特集に続き、二度目の執筆活動となりました。この時は特集約30ページを一人で書き上げるのにかなり苦労した思い出があります。今回は一冊の技術書ですが、1・2章程度の粒度で分担して書くのは、単著を書くよりもかなりハードルが低く、また他の著者陣が書き上げていくのに刺激されて自分もやらなければ!という気持ちにさせてくれるので、とてもいいやり方だなぁと感じました。

これを読んだ皆さんも応募フォームから書いてみたい、読んでみたい、といったリクエストをどんどん投げつけてみましょう!

第4章を書きました

僕は「第4章 Swift 4の新機能とアップデート」を担当しました。Codable では実装の自動生成が大きなポイントの1つですが、仮にもSwiftコミッターなので、コンパイラーの自動生成部分のコードも読み込みながら挙動を把握し、丁寧に解説しようとしました。自動生成と手動実装を下手に混ぜると危ういといった注意点も書きたかったことの1つですね。

またSmart KeyPathsについては、基本的な使い方はそんなに困らないだろうという前提で、より掘り下げたクラス階層やジェネリクス的な視点、read-onlyかread-writeか、といった点に着目しています。

すでにSwift 4に移行済みの人も少なくないとは思いますが、これらの機能はSwift 3.2モードでも使用可能です。なのでSwift 4に移行前でもどんどん使っていって、皆で色んな知見を溜めていけるといいですね。

あわせて読みたい

どうぞお買い求めください 🙏

関西モバイルアプリ研究会 in 関東で発表しました #関モバ

普段は京都や大阪で開催されている関モバが東京に上陸した!ということで発表してきました。

UISearchBar / UISearchController は結構カスタマイズしにくかったり、iOS 10iOS 11で見た目が大きく変わり得たり、iOS 11で追加された UINavigationItem.searchController によるナビゲーションバーとの統合も実運用で困る箇所があったりと、皆さんどうですか?という話をしたかったのです。会場での結論としては、カスタマイズする必要があれば、これらを使うのを諦めて UITextField をそのまま使って自分でカスタマイズする方がいいですね、という話に落ち着いてよかったよかった 😇

他の発表内容はこちらからどうぞ 👇

未承諾広告

はてなではスマートフォンアプリエンジニアを絶賛募集中です!

Himotoki 3.1.0をリリースしました

WWDC会場のSan Jose McEnery Convention CenterからHimotoki 3.1.0をお届けします。

このリリースではパフォーマンス改善と、Xcode 9への対応(テストコード)が主になります。

Xcode 9で使用できるSwift 3.2 / Swift 4.0では、SE-0166により追加された Foundation.Decodable が Himotokiの Decodable とそのままでは衝突してしまうようになったため、今後は常に Himotoki.Decodable と記述することを推奨します。

WWDC 2017に参加してきます

iOSアプリ開発を始めてから8年目にして初めてWWDCに当選し、ただいまサンノゼにやってきています。

初のアメリカ、初の海外一人旅と不安も色々ありますが、この一週間を充実したものにしていきたいと思います。それでは楽しいWWDCウィークを!👋

Swiftのコミッターになりました(なっていました)

https://swift.org/contributing/#commit-access に記載があるように、SwiftのOSSプロジェクトでは、一定の基準を満たすことでコミット権を申請し、得ることができるようになっています。

遡って今年の1月に apple/swift-corelibs-foundation集中的に取り組んだ結果、Swiftのコミット権を得ました(もう3ヶ月前じゃん!)。

とは言ってもC++コンパイラーのコードが書けるわけではなく、標準ライブラリーやFoundationおよびそのOverlayなど、Swiftで書ける範囲での活動が主になりますが、Swiftの改善に少しでも貢献していきたいと思います。

いよいよ本日。try! Swiftカンファレンスで登壇します #tryswiftconf

おはようございます。id:ikesyoです。本日から3月4日までの3日間、東京・渋谷で開催されるtry! Swiftカンファレンスのトップバッターとして登壇します。

http://www.tryswiftconf.com/

はてなからはid:cockscombも登壇し、二人体制で臨んでいます!

developer.hatenastaff.com

今朝になってついに緊張してきましたが、とにかく滅多にないこの機会を楽しみたいと思います。では会場でお会いしましょう! 😄