Swift

SwiftUI.ViewとUIHostingControllerの初期化順序の調整

UIHostingControllerを使ってSwiftUI.Viewを表示する時に、Viewの引数に渡すクロージャーの中でViewControllerを使いたいことが稀によくある(本当に?)。 素直に考えるとこうなる。 // 順序的にvcを使えない let view = FooView(onTap: { // vcで何かした…

SwiftOnTap: SwiftUIの用例集付きAPIドキュメント

SwiftUIを使い始めて、フレームワークが提供する既存のViewに何があって、どういう表示になるのかがまだピンとこない。そんな状況の手助けになるのがSwiftOnTapというサイトです。 swiftontap.com 各ViewやModifierなどの説明にサンプルコードとその実行結果…

NimbleをSwiftWasmに対応させてみた

SwiftWasmとは、SwiftをWebAssemblyにコンパイルしてブラウザやその他WebAssemblyランタイムで動作するようにしようという野心的なプロジェクトです。 ちなみにSwiftWasmには id:kateinoigaku さんがco-maintainerとして多大な貢献をされています。 fortee.j…

現代ではSwiftの条件コンパイル用のフラグ定義にはOTHER_SWIFT_FLAGSではなくSWIFT_ACTIVE_COMPILATION_CONDITIONSを使う

タイトルがすべてです。意外と忘れがちなので。 developer.apple.com Active Compilation Conditions is a new build setting for passing conditional compilation flags to the Swift compiler. Each element of the value of this setting passes to swif…

uber/mockoloのclassモック生成のバグを修正した

uber/mockoloとは Uberが開発するSwift用のモック自動生成ツールで、ここ1〜2年で採用が増えていそうな雰囲気 2019年のSwiftモック事情 - いけだや技術ノート でも紹介しました logmi.jp というものです。 mockoloはv1.1.3からprotocolだけでなくclassのモッ…

URLのパスの分割方法による結果の違い

let url = URL(string: "https://example.com/foo/bar")! url.path // "/foo/bar" url.path.split(separator: "/") // ["foo", "bar"] url.path.split(separator: "/", omittingEmptySubsequences: false) // ["", "foo", "bar"] url.pathComponents // ["/"…

GitHub ActionsのXcode 10.3ではSwiftPMのビルドがエラーになる

GitHub ActionsではmacOSも実行環境としてサポートされており、現在のOS指定はmacos-latest/macos-10.15の1つのみです。以前はmacos-10.14もサポートされていたのですが少し前に非推奨となり削除されてしまいました。 その際に使用できるXcodeのバージョンも…

Swift 5.2では関数・メソッドの最後の引数がデフォルト引数の場合、その1つ前のクロージャの引数をtrailing closureとして呼べるようになった

タイトルがほぼ全てです。 func foo(_ closure: () -> Void, defaultArg: Int = 0) { closure() } foo { print("foo") } このコードはSwift 5.2では動作しますが、Swift 5.1以前ではコンパイルエラーになります。 Nimbleに挙がったissueでそのことに気付きま…

Swift 5.2

iOS 13.4とXcode 11.4と共にSwift 5.2がリリースされましたね。 Swift.org - Swift 5.2 Released! SE-0249 Key Path Expressions as Functions 関数・クロージャが要求される箇所でKeyPathリテラルを書くとKeyPath型ではなく関数・クロージャを返してくれる…

2019年のSwiftモック事情

こんにちは、id:ikesyoです。これは はてなエンジニア Advent Calendar 2019 17日目のエントリーです。 昨日12月16日(月)に行われた 年末だよ Android/iOS Test Night - 2019 にて、『2019年のSwiftモック事情』という発表をしました。 Swiftでテストのた…

CI/CD Test Night #4で、Swift製ライブラリのLinux対応 with Travis CIについて発表しました

Test Nightに初めて参加してきました(iOSやCI/CDも含めて)。普段は概ねiOSやSwift関係の勉強会・カンファレンスへの参加がメインなので、異なる軸での勉強会の参加するのは新鮮で楽しかったです(けど結構スマホアプリ絡みやBitriseの話も出ていた)。 発…

Xcode 11で導入されるxcframeworkのディレクトリ構造

WWDC19でお目見えしたXcode 11ですが、ライブラリ・フレームワークの配布形態として .xcframework という新しいフォーマットが導入されています。 https://developer.apple.com/documentation/xcode_release_notes/xcode_11_beta_release_notes/#3318305 XCF…

LinuxのSwift 5.1で、NSNumberなどがComparableになってDarwinとソース互換がなくなる事例

というバグレポートを起票しました。 https://bugs.swift.org/browse/SR-10798 原因となったswift-corelibs-foundationのPRがこちらです。 Parity: NSSortDescriptor & _CFSwiftArrayReplaceValues by millenomi · Pull Request #2234 · apple/swift-corelib…

