iOS

Hatena Engineer Seminar #28 個人開発編 にて、『運動モチベーション継続のためのiOSアプリ開発』で登壇した

イベントURL hatena.connpass.com 会社の記事 developer.hatenastaff.com 発表者のスライドも載っている。 発表ネタ 以下の記事がベース。登壇用にストーリーを考えてまとめた。 tokizuoh.hatenablog.com 今回は、id:onk さんからエンジニアセミナーどう?と…

小粒な Tips の共有をしていきたい: 2023年にメモした iOS アプリ開発 Tips 3選

この記事は はてなエンジニア Advent Calendar 2023 の19日目の記事です。昨日は id:onk さんによる『「キャッシュは麻薬」という標語からの脱却 - id:onk のはてなブログ』でした。普段よく使っている Apollo Client では頻繁に更新するデータに関しては更…

Unit Testing Bundle TargetのHost ApplicationをNoneにしてアプリを起動せずにユニットテストを実行する

iOS

終わり。以下メモ。 SchemeのTestで遊んでいた昼下がり、新規ProjectでTestを実行したらシミュレーター2つ立ち上がってビックリした。Intel MacBookなのでとてつもなくファンが回った。stack overflowに同じ事例があって解決した。今日はTestの内容。 開発環…

Embedded Frameworkを利用したマルチモジュール化を試した

マルチモジュールマスターになろう。 開発環境 > xcodebuild -version Xcode 14.1 Build version 14B47b モチベーション マルチモジュールなアプリに対して日々追加開発を行っているが、自分でマルチモジュール化したわけではないのでマルチモジュールの理解…

Swift Chartsを使ったグラフ構築 走行距離編

iOS

iOS 16が公開された! Swift Charts触っていくぞ! 本記事では実装の細部には触れず、WWDC22のセッション内容に沿ってグラフを構築する。 開発環境 > xcodebuild -version Xcode 14.0 Build version 14A309 モチベーション 運動のモチベーションにムラがある…

HKWorkoutをGraphQLで扱うためにスキーマ設計をやった

モチベーション github.com 趣味開発のHealthKitを使ったiOSアプリから外部にワークアウトのデータを保存したい 将来的にiOS以外のクライアントでデータを取得したい 構築するAPIをGraphQL APIとして進める際にスキーマ定義が必要なので設計の手順をログとし…

HealthKitスターターキット

iOS

運動中の鉄分補給を怠らない。 開発環境 > xcodebuild -version Xcode 14.0 Build version 14A5228q Xcodeはbetaだが本記事の内容は現時点でbetaになっている内容に言及はない。 モチベーション HealthKitを利用する際にやることをメモ。一つ一つ見ると大し…

delegateパターンの実装で迷わないための考え方

iOS

今まで雰囲気で書いていたことの本質的な理解をやっていく! 開発環境 > xcodebuild -version Xcode 14.0 Build version 14A5228q Xcodeはbetaだが本記事の内容はiOS16未満のAPIを使用。 モチベーション delegateパターンを実装する際に迷いが生じたのでもう…

RenovateでMint管理のライブラリ更新を自動化する

iOS

モチベーション Renovate*1の管理対象にMint*2で管理しているライブラリを追加したい RenovateはCocoaPodsなどには対応しているがMintは直接対応していない*3 直接対応していないツールも正規表現書けば対応可能 正規表現書こう! コード realm/SwiftLint@0.…

Xcodeエラー対応: ld: symbol(s) not found for architecture x86_64

開発環境 > xcodebuild -version Xcode 13.3 Build version 13E113 エラー Undefined symbols for architecture x86_64: "SampleModule.SampleModule.init() -> SampleModule.SampleModule", referenced from: Test20220519.ViewController.viewDidLoad() ->…

HealthKitでcyclingの時速は直接取得できないぞ!

結論 HealthKit経由で取得したワークアウト(HKWorkout) から時速を取得するには、 totalDistance(HKQuantity) と duration(TimeInterval) を使って算出する必要がある。 let distance = workout.totalDistance!.kilometers() let averageSpeed = distance …

