iOSエンジニアのつぶやき

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

iOSアプリ開発

App Store からアプリの配信を停止する

本日はタイトルの通り、App Storeでのアプリ配信を停止する方法を紹介したいと思います やっていく とりあえず App Store Connect にログインして、指定のアプリを選択します。 価格および配信状況を選択します。 下の赤で囲んだ配信可否セクションで配信か…

【iOS】APNs証明書の更新

久しぶりにAPNs証明書の更新を行ったので、本日はそのメモでも残しておきます‍♀️ ちなみに、今回のプロジェクトではPush通知を送るためにApple Push Notification Service SSL(証明書)を使用していますが、基本的にはApple Push Notification Authentication…

【Fastlane】metadata のアップロードでこける

App Store Connect のメタデータをローカルで編集後、アップロードしようとすると下記のようなエラーが発生していました $ bundle exec fastlane metadata ... The provided entity includes an attribute with a value that has already been used - The ve…

【リジェクト】Guideline 5.3.2 - Legal - Gaming, Gambling, and Lotteries

いつものごとくアプリの申請を出していたら、久しぶりにリジェクトされてしまいました 既存機能でのリジェクトだったので、Apple の方が休暇前に本気でレビューしてくれたんでしょうね 、、 Guideline 5.3.2 - Legal - Gaming, Gambling, and Lotteries Your…

CollectionView でページスクロールを作ろう

みなさん、最近 CollectionView は使っていますでしょうか?CollectionView っレイアウトの方法がいっぱいあってどれを使うべきか結構迷いますよね〜‍♀️ 今回はそんな CollectionView を使って、ページをめくるようにスクロールすることのできる UI を作って…

はじめての iOS14 Widget

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

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

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

PHAuthorizationStatus の .limited とは?

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

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 …

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…

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 が暗黙的に行っていた処理がどのようになっているのかが分かり、ライブラ…

Static Library vs Dynamic Library

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

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 を生…

Carthage Error: fatal: unable to open "": No such file or directory 解消法

ライブラリを Check out と使用とコマンドを実行すると、下記のような Error が、、 $ carthage bootstrap A shell task (/usr/bin/env git clone --quiet "") failed with exit code 128: fatal: unable to open "": No such file or directory fatal: inde…

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

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

Xcode Error: Unable to install "" 解消法

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

iOSDC2020 の1日目振り返り

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

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

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

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

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

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

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

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

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

UIView の updateConstraints() について知る

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

異なる階層の 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 が本来…