iOSエンジニアのつぶやき

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

アプリ開発

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…

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

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

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 が状態間を移動する時に呼び出されるコールバック ライフサイクルコールバ…

Swift で文字列に含まれている URL を抽出しよう

今回は、Swift で文字列に含まれている URL を抽出する方法を簡単にまとめていこかと思います 結論 下記のように NSDataDetector というクラスを使用して、テキストからリンクを抽出することができます。 func getLinkTextList(text: String) -> [String] { …

Carthage Command リスト(v0.34.0)

ライブラリ依存管理ツールである Carthage のコマンド一覧をまとめていこうと思います。リストは v.0.34.0 のものなので、最新バージョンの方は公式の Repo を確認してみてください。 github.com コマンド一覧 コマンド 内容 archive Framework の zip を生…

iOS アプリのライフサイクルを理解しよう

今回は iOS アプリがどのようなライフサイクルで動いているのかを簡単にまとめて行きたいと思います。なんとなくボヤッとした感じでライフサイクルを認識していた人はぜひ目を通してみてください アプリの状態 状態 内容 Not running アプリは開始されていま…

Xcode Error: Unable to install "" 解消法

Xcode12 に対応するためにちょこちょことマイナーアップデートをしていた時に発生したエラーについて共有します。この Error は調べたところ色々なケースで発生しているので一概には言えませんが、Carthage のアップデート周りで発生した場合はこの解決方法…

知識ゼロからの Kotlin Android アプリリリースへの軌跡 / Day12【Start an external Activity編】

学ぶこと Bundle クラスを使用して、ある Fragment から別の Fragmen に引数を渡す方法 タイプセーフのために Safe Args Gradle プラグインを使用する方法 Share menu item をアプリに追加する方法 implicit intent とは何か、それを作成する方法 すること N…

知識ゼロからの Kotlin Android アプリリリースへの軌跡 / Day11【Define navigation paths編】

学ぶこと navigation graphs の使用方法 アプリで navigation path を定義する方法 Up button とは何か、および button を追加する方法 オプションメニューの作成方法 navigation drawer を作成する方法 すること navigation library と Navigation Editor …

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

学ぶこと Fragment を静的にアプリに追加する方法 すること Activity 内に Fragment を作成します アプリの概要 このレッスンを構成する3つのコードラボでは、AndroidTrivia というアプリで作業します。完成したアプリは、ユーザが Android コーディングに…

Firebase + BigQuery + Redash で分析基盤を作ろう

Firebase + BigQuery + Redash で分析基盤を作ろう 今回は、Firebsae Analytics で取得しているデータを Big Query + Redash を使って可視化できるようにする方法を簡単にまとめていきます。 手順 Firebase と BigQuery 連携 BigQuery と Redash 連携 Fireba…

知識ゼロからの Kotlin Android アプリリリースへの軌跡 / Day9【Codelabs 2-3編】

学ぶこと アプリで ConstraintLayout を使用して View を配置する方法 TextView の背景色を変更する方法 ベースライン制約を使用して View を text の位置に合わせる方法 View のグループから horizontal チェーンと vertical チェーンを作成する方法 するこ…

iOSDC2020 の1日目振り返り

今日も前夜の記事に続きiOSDC2020のセッションを聞けた範囲でおもしろかったもののまとめをしておこうと思います。 ※ よかったら毎日ブログ書いてるので、暇な時に見てください yamato8010.hatenablog.com 4年間運用されて表示速度が低下した詳細画面を改善…

知識ゼロからの Kotlin Android アプリリリースへの軌跡 / Day8【Codelabs 2-4編】

学ぶこと Data Binding ライブラリを使用して、findViewById() への非効率な呼び出しを排除する方法 XML からアプリデータに直接アクセスする方法 すること findViewById() の代わりにデータバインディングを使用し、レイアウト XML から直接データにアクセ…

iOSDC2020の HomeKit のセッションが面白かった

iOSDC2020 の HomeKit に関するセッションが面白かったので、セッションで聞いた内容含め簡単にまとめておこうかと思います。暇があったら何か作ってみたい HomeKit とは? iOS、iPadOS、macOS、watchOS などの Apple製品からデバイスを管理・コントロールで…

ReactorKit における Clean Architecture の立ち位置を考える

ReactorKit はリアクティブかつ一方向のデータフローをサポートするための Framework です。ReactorKit について詳しく知りたい場合は以前の記事を参照してください。 yamato8010.hatenablog.com yamato8010.hatenablog.com ReactorKit はユーザアクションか…

知識ゼロからの Kotlin Android アプリリリースへの軌跡 / Day7【Codelabs 2-2編】

前回に続き、今回は Codelabs2-2 をやっていきたいと思います‍ 学ぶこと EditText view を使用してユーザ入力を取得する方法 EditText view のテキストを使用して、TextView にテキストを設定する方法 View および ViewGroup の操作方法 View の可視性を変更…

RxSwift(RxCocoa) における Subject・Relay を理解する

今回は RxSwift(RxCocoa) でたびたび使用する Subject・Relay の違いや Observable との違いについて簡単にまとめようと思います。また、Trait などはまた別の記事で触れようかと思います。 Subject・Relay とは? これらのクラスはイベントの検知もできます…

知識ゼロからの Kotlin Android アプリリリースへの軌跡 / Day6【Codelabs 2-1編】

前回に続き今回は、Codelabs Kotlin の02.1 をやっていきたいと思います 学ぶこと view と ViewGroup の操作方法 LinearLayout を使用して、Activity の View を配置する方法 ScrollView を使用してスクロール可能なコンテンツを表示する方法 View の開始性…

Unknown class 〇〇 in Interface Builder file. の対処法

今回は、CocoaPods や Carthage などでインストールしたライブラリなどを Storyboard・xib などで使用する場合に時々発生する。[Storyboard] Unknown class 〇〇 in Interface Builder file. の対処法を残しておこうかと思います。 原因・解決法 今回のケー…

UIView の updateConstraints() について知る

今回は View の制約を更新する際などに登場する updateConstraints() について簡単にまとめていきます なんのメソッド? このメソッドはUIView のインスタンスメソッドで、View の制約を更新する際に呼び出します。基本的にはシステム側がレイアウトパフォー…

知識ゼロからの Kotlin Android アプリリリースへの軌跡 / Day5【Codelabs 1-5編】

学ぶこと Kotlin および Android の開発者向け情報とリソースの入手先 アプリのランチャーアイコンを変更する方法 Kotlin をしようして Android アプリ構築をしている時にヘルプを探す方法 やること 全てのレベルの Kotlin Android 開発者が利用できるリソー…

異なる階層の View の座標を取得しよう

今回も初学者向けに階層の異なる特定の View の座標を取得したい時に使用する convert() 関数の使い方を簡単に説明していきたいと思います。 実際に使ってみる‍ 下記のような階層の View を参考に convert() メソッドを使って見て座標を取得してみます。 緑…

Swift で上限・下限を設定した数値を取得しよう

今回は初学者向けに上限・下限値を設けた値の取得が便利にできる max・min 関数を紹介したいと思います。 max max() 関数は指定された引数の中で最も大きい値を返します。つまり、これ以上小さくしたくないという値を引数に含めることで下限を設定して値を取…

Content Hugging Priority と Content Compression Resistance Priority を理解する

今回は AutoLayout 関連で、なんとなく使っていて詳しく理解できていなかった Content Hugging Priority と Content Compression Resistance Priority を調べていきたいと思います。 Content hugging priority とは? この Priority(優先度) は View が本来…