過去にも採択してもらってトーク枠をもらったけど、隔年の周期っぽい。
- xcrun Essentials by Yutaro Muta | トーク | iOSDC Japan 2020 - fortee.jp
- weak vs unowned by Yutaro Muta | トーク | iOSDC Japan 2018 #iosdc - fortee.jp
提出したプロポーザル
よろしくお願いします。
追記
fortee.jp が無事採択された。
過去にも採択してもらってトーク枠をもらったけど、隔年の周期っぽい。
よろしくお願いします。
fortee.jp が無事採択された。
前の1年は仕事でのリポジトリも含めて1年間GitHubの草を生やしていたが、この1年はSSOを切った状態でも草を生やすことを目標にやってきた。
毎日意味のあるコードを書き続けられた訳ではないけど、毎日PCやスマホのGitHubアプリでコードを開いたり、利用しているライブラリのリリースノートを読んだりは、有意義だったと思う。
また1年やっていきたい。
感動の瞬間です (左は社のSSOを切った状態) pic.twitter.com/8d8m4Jo9Mn
— Yutaro Muta (@yutailang0119) 2021年4月17日
Xcode、Apple Platform、Swift 、そしてそれらのアップデートには相互に関係がある。
ここでのカテゴライズはオーバーラップがあるものとして捉えてもらいたい。
基本的に、Apple Platfromアプリケーションを開発する上で、Xcodeのバージョンには大きな影響を受ける。
Xcodeに同梱されるSwift、各種SDKを使って、コンパイルするからだ。
全体を通して、まずは Xcode Release Notes に目を通すとよいだろう。
ここにはSwift、SDK、Xcode自体のアップデートについて記載される。
Xcode Betaについても更新があり、解決した問題、既知の問題、それに対するworkaroundも掲載されている。
Xcode Release Notesは初手としてはいい反面、各Frameworkのアップデートは省略されている。
開発におけるXcodeの影響は支配的だが、とりわけApple Platformのアップデートとの関係は深い。
API diff では、Xcodeのバージョン間で差分を確認できる。
普段の開発でもドキュメントを確認する場合に参照するので、扱いには慣れているだろう。
ただし、新しいFrameworkやメソッド (それ以外に古くから存在するものであろうと) No overview available
も多いので注意されたい。
特にWWDCの期間になるが、Tech Talks の動画も貴重な資料だ。
WWDC以外でも動画がアップロードされることもある。
しかし、日頃のアップデートを追うという意味では、ここに辿り着くことは少ない。
サポートするPlatformバージョンが追いついた時に、改めて見直すことはよくある。
次にSwift言語としてのアップデートを見る。
Swiftや多くのツール群は、Open Source Projectとして開発されていて、Apple Platformとは別サイクルでアップデートされている。
しかし、現実はXcodeのアップデート (= Apple Platformのリリース) に合わせて、Swiftのリリースも行われている。
Swift本体。
CHANGELOGに、バージョン毎のアップデートがまとまっていてわかりやすい。
Swift Package Manager。
Swiftのリリースに合わせて、リリースされる。
CHANGELOGに、バージョン毎のアップデートがまとまっていてわかりやすい。
Swiftのリリースに合わせてブログが公開され、リリースに含まれるプロポーザルについて紹介される。
e.g. https://www.swift.org/blog/swift-5-5-released/
それ以外にも、PackageのOpen Source化などが周知されることがある。
読みやすい内容になっているので、おすすめ。
リリースに合わせたアップデートよりも、進化のキャッチアップ面が大きいが、以下も参照されたい。
Swift/Swift Package Manager/それ以外にもSwift に関わる進化について、リリース前からキャッチアップしていくためにはここから。
それだけでなく、swiftやswift-package-managerのCHANGELOGの理解を深めたい時に、立ち戻ってproposalを眺めることもよくある。
Acceptされるまでは大胆に変更されることも多々あるので、その点には注意されたい。
apple/swift-evolutionに投稿されたproposalやそれの元となる議論が行われている。
ちなみにSwiftのリリースプロセスについても公開される。 (≒Apple Platformのリリース時期も予測できる)
e.g. Swift 5.6 Release Process - Announcements - Swift Forums
id:yutailang0119 の通り、2022年1月19日に誕生日を迎えました。
二十代最後だけど、カウントダウンが始まった。
仕事の昼会で「誕生日の歌をオンラインで歌ってもらう実績」を解除しました。
2018年2月に株式会社はてなに入社して、早いもので4年目が終わろうとしています。
世間も同じだと思うけれど、コロナ禍で生活は変わっています。
今のところまだまだやりたいことがあるので、やっていくつもりです。
最近の暮らしぶりはデベロッパーブログに書いたので、ご覧ください。
相変わらずプログラミングに関しては仕事と私生活の曖昧な部分もあって、私生活で作ったライブラリを仕事で使ったり、アプリを作ったりしています。
アラサーになると、話題は健康とか体のことになりがち。
去年9月の楽天セールで、鉄棒を買いました。
懸垂機ではなく "鉄棒"
幸い部屋の天井が高いので高さの問題はクリアしたが、折り畳んでも部屋の中では邪魔である...
日々懸垂しています。
pixe.la
元々口内には課題があって、つい先日2022/01/17 (月) に歯科矯正を始めました。
子供の頃にも矯正器具を入れていたことがあったので、痛みのトラウマがあったけれど、今のところは軽い頭痛くらい。
動いているか心配になるので、もう少し痛みがわかりやすくてもいいかなと考えられるくらい。
12月の深夜に突然思い立ってヒゲ脱毛について調べて、6回コースを始めました。
元々ヒゲが濃い方ではないけど、ヒゲを剃る時の手間と肌荒れが気になっていた。
まだ1回しか受けていないのでなんともだけれど、受けた直後は快適だったので、回数をこなしたらいいのかもしれないです。
イメージよりは安くできるので、とりあえずチャレンジをおすすめします。
いつものあれです。
ご支援お待ちしております。
CGImagePropertyOrientation -> UIImage.Orientation に変換するコードを、ドキュメントを基に以下のように実装した。
extension UIImage.Orientation { init(_ cgOrientation: CGImagePropertyOrientation) { switch cgOrientation { case .up: self = .up case .upMirrored: self = .upMirrored case .down: self = .down case .downMirrored: self = .downMirrored case .left: self = .left case .leftMirrored: self = .leftMirrored case .right: self = .right case .rightMirrored: self = .rightMirrored } } }
コンパイラはエラーも警告も出さない。
CGImagePropertyOrientation
には @frozen
が指定されており、仕様上 @unknown default
も不要だ。
_人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人_ > Fatal error: unexpected enum case 'CGImagePropertyOrientation(rawValue: 0)' <  ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄
CGImagePropertyOrientation
Xcode 13.2.1 (13C100) における CGImagePropertyOrientation
/* Possible int values for kCGImagePropertyTIFFOrientation */ @frozen public enum CGImagePropertyOrientation : UInt32 { case up = 1 // 0th row at top, 0th column on left - default orientation case upMirrored = 2 // 0th row at top, 0th column on right - horizontal flip case down = 3 // 0th row at bottom, 0th column on right - 180 deg rotation case downMirrored = 4 // 0th row at bottom, 0th column on left - vertical flip case leftMirrored = 5 // 0th row on left, 0th column at top case right = 6 // 0th row on right, 0th column at top - 90 deg CW case rightMirrored = 7 // 0th row on right, 0th column on bottom case left = 8 // 0th row on left, 0th column at bottom - 90 deg CCW }
CGImagePropertyOrientation
の要素は固定になっているはずだが、rawValue UInt32
から変換される経路によって Fatal error が発生しているようだ。
CGImagePropertyOrientation
は 1 ~ 8 の範囲を指定することを想定した設計になっているが、カメラアプリによっては今回の "0" のように、範囲外の値を指定してる可能性がある。
仕方ないので、回避策として default
を埋めておくことにする。
変更しても、コンパイラからエラーと警告は出ない。
extension UIImage.Orientation { init(_ cgOrientation: CGImagePropertyOrientation) { switch cgOrientation { case .up: self = .up case .upMirrored: self = .upMirrored case .down: self = .down case .downMirrored: self = .downMirrored case .left: self = .left case .leftMirrored: self = .leftMirrored case .right: self = .right case .rightMirrored: self = .rightMirrored default: self = .up } } }
Swift の enum だからといって、網羅性に100%の安心ができるかは、ケースによりますね。
みなさまもお気をつけください。
それでは、よいお年を 🐮 🔜 🐯.
UIImage.Orientation
-> CGImagePropertyOrientation
の変換はこう
extension CGImagePropertyOrientation { init(_ uiOrientation: UIImage.Orientation) { switch uiOrientation { case .up: self = .up case .upMirrored: self = .upMirrored case .down: self = .down case .downMirrored: self = .downMirrored case .left: self = .left case .leftMirrored: self = .leftMirrored case .right: self = .right case .rightMirrored: self = .rightMirrored @unknown default: self = .up } } }