instantiateViewController(identifier:creator:)を試す

使ったことがないAPIはミニマムですぐ書く! 開発環境 > xcodebuild -version Xcode 13.3 Build version 13E113 モチベーション instantiateViewController(identifier:creator:) を使ったことがないので使ってみたい instantiateViewController(identifier:…

Combineのdebounceを試す

開発環境 > xcodebuild -version Xcode 13.3 Build version 13E113 モチベーション debounceを使ったことがないので使ってみたい debounce Publishes elements only after a specified time interval elapses between events. https://developer.apple.com/d…

Core Dataを試す

本記事は下記を参考にしています。 developer.apple.com 開発環境 > xcodebuild -version Xcode 13.1 Build version 13A1030d Core Data とは Persist or cache data on a single device, or sync data to multiple devices with CloudKit. https://develope…

SwiftUI x Combine 練習1

本記事は下記を参考にしています。 blog.studysapuri.jp 前々からやりたかったSwiftUIとCombineを組み合わせた実装をやってみる! 開発環境 > xcodebuild -version Xcode 13.1 Build version 13A1030d 作ったもの 2.5秒ごとに [1, 2, 3, 4, 5] をシャッフル…

「Combineをはじめよう」を読んだ

nextpublishing.jp 第2章 SubscribeとSubscription import Combine let subject = PassthroughSubject<String, Never>() final class Receiver { let subscription: AnyCancellable init () { subscription = subject .sink { value in print("received:", value) } } } let</string,>…

sink(receiveValue:)の戻り値を破棄せずに保持しておく必要がある理由を探す

本記事は下記を参考にしています。 nextpublishing.jp 結論 そういう仕様。 This method creates the subscriber and immediately requests an unlimited number of values, prior to returning the subscriber. The return value should be held, otherwise…

SwiftUIのTextEditorの実体がUIKitのUITextViewであることを確認する

本記事は以下記事の内容を参考にしています。 qiita.com 開発環境 # Xcode > xcodebuild -version Xcode 13.1 Build version 13A1030d # lldb (lldb) version lldb-1300.0.32.4 Swift version 5.5.1-dev はじめに tokizuoh.hatenablog.com (as TextEditor is…

SwiftUIの@FocusStateを試す

UITextViewの設定がTextEditorに反映されるソースを求めて*1インターネットの海をさまよっていたときに出会ったproperty wrapper。 使ったことが無かったので試す。 開発環境 > xcodebuild -version Xcode 13.1 Build version 13A1030d 記事中のスクリーンシ…

SwiftUIのTextEditorのテキストの余白はどう調整する?

結論 UITextView.appearance().textContainerInset = UIEdgeInsets(top: 10, left: 50, bottom: 40, right: 20) 開発環境 > xcodebuild -version Xcode 13.1 Build version 13A1030d 記事中のスクリーンショット: iPhone 13 Pro Max / iOS15.0 背景 前にUITe…

SwiftUIで複数行の入力を行いたい時はTextEditorを使おう

前にUITextViewの記事を書いた時にSwiftUIだとどうやるんだ?と思ったのでやる。 tokizuoh.hatenablog.com 開発環境 > xcodebuild -version Xcode 13.1 Build version 13A1030d 記事中のスクリーンショット: iPhone 13 Pro Max / iOS15.0 TextFieldのheight…

UITextViewのテキストの余白を0にする

この前カルボナーラを作ったらベチョベチョになって失敗した。料理は難しい。 開発環境 > xcodebuild -version Xcode 13.1 Build version 13A1030d 記事中のスクリーンショット: iPhone 13 Pro Max / iOS15.0 結論 デフォルト 余白0 import UIKit final clas…

FoundationのNumberFormatterを試す

nextpublishing.jp 上記を読んでいる時にNumberFormatterが出てきた。 使ったことがなかったので試す。 開発環境 > swift --version swift-driver version: 1.26.9 Apple Swift version 5.5.1 (swiftlang-1300.0.31.4 clang-1300.0.29.6) Target: x86_64-app…