株式会社はてなに入社しました
本年度もよろしくお願いします
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 } } }
これははてなエンジニアアドベントカレンダー2021 6日目の記事です。
昨日は id:mizdra の Babel をリファクタリングツールとして使う でした。
はてなエンジニアでのアドベントカレンダー、2021年も盛り上がっております!!!
自分はiOS、macOSにDark Modeが入った時から、多くの時間をDark Modeで過ごしている。
2021年ともなると、多くのアプリケーションやWebサイトで、Dark Mode対応が進んだ。
例えば、GitHubでは Day theme
と Night theme
の中にも複数のテーマが用意されていて、ユーザーの好みで選ぶことができる。
ところで、我々は親の顔以上に、エディタを見ている時間が多いのではないだろうか?
自分もXcodeと向き合う時間が、1日の中でも一番多くを占めているようにも感じる。
エディタアプリケーションでも、いくつかのテーマから好みのカラーリングに変更することができるものが多い。
Xcodeでは、Preferences > Themes
からいくつかの用意されたテーマを選択することだできる。
自分の場合は、Dark Modeが普及するよりも前から、エディタは黒色の背景をベースにするために、 Civic
や Dusk
、 Midnight
を使ってきていた。
とは言っても、万人全てが快適なテーマというものはなかなか存在しない。
デフォルトで用意されているテーマを使いながらも、自分の場合は以下のように感じていた。
Dark default
と Dark dimmed
の配色を気に入っているということを踏まえて、Xcodeのテーマを自作することにした。
基本は Midnight
をベースにしつつ、Civic
Dusk
に、GItHubのカラーリングを取り入れながら、自分が見やすいと感じる配色を調整した。
Source Editor | Console |
---|---|
ちなみに Polarnight
はスウェーデン語で「極夜」の意味だという。
常にDark Modeで過ごす自分に合うネーミングができた。
GUIから作成する場合は、Preferences画面の +
から作り始めることになる。
このファイルはデフォルトで ~/Library/Developer/Xcode/UserData/FontAndColorThemes/*.xccolortheme
に配置される。
GUIで調整した設定は、このファイルを同じパスに配置することで、他のマシンでも同期できるというわけだ。
Polarnight
はこのアドベントカレンダーのために改めて作ったテーマなので、まだまだ未成熟だろう。
使いながら改良しつつ、手に馴染ませていくことになる。
実は数年前にもXcode Themeを作っていたのだけど、マシンが移り変わっていく中で使用をやめ、どこかに無くしてしまった。
このテーマは大事に育てていこうと思っている。
ということで、みなさんも年末年始の休暇に自分だけのXcodeを作ってみてはどうだろうか?
明日の担当は id:Furutsuki です、明日もお楽しみに!
Twitterでも、社Slackでも度々愚痴を漏らしているのだけど、GitHub ActionsのYAMLフォーマットが統一されてなくて枕を濡らしている。
GitHub Action YAMLで、 on: pull_request はsnake_case だし、 jobs: runs-on: はkebab-case だし、ドキュメント https://t.co/IMDAwULnqx にはcamelCaseもあるし、ほんと勘弁してほしい
— Yutaro Muta (@yutailang0119) 2021年11月17日
GitHub Actions カテゴリーの記事一覧 - がんばってなんか書く にも書いている通り、自分はいくつかのGitHub Actionsを細々と作っている。
しかし、プロジェクト毎に、さらにはプロジェクト内でも統一ができていなった。
自分はこういった細かいことを気にしてしまう性分なので、重い腰を上げて統一することにした。
熟考の末、自分の管理するGitHub Actionsでは、 kebab-case に統一した。
理由はいくつかあるけど、最終的には自分が見た時の見やすさが一番優先された形だ。
これまでに利用してくれている方にはお手数おかけしますが、変更お願いします。 *1
ところで、actions/typescript-action をテンプレートとしてGitHub Actionsを作り始めると、 kebab-case の入力をテストできない問題が、かつて存在していた。
JavaScriptは得意ではないので後回しにしていたけれど、新たにテンプレートからGitHub Actionsを生成した時に、すでにあるプロジェクトとの差分を読んだことで解決方法に気づいた。
現在はテンプレートから新規作成すると、kebab-caseでもテストが実行できる。