iOS関連のことを調べてみた2021年10月23日

iOS関連のことを調べてみた2021年10月23日
目次

アプリエンジニアが達人に学ぶDB設計〜徹底指南書〜から学んだ話

# TL;DR
– アプリケーションエンジニアもバックエンドの知識はあった方が面白いよ。
– いつどんな仕事が舞い込んでくるか分からないから守備範囲決めずに自己研鑽しようね。
– アンチパターンは実例としてわかりやすい。
– ストレージは、冗長設計しようね。
– 良書でしたので、是非いろんな方に読んで欲しい。(ステマじゃないよ)

# 簡単な自己紹介
iOS, Androidのモバイル開発を主に行なってるエンジニア3年目です。
今所属しているチームのリソースの関係でアプリに拘らずバックエンドの開発業務も舞い込んでくるのでそっちの知識も最近は積極的に取り入れています。

今回DBに関する書籍を読んだので、アプリエンジニアが知っておくメリットみたいな視点もなるべく取り入れながら、簡単な書評を中心に記事を書いていこうと思います。

## 書くこと
参考書の書評
アプリケーションエンジニアがこの本を読んで学べること
*ばちばちのインフラ屋さんはちょっと物足りない記事だと思います。

## 書かないこと
業務レベルでDBを設計・運用する上での知識技能
*本書では論理設計に関してはかなり実用的

元記事を表示

【Swift】UINavigationControllerのカスタマイズ設定

#NavigationBarの表示・非表示

“`swift
// 非表示にする。
navigationController?.navigationBar.isHidden = true // false 表示
“`

“`swift
// viewをタップで表示・非表示を切り替える。
navigationController?.hidesBarsOnTap = true
“`

“`swift
// viewをスワイプで非表示にする。 ※もう一度スワイプしても非表示のまま。
navigationController?.hidesBarsOnSwipe = true
“`

“`swift
// デバイスを横向きに回転させると非表示になる。
navigationController?.hidesBarsWhenVerticallyCompact = true
“`

“`swift
// キーボードを起動で非表示になる。 ※キーボードを閉じても非表示のまま。
navigationController?.hidesBarsWhenKeyboardAppears = tr

元記事を表示

[SwiftUI] どうせなら、かっこよく、Glassmorphism

#はじめに
SwiftUIはカスタマイズも簡単なので、色々なUIデザインを試してみることができます。そこで今回はGlassmorphism風のUI作りを紹介していきます。

#Glassmorphismって?
簡単にいうと、すりガラス風のUIのことです。こちらのサイトはCSS用のものですが、もていただければ大体のイメージはつかんでもらえるかと思います。

Glassmorphism CSS Generator
![Glass.ping.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/713689/d8ff6c64-9ff8-d183-ad54-20184fb19947.png)

#できたもの
まずは完成品をご覧ください。プロのデザイナー!というわけではないのでちょっと不十分なところもありますが、SwiftUIだけでとりあえずこんなものができます。
![名称未設定のデザイン-18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com

元記事を表示

Xcode No such module ‘ライブラリ名’エラーの処方箋

##今回発生したエラー
xcodeをよく使っている人なら遭遇したことがあると思います。
自分も重いリポジトリをクローンした際の読み込み時によく出会します。
普段ならCleanすれば解決できることが多いですが、今回のはできなく他の記事にも書かれていなかったのでケーススタディとして共有します。
![スクリーンショット 2021-10-21 16.18.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552896/6fae9d13-d6cd-27d2-0448-e3681a9c7db4.png)
なんとも簡単そうなエラーメッセージですが原因はいくつかあり、それら一つずつ試していくしかありません。

##対処法
これはその名の通りモジュールの読み込みが正常に行かなかった時に発生します。
対処法は他の記事でも同じく記載がありますがいくつかあります。

**①CleanBuildFolder(Productタブ > CleanBuildFolder)**

**②DrivedDataの削除(自分はこれで解決し

元記事を表示

[iOS]viewDidLoad、viewWillAppear, viewDidLayoutSubviewsでview.frame.sizeの値が実際と異なる値が返される。

上記時点でレイアウトが終了していないため実際の値と異なる値が返される場合がある。
`self.view.setNeedsLayout()`と`self.view.layoutIfNeeded()`を呼ぶとレイアウトが直ちに行われるので、以降は正しい値が取れるようになるはずである。

“`swift:ViewController.swift
override func viewDidLoad() {
super.viewDidLoad()

self.view.setNeedsLayout()
self.view.layoutIfNeeded()
let size = self.view.frame.size//正しい値が取れるはず
}