RawValueがIntのenumを何かのインデックスとして使いたい時はhashValueじゃなくてrawValueを使いましょう

そうそう遭遇はしないと思いつつ、Swift 4.2になるとハッシュシードのランダム化により問題が起き得ます。 RawValueがIntのenumであっても、rawValueがそのままhashValueではなくなる Swift 4.1までは、rawValue == hashValueという挙動だった(実装依存) …

Swift 4.2のBatch Modeについて

https://swift.org/blog/swift-4-2-released/ でSupport for batch mode compilation resulting in faster build timesと言及されているものについて。 この件はWWDC 2018のセッションでも紹介がありました: https://developer.apple.com/videos/play/wwdc20…

Swift Package Managerの略称はSwiftPMが推奨

SPMという表記をたまに見かけるけど、Swiftであることがよく分からないですよね。 https://twitter.com/aciidb0mb3r/status/1007293445168250880 (@aciidb0mb3rさんはAppleの人で、Swift Package Managerの主要開発者の一人です)

NimbleでSwiftコンパイラーのバグ(リグレッション)に遭遇した話

Xcode 10 beta 1(Swift 4.2)でNimbleのthrowAssertion()/raiseException()マッチャーなどを使うとランタイムクラッシュする事象が発生して、その成り行きが面白かったのでここに記します。 ここまで 現象: Objective-Cで定義するメソッドで、引数のクロー…

swift-llvmがLLVM 6.0に追従した模様

これでSwiftのWebAssembly対応もちょっと捗るのかもしれない? swift-llvmがLLVM 6.0に追従したっぽい? https://t.co/SlBrAqYSFE— いけしょー@本書きました (@ikesyo) 2018年3月10日 元々stable-nextっていうブランチで追従してたのをstableブランチにmerge…

MintでSwiftPM製のCLIツールを管理する

Swift界隈では、Swift Package Manager (SwiftPM) で作られたCLIツールが増えつつあって、それのインストールやバージョン管理をどうしようかという問題がある。一部のツールはHomebrewやCocoaPodsでの配布もしているけど、全ては賄えない。となると各ツール…

SwiftでCLIツールを書くためのArgument Parser

SwiftでCLIツールを書く時のArgument Parser(引数やサブコマンドをいい感じに解釈してくれるやつ)の選択肢を書き連ねておきます。これら以外の良い選択肢をご存知の方はぜひ教えてください Commandant Carthageで使われています(というかCarthageの開発…

Trailing Closureを禁止する

SwiftLint 0.22で追加された multiple_closures_with_trailing_closure というルールをご存知でしょうか。これは次のような複数のクロージャを引数に取るAPIを使用する時に、最後の引数のクロージャをTrailing Closureとして渡すことを警告するというルール…

SwiftのSDK overlayとswift-corelibs-foundation

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

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

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

Himotoki 3.1.0をリリースしました

WWDC会場のSan Jose McEnery Convention CenterからHimotoki 3.1.0をお届けします。 このリリースではパフォーマンス改善と、Xcode 9への対応(テストコード)が主になります。 Fix perfomance issue caused by Dictionary’s swift_dynamicCast by yudoufu ·…

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

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

Himotoki 1.5.0をリリースしました

このブログでは昨年末の振り返りエントリー位でしか触れていませんでしたが、SwiftでJSONのデコードを簡単かつ型安全に行うことができるHimotokiというライブラリーを昨年の5月から開発しています。 github.com ikesyo.hatenablog.com 先々週にはなりますが…

Carthage 0.13/0.14をリリースしていました

前回のエントリーに引き続き、Carthage 0.13 および 0.14をリリースしていました。どちらもバグFixメインのリリースですが、0.13ではcarthage other-commandとすると$PATHに存在するcarthage-other-commandを実行するという、いわゆるサブコマンドの機構を実…

Carthage 0.12をリリースしました

昨年のエントリーに書いたように、Carthageのコミッターをしているid:ikesyoです。もう3日前になりますが、最新バージョンの 0.12: All Your Frameworks Are Belong To Usがリリースされました! 今回のリリースで大きなトピックだと個人的に思う以下の3つを…

関西モバイルアプリ研究会 #5 でCarthageの話をしてきました #関モバ

毎月恒例の関西モバイルアプリ研究会 #5で今回も発表させていただきました。会場とに軽食を提供してくださるはてなさんに多謝 今回の資料はこちら。 Carthageについて知りたいn個のこと from Syo Ikeda CocoaPodsと並ぶ依存性管理ツールとして普及が進みつ…

関西モバイルアプリ研究会 #4 でLTしてきました #関モバ

第1回から参加させていただいている関西モバイルアプリ研究会 #4でLTをしてきました。なんだかんだでGoogle I/O ・ WWDC 特別会だった#3以外の3回全てで発表できていて嬉しい限りです! 以下が発表スライドです。 iOSでのFramework導入のおさらい #関モバ fr…