iOSエンジニアのつぶやき

毎朝8:30に iOS 関連の技術について1つぶやいています。まれに釣りについてつぶやく可能性があります。

2020-10-01から1ヶ月間の記事一覧

Swift5.3 つまみ食い【where clauses on contextually generic declarations編】

今日から少しの間、開発作業が多くなりブログにまとまった時間が取れそうにないので、1日1Tips にもっとも良さそうな Swift5.3 の変更点を書いて行こうかと思います‍ where clauses on contextually generic declarations This proposal aims to lift the re…

CircleCI の config.yml のチェックはローカルで行おう

CircleCI の config.yml を修正する時など、ファイルのバリデーションなども行わずに Push してたことにより、構文に間違いがあった時など無駄な時間を費やしていたので、今回はそんな反省を活かしてローカルで config.yml のバリデーションを行う方法を紹介…

Swift(5.3) の Generic を学ぼう

今回は、Swift における Generic Programming について理解を含めようということで、Swift の公式ドキュメントを眺めがらメモした内容をまとめていきます。 docs.swift.org 目次 Why generics? Generic Functions Type Parameters Generic Type Type Constra…

Error packaging up the application の対処法

今回は、Firebase App Distribution を使った Staging アプリの配信で詰まっていた Error packaging up the application の対処法について簡単にまとめます。 起こっていたこと Staging アプリの Bundle ID の変更に伴い、証明書の発行や Firebase の設定な…

知識ゼロからの Kotlin Android アプリリリースへの軌跡 / Day21【Use LiveData to control button states編】

Android Kotlin Fundamentals: Use LiveData to control button states 学ぶこと database 内の既存の睡眠品質レコードを変更する方法 LiveData を使用してボタンの状態を追跡する方法 イベントに応じて snackbar を表示する方法 すること TrackMySleepQuali…

Error: Illegal instruction: 4 (in target '' from project '') の対処法

今回は、Xcode11.7 から Xcode12.0.1(GM) への移行中に発生した、タイトルのエラーで原因だったポイントと、改善方法を簡単にまとめます。なお、error: Illegal instruction: 4 は SwiftCompiler ではなく、OS によって出力されている Error のようですので…

iOS14 Widget Configuration まとめ2

今回は、前回の Widget Configuration まとめ Part1 に続き、後半の内容をまとめていきたいと思います。 developer.apple.com 目次 Widget Configuration UI のタイトルや内容背景の色などをカスタマイズする方法について Widget System Intelligence につい…

知識ゼロからの Kotlin Android アプリリリースへの軌跡 / Day20【Coroutines and Room編】

学ぶこと Android でスレッドがどのように機能するか Kotlin coroutines を使用して、database 操作をメインスレッドから移動する方法 フォーマットされたデータ TextView に表示する方法 すること TrackMySleepQuality アプリを拡張して、データベースとの…

iOS14 Widget Configuration まとめ1

今回は前回の iOS14 Widget の記事に続き、Widget Configuration に関して、下記の WWDC2020 セッションから得た知見をまとめていこうかと思います。また、1日で全ての内容をまとめる時間がなかったため、Part1・Part2 の二部構成でまとめていきたいと思いま…

はじめての iOS14 Widget

今回は、iOS14 の新機能として注目されている Widget について調べたことを簡単にまとめてみようかと思います。なお、本記事では Widget の実装について詳しくは記載していないので、また別の機会に書こうかと思います✍️ 目次 3つのポイント Widget の定義 …

Swiftコンパイラ超入門

今回は、Swiftから LLVM IR に変換する際に使用される Swift Compiler について簡単にまとめてみようかと思います。 ここら辺の低レイヤーの部分は今まではあまり触っていませんでしたが、知識として持っておくことで、Xcode が暗黙的に行っている作業が理解…

知識ゼロからの Kotlin Android アプリリリースへの軌跡 / Day19【Create a Room database編】

イントロダクション ほとんどのアプリには、ユーザがアプリを閉じた後でも保持する必要のあるデータがあります。たとえば、アプリには、プレイリスト、ゲームアイテムの在庫、経費と収入の記録、星座のカタログ、または刑事的な睡眠データが保持される場合が…

Apple自動更新サブスクリプションとは?

自動更新サブスクリプションとは、ユーザがAppのコンテンツやプレミアム機能を継続的に利用できるようにするもので、ユーザがキャンセルしない限り自動的に更新されます。 やること サブスクリプションを提供するにはアプリに StoreKit API を実装し、そのサ…

Compilation Mode とは?

Xcode で設定できる Compilation Mode はProject のビルド方法を、速度を最適化する必要があるか、それらの最適化をスキップする必要があるかを設定することができます。簡潔に言い換えると、変更されたファイルのみをコンパイルするか、全体をコンパイルす…

PHAuthorizationStatus の .limited とは?

Xcode12 の対応に伴って、新しく出た warnings を修正しようとしていると、PHAuthorizationStatus 周りで何やら Switch must be exhaustive という warning が発生していました。 全てのケース網羅してるはずだけどな〜と思い、PHAuthorizationStatus のソー…

知識ゼロからの Kotlin Android アプリリリースへの軌跡 / Day18【LiveData transformations編】

学ぶこと LiveDat で Transformations を使用する方法 すること ゲームを終了するタイマーを追加します。 Transformations.map() を使用して、ある LiveData を別の LiveData に変換します。 アプリの概要 今回は、前回のコードラボに続き、スコアの上に表示…

Xcode12.0(GM) で carthage build ができない

Xcode12(swift5.2.4 -> swift5.3) への以降に伴い、Carthage で build していたライブラリを swift5.3 で build 使用とすると失敗するようになってしまいました $ carthage build XCGLogger --no-use-binaries --platform iOS *** xcodebuild output can be …

知識ゼロからの Kotlin Android アプリリリースへの軌跡 / Day17【Data binding with ViewModel and LiveData編】

学ぶこと Data Binding Library の要素の使用方法 ViewModel をデータバインディングと統合する方法 LiveData をデータバインディングと統合する方法 listener bindings を使用して fragment 内のクリックリスナーを置き換える方法 データバインディング式に…

知識ゼロからの Kotlin Android アプリリリースへの軌跡 / Day16【LiveData and LiveData observers編】

学ぶこと LiveData オブジェクトが役立つ理由 ViewModel に保存されているデータに LiveData を追加する方法 MutableLiveData をいつどのように使用するか LiveData の変更を監視するための observer method を追加する方法 バッキングプロパティを使用して …

arm64?x86_64?

今回は、iOS・WatchOS デバイス CPU の ISA(Instruction Set Architecture) について簡単にまとめてみようかと思います。 ISA とは? ソフトウェアとハードウェアのインターフェースで、あるマイクロプロセッサ(CPU/MPU) を動作させるための命令語の体系です…

rbenv で任意のバージョンがない時の対処法

プロジェクトルートのローカル ruby のバージョンを 2.7.1 に更新しようと、rbenv 経由でインストールすると下記のような Error が、 $ rbenv install 2.7.1 ruby-build: definition not found: 2.7.1 See all available versions with `rbenv install --lis…

知識ゼロからの Kotlin Android アプリリリースへの軌跡 / Day15【ViewModel編】

学ぶこと 推奨される Android app architecture を使用方法 アプリで Lifecycle、ViewModel、および ViewModelFactory クラスを使用する方法。 device-configuration の変更を通じて UI データを保持する方法 factory method デザインパターンとは何か、およ…

NSDataDetector を使う際に少し気を付けるところ

今回は、NSDataDetector を使って特定の文字列を抽出する時に少しハマったポイントを紹介したいと思います。 ハマりポイント いつもの如く NSDataDetector を使用して、文字列の中に存在するリンクを下記のように取得していると、意図しない場所でリンクがき…

ABI Stability とは?

今回は、Swift5.0・Swift5.1 でそれぞれ対応された、ABI Stability と Module Stability について簡単にまとめてめてみたいと思います。 ABI Stability とは? ABI Stability は異なるバージョンのコンパイラから生成されたバイナリ同士をリンクできるように…

Attributes Inspector でカスタムプロパティを指定できるようにする

今回は、Storyboard や xib などの Interface Builder を使ってレイアウトを設計する際などに知っておくと少し便利な、@IBDesignable・@IBInspectable について簡単にまとめていこうかと思います。 @IBDesignable とは? Storyboard や xib などの Interface…

Bridging Header vs Module Map

今回は昨日の import と Link の記事に引き続き、Bridging Header や Module Map について簡単にまとめていきたいと思います。 Bridging Header Bridging Header は Objective-C で書かれたコードを Swift で利用する仕組みで、それぞれの Objective-C 製ラ…

ライブラリの import と link について理解する

今回は iOS 開発における Library および Framework のインポートおよび、リンクの仕組みについて学んだことをまとめていきたいと思います。 これらのことを学ぶことで、今まで Xcode が暗黙的に行っていた処理がどのようになっているのかが分かり、ライブラ…

知識ゼロからの Kotlin Android アプリリリースへの軌跡 / Day14【Complex lifecycle situations編】

学ぶこと ライフサイクルコールバックでアプリの一部を設定、開始、停止する方法 Android ライフサイクルライブラリを使用してライフサイクルオブザーバーを作成し、activity と fragment のライフサイクルを管理しやすくする方法 Android プロセスのシャッ…

Static Library vs Dynamic Library

今回は、Swift で使用されるライブラリの形式について調べたことをまとめていきたいと思います。 ライブラリの種類 今回は、ライブラリという言葉で Framework と Library をまとめていますが、両者には違いがあるのでご注意ください。それでは、それぞれの…

知識ゼロからの Kotlin Android アプリリリースへの軌跡 / Day13【Lifecycles and logging編】

学ぶこと Log 情報を Logcat(Android console または Android monitor と呼ばれることもあります)に出力する方法。 Activity と Fragment のライフサイクルの基本、および activity が状態間を移動する時に呼び出されるコールバック ライフサイクルコールバ…