“`

参考 [How to get correct size or bounds of UIView in Swift 2.0?](https://stackoverflow.com/questions/38452979/how-to-get-cor

元記事を表示

本当にリリースできるの?FlutterでQiitaアプリを作った話。

![poster_new.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678085/27dcb69c-c257-7add-27aa-0a723fe70ada.png)

## はじめに
昨年の春先からFlutterを触り始めて、状態管理シリーズの記事や「Dart vs Swift」の翻訳を出してきたが、いつかFlutterで自作アプリを出したいとの思いが強くなり、今回のQiitaアプリに至りました。

####ダウンロード先
▼iOS
https://apps.apple.com/jp/app/open-qiita/id1590830106

▼Android
https://play.google.com/store/apps/details?id=com.jamestong.open_qiita

## Open Qiitaの技術要素
– 状態管理
グローバル状態、例えば記事本文の文字サイズ変更、テーマカラーの変更は**BLoC** + **Equatable**;
特定イベントの状態あるいは通知

元記事を表示

BuildOptions.SymlinkLibraries

[シンボリックリンク](https://e-words.jp/w/%E3%82%B7%E3%83%B3%E3%83%9C%E3%83%AA%E3%83%83%E3%82%AF%E3%83%AA%E3%83%B3%E3%82%AF.html)

“`
シンボリックリンクとは、
オペレーティングシステム(OS)のファイルシステムの機能の一つで、
特定のファイルやディレクトリを指し示す別のファイルを作成し、
それを通じて本体を参照できるようにする仕組み
“`

UnityからiOSビルド時にBuildOptionsの指定で簡単に設定できる

https://docs.unity3d.com/ja/current/ScriptReference/BuildOptions.SymlinkLibraries.html

元記事を表示

RealityKitのサンプルコード集「RealityKit-Sampler」

RealityKitのサンプル集「RealityKit-Sampler」をオープンソースで公開しました。
RealityKitはAppleの最新のARフレームワークです。

[RealityKit-Sampler](https://github.com/john-rocky/RealityKit-Sampler)
[スクリーンショット 2021-06-22 6 25 04](https://github.com/john-rocky/RealityKit-Sampler)

ソースコードは GitHub に置いてあるので、ご自由にご活用ください。

https://github.com/john-rocky/RealityKit-Sampler

シンプルにRealityKitを操作する公式サンプルがあまりないの

元記事を表示

【iOS15】 Safari拡張をリリースしてみての感想

#はじめに
iOS15からMacと同じようにSafari拡張機能が使えるようになりました。WWDC2021でも取り上げられ、Xcode13にも専用のプロジェクトテンプレートが用意されるなど、結構気合の入っている印象です。とはいっても、まだまだ日本語の情報が少なかったので今回はアプリを作ってみた立場から、開発に役立ちそうなことをまとめていきたいと思います。

#つくったもの

https://apps.apple.com/jp/app/禁欲フィルタ-継続できるアプリ/id1589931500

作ったものはこちらです。性的に過激なサイトや単語をブロックしてくれるアプリになっています。実際の画面は以下の画像のようになっています。この画像では配慮のため英語を対象としていますが、もちろん日本語にも対応しています。

![過激な単語.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/713689/6ad4e2f7-8646-19a9-be7d-ecaf03d8ce03.jpeg)

スマホで画面キャプチャをする際など

元記事を表示

【Swift】入力された郵便番号と都道府県が正しい情報か確認する

iOSアプリなどで住所を入力してもらう際に、郵便番号と都道府県が一致しているか確認する際のコード。

コードはあまり美しくありませんがご了承ください。

CLGeocoderを使って郵便番号から都道府県を出力させ、入力値との相違を確かめるのですが、CLGeocoderから出力される都道府県名はローマ字。

そこでCLGeocoderで出力されるローマ字とユーザーが入力する日本語の都道府県名を一致させるための辞書を作る。

“`swift
let RomeKanjiPrefecture = [“北海道”: “Hokkaido”,”青森県”: “Aomori”,”岩手県”: “Iwate”,”宮城県”: “Miyagi”,
“秋田県”: “Akita”,”山形県”: “Yamagata”,”福島県”: “Fukushima”,”茨城県”: “Ibaraki”,
“栃木県”: “Tochigi”,”群馬県”: “Gunma”,”埼玉県”: “Saitama”,”千葉県”: “Chiba”,
“東京都”: “Tokyo”,”神奈川県”: “Kanagawa”,”新潟県”: “Niigata”

元記事を表示

【Swift】郵便番号が実在するかしないか確認するバリデーション

Swiftで郵便番号が実在するかしないか確認するバリデーション

他のAPIを使う必要がないのでやりやすいです。

“`swift
//郵便番号のバリデーション
CLGeocoder().geocodeAddressString(“0000000”, completionHandler: {(placemarks, error) -> Void in
//存在しない郵便番号
if((error) != nil){
print(“存在しない郵便番号です”)
}
else{
//入力がすべて正しい
print(“成功”)
}
})

“`

CLGeocoderを使ってエラーが出るか出ないかで判別。

入力する郵便番号はハイフン無しで文字列型なので注意が必要。

元記事を表示

シミュレータの動画を撮影したい時のメモ

何度も忘れて調べてしまうのでメモ。

– Simulatorを起動
– `xcrun simctl io booted recordVideo video_test.mov`を実行
– Simulatorを操作
– ctrl + cで終了

元記事を表示

最初のアプリを作る方法

iOSアプリを作ったことがない方が、とりあえず最初のアプリを作る方法です。
画像を表示するシンプルなアプリを作ります。

#1、Macをひらく
iOSアプリを作るには、iMacもしくはMacbookが必要です。
![macbookIMGL4495_TP_V.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235259/e63b8cd2-0aad-2fd9-5671-c669cf27c8d4.jpeg)

#2、Xcodeをダウンロード
App Storeのアプリを開き、「Xcode」で検索して、Xcodeをダウンロードします。
![スクリーンショット 2021-10-19 1.58.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235259/01b0767a-7f5d-0805-de88-34546f344e69.png)

![スクリーンショット 2021-10-19 1.57.22.png](https://q

元記事を表示

React Native + Expoで(iOS,Android)開発環境を構築する

弊社のサービス[Hapitas](https://apps.apple.com/jp/app/%E3%83%8F%E3%83%94%E3%82%BF%E3%82%B9-hapitas-w%E3%81%A7%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88%E3%81%8C%E8%B2%AF%E3%81%BE%E3%82%8B/id1475444626)のアプリ版はReact Nativeを用いて開発されています。インターンとして開発に携わっているのですがで正直環境がどのように動いているのか全く理解していなかったので、勉強としてまずは開発環境を構築したので備忘録としてまとめます。30分ほどあれば作れます。

# React Nativetとは
React Native(リアクト・ネイテイヴ)は、Facebookが作成したオープンソースのモバイルアプリケーションフレームワークです。開発者がネイティブプラットフォーム機能とともにReactを使用できるようにすることで、Android、iOSアプリケーションを開発するために使用されています。Web開発で用いられるReac

元記事を表示

Xcode 実機にアプリアイコンが反映されない時

## 環境
– MacOS Big Sur 11.6
– Xcode 13.0
– Swift 5.5

### 状況
Simulator, Xcode 内の Scheme ではアイコン画像は表示されているが実機だけ反映されない。
試せることは全部試した。

### 解決
アイコン画像が反映されていない開発アプリを削除せずに、iPhone 再起動。

元記事を表示

Swift Package Managerでライブラリを自作して使うまでの最初の一歩

## 今回作るもの
![スクリーンショット 2021-10-16 11.07.25.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517666/c3f8e30c-a338-fb60-5fb2-27199c44c19e.jpeg)
今回はSwift Package Manager(以下SPM)の作成にチャレンジしてみましたので、作成方法から使用方法を体験的に学べるようご紹介したいと思います。

そもそもSPMってなに?と言う方はこちらを一読される事をおすすめします!

https://swift.org/package-manager/

https://zenn.dev/jollyjoester/articles/08b42792553169

https://qiita.com/hironytic/items/09a4c16857b409c17d2c

記事見る時間が無い。
と言う方には”SPMは、Swiftコードの配布を管理するためのツールで、手軽に自作したライブラリを公開したり、使用したりできるA

元記事を表示

【Swift】読みやすいコードを書くためのコーディングルール(基本編)

## 概要
– 弊社のiOSチームではコーディング規則がある程度細かく定められている
– コードの可読性を上げ、コーディング品質を属人化させない目的
– 転職当時「どの順序で宣言するのがいいのかわからない…!」のような悩みが大きかったので、参考としてまとめます

## プロパティ名
– プロパティは Lower Camel Case (最初は小文字、語頭が大文字)とする
– 宣言時には `:` を変数名に続けて入力し、空白1文字ののち型を宣言する

“`swift
var playerId: Int
“`

– アルファベットの省略語は大文字を用いる

“`swift
var webURL: URL?
“`

– ただし、変数名の頭にきた場合には小文字とする

“`swift
var urlString: String?
“`

– **アクセスレベルによって `_` をつけるといったことは行わない**

“`swift
private var someFlag: Bool

var otherFlag: Bool

// NG
private var _s

元記事を表示

Swift URLで、日本語URLに対応する

# 概要

URLが表現された文字列をSwift URLクラスにする場合、

“`swift
let url = URL(string: “https://qiita.com”)
“`

のような書き方をすると思います。
これでURLの処理をしていくことになります。

しかし、日本語が含まれるURL、例えば、
総務省のWikipedia https://ja.wikipedia.org/wiki/総務省
なんかだと、

“`swift
let url = URL(string: “https://ja.wikipedia.org/wiki/総務省”)
print(url) // nil
“`

このように日本語のURLはnilになります。
なので、これを日本語URLに対応するようにします。

## URLComponentsで日本語URL対応する

日本語URL対応のためURLComponentsを使います。

https://developer.apple.com/documentation/foundation/urlcomponents

ドキュメントにも書いてあります

元記事を表示

Core Dataでの書き込み時にnewBackgroundContextに対する命令はperform/performAndWait内でないといけない

# はじめに

Core Dataでの書き込み時に`newBackgroundContext`メソッドで書き込み用コンテキストを利用することがあると思いますが、そのコンテキストに対してperform/performAndWait外から`fetch`や`count`などでリクエストを送ってはいけません。perform/performAndWaitで実行が保護されるキュー内でコンテキストにリクエストを送るべきのようです。

ちなみにこれデバッグオプションでアサート`-com.apple.CoreData.ConcurrencyDebug 1`を有効にするとクラッシュするのもわかります。

Appleのサンプルコードである[Handling Different Data Types in Core Data](https://developer.apple.com/documentation/coredata/handling_different_data_types_in_core_data)を駄目な感じに改変し、挙動を確認してみます。

![スクリーンショット 2021-10-14 18

元記事を表示

Core DataのEntityが持つAttributesの初期値は基本GUIで設定して必要だったらawakeFromInsertで記載する

# はじめに

Core DataのEntityが持つAttributesは初期値をXcodeのGUI(.xcdatamodeld)で設定できます。`NSManagedObject`のメソッド`awakeFromInsert`ではInsert時の値を入れることもできるので同じ値を重複して入れることで紛らわしいと感じるかもしれません。

初期値をどうするかはあらかじめ整理しておくと良いのではないかと思ってこの記事を書いてみました。コメントなりでご意見を
ください。

# 最初に結論

基本はデフォルト値をGUIで設定し、どうしても必要だったら重複する値を`awakeFromInsert`で設定する。

– awakeFromInsertで設定する初期値
– SHOULD
– insert時に計算したい固定値でLight Weight Migrationで追加しない最初からあるAttributes
– 例
– UUID().uuidString
– Date()

# 前提

元記事を表示

OTHERカテゴリの最新